
ulonglong __udivdi3(uint param_1,uint param_2,uint param_3,uint param_4)

{
  bool bVar1;
  longlong lVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  
  if (param_3 != 0) {
    if (param_1 < param_3) {
      return 0;
    }
    uVar3 = LZCOUNT(param_3);
    if (uVar3 == 0) {
      if (param_1 <= param_3) {
        return (ulonglong)(param_2 < param_4) ^ 1;
      }
      return 1;
    }
    uVar4 = 0x20 - uVar3;
    uVar5 = param_1 >> (uVar4 & 0x1f);
    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);
    uVar6 = uVar7 >> 0x10;
    if (uVar6 == 0) {
      trap(7);
    }
    uVar11 = uVar5 / uVar6;
    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);
    uVar8 = (uVar7 & 0xffff) * uVar11;
    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;
    uVar4 = uVar11;
    if (uVar5 < uVar8) {
      uVar5 = uVar5 + uVar7;
      uVar4 = uVar11 - 1;
      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {
        uVar4 = uVar11 - 2;
        uVar5 = uVar5 + uVar7;
      }
    }
    if (uVar6 == 0) {
      trap(7);
    }
    uVar10 = (uVar5 - uVar8) / uVar6;
    uVar11 = (uVar7 & 0xffff) * uVar10;
    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;
    uVar5 = uVar10;
    if (uVar6 < uVar11) {
      uVar6 = uVar6 + uVar7;
      uVar5 = uVar10 - 1;
      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {
        uVar5 = uVar10 - 2;
        uVar6 = uVar6 + uVar7;
      }
    }
    uVar5 = uVar4 << 0x10 | uVar5;
    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));
    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);
    if (uVar4 <= uVar6 - uVar11) {
      if (uVar6 - uVar11 != uVar4) {
        return (ulonglong)uVar5;
      }
      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;
      if (!bVar1) {
        return (ulonglong)CONCAT14(bVar1,uVar5);
      }
    }
    return (ulonglong)(uVar5 - 1);
  }
  uVar3 = LZCOUNT(param_4);
  if (param_1 < param_4) {
    if (uVar3 != 0) {
      uVar4 = param_2 >> (-uVar3 & 0x1f);
      param_4 = param_4 << (uVar3 & 0x1f);
      param_2 = param_2 << (uVar3 & 0x1f);
      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);
    }
    uVar3 = param_4 >> 0x10;
    if (uVar3 == 0) {
      trap(7);
    }
    uVar7 = param_1 / uVar3;
    uVar6 = (param_4 & 0xffff) * uVar7;
    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;
    uVar4 = uVar7;
    if (uVar5 < uVar6) {
      uVar5 = uVar5 + param_4;
      uVar4 = uVar7 - 1;
      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {
        uVar4 = uVar7 - 2;
        uVar5 = uVar5 + param_4;
      }
    }
    if (uVar3 == 0) {
      trap(7);
    }
    uVar8 = (uVar5 - uVar6) / uVar3;
    uVar7 = (param_4 & 0xffff) * uVar8;
    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;
    uVar3 = uVar8;
    if (uVar5 < uVar7) {
      uVar5 = param_4 + uVar5;
      uVar3 = uVar8 - 1;
      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {
        uVar3 = uVar8 - 2;
      }
    }
    return (ulonglong)(uVar4 << 0x10 | uVar3);
  }
  uVar3 = LZCOUNT(param_4);
  if (param_4 == 0) {
    trap(7);
    param_4 = 1 / 0;
    uVar3 = LZCOUNT(param_4);
  }
  uVar4 = param_4 >> 0x10;
  if (uVar3 == 0) {
    param_1 = param_1 - param_4;
    uVar5 = 1;
    uVar8 = param_4 & 0xffff;
  }
  else {
    param_4 = param_4 << (uVar3 & 0x1f);
    uVar4 = param_4 >> 0x10;
    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);
    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);
    if (uVar4 == 0) {
      trap(7);
    }
    uVar9 = uVar5 / uVar4;
    uVar8 = param_4 & 0xffff;
    param_2 = param_2 << (uVar3 & 0x1f);
    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);
    uVar7 = uVar8 * uVar9;
    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;
    uVar3 = uVar9;
    if (uVar5 < uVar7) {
      uVar5 = uVar5 + param_4;
      uVar3 = uVar9 - 1;
      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {
        uVar3 = uVar9 - 2;
        uVar5 = uVar5 + param_4;
      }
    }
    if (uVar4 == 0) {
      trap(7);
    }
    uVar11 = (uVar5 - uVar7) / uVar4;
    uVar9 = uVar8 * uVar11;
    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;
    uVar5 = uVar11;
    if (param_1 < uVar9) {
      param_1 = param_1 + param_4;
      uVar5 = uVar11 - 1;
      if ((param_4 <= param_1) && (param_1 < uVar9)) {
        uVar5 = uVar11 - 2;
        param_1 = param_1 + param_4;
      }
    }
    param_1 = param_1 - uVar9;
    uVar5 = uVar3 << 0x10 | uVar5;
  }
  if (uVar4 == 0) {
    trap(7);
  }
  uVar9 = param_1 / uVar4;
  uVar6 = uVar9 * uVar8;
  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;
  uVar3 = uVar9;
  if (uVar7 < uVar6) {
    uVar7 = uVar7 + param_4;
    uVar3 = uVar9 - 1;
    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {
      uVar7 = uVar7 + param_4;
      uVar3 = uVar9 - 2;
    }
  }
  if (uVar4 == 0) {
    trap(7);
  }
  uVar9 = (uVar7 - uVar6) / uVar4;
  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;
  uVar6 = param_4 + uVar4;
  if (uVar4 < uVar9 * uVar8) {
    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {
      uVar9 = uVar3 << 0x10 | uVar9 - 1;
      goto LAB_0001ec30;
    }
    uVar9 = uVar9 - 2;
  }
  uVar9 = uVar3 << 0x10 | uVar9;
LAB_0001ec30:
  return CONCAT44(uVar5,uVar9);
}



ulonglong FUN_0001ea70(uint param_1,uint param_2,uint param_3,uint param_4)

{
  bool bVar1;
  longlong lVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  
  if (param_3 != 0) {
    if (param_1 < param_3) {
      return 0;
    }
    uVar3 = LZCOUNT(param_3);
    if (uVar3 == 0) {
      if (param_1 <= param_3) {
        return (ulonglong)(param_2 < param_4) ^ 1;
      }
      return 1;
    }
    uVar4 = 0x20 - uVar3;
    uVar5 = param_1 >> (uVar4 & 0x1f);
    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);
    uVar6 = uVar7 >> 0x10;
    if (uVar6 == 0) {
      trap(7);
    }
    uVar11 = uVar5 / uVar6;
    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);
    uVar8 = (uVar7 & 0xffff) * uVar11;
    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;
    uVar4 = uVar11;
    if (uVar5 < uVar8) {
      uVar5 = uVar5 + uVar7;
      uVar4 = uVar11 - 1;
      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {
        uVar4 = uVar11 - 2;
        uVar5 = uVar5 + uVar7;
      }
    }
    if (uVar6 == 0) {
      trap(7);
    }
    uVar10 = (uVar5 - uVar8) / uVar6;
    uVar11 = (uVar7 & 0xffff) * uVar10;
    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;
    uVar5 = uVar10;
    if (uVar6 < uVar11) {
      uVar6 = uVar6 + uVar7;
      uVar5 = uVar10 - 1;
      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {
        uVar5 = uVar10 - 2;
        uVar6 = uVar6 + uVar7;
      }
    }
    uVar5 = uVar4 << 0x10 | uVar5;
    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));
    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);
    if (uVar4 <= uVar6 - uVar11) {
      if (uVar6 - uVar11 != uVar4) {
        return (ulonglong)uVar5;
      }
      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;
      if (!bVar1) {
        return (ulonglong)CONCAT14(bVar1,uVar5);
      }
    }
    return (ulonglong)(uVar5 - 1);
  }
  uVar3 = LZCOUNT(param_4);
  if (param_1 < param_4) {
    if (uVar3 != 0) {
      uVar4 = param_2 >> (-uVar3 & 0x1f);
      param_4 = param_4 << (uVar3 & 0x1f);
      param_2 = param_2 << (uVar3 & 0x1f);
      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);
    }
    uVar3 = param_4 >> 0x10;
    if (uVar3 == 0) {
      trap(7);
    }
    uVar7 = param_1 / uVar3;
    uVar6 = (param_4 & 0xffff) * uVar7;
    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;
    uVar4 = uVar7;
    if (uVar5 < uVar6) {
      uVar5 = uVar5 + param_4;
      uVar4 = uVar7 - 1;
      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {
        uVar4 = uVar7 - 2;
        uVar5 = uVar5 + param_4;
      }
    }
    if (uVar3 == 0) {
      trap(7);
    }
    uVar8 = (uVar5 - uVar6) / uVar3;
    uVar7 = (param_4 & 0xffff) * uVar8;
    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;
    uVar3 = uVar8;
    if (uVar5 < uVar7) {
      uVar5 = param_4 + uVar5;
      uVar3 = uVar8 - 1;
      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {
        uVar3 = uVar8 - 2;
      }
    }
    return (ulonglong)(uVar4 << 0x10 | uVar3);
  }
  uVar3 = LZCOUNT(param_4);
  if (param_4 == 0) {
    trap(7);
    param_4 = 1 / 0;
    uVar3 = LZCOUNT(param_4);
  }
  uVar4 = param_4 >> 0x10;
  if (uVar3 == 0) {
    param_1 = param_1 - param_4;
    uVar5 = 1;
    uVar8 = param_4 & 0xffff;
  }
  else {
    param_4 = param_4 << (uVar3 & 0x1f);
    uVar4 = param_4 >> 0x10;
    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);
    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);
    if (uVar4 == 0) {
      trap(7);
    }
    uVar9 = uVar5 / uVar4;
    uVar8 = param_4 & 0xffff;
    param_2 = param_2 << (uVar3 & 0x1f);
    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);
    uVar7 = uVar8 * uVar9;
    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;
    uVar3 = uVar9;
    if (uVar5 < uVar7) {
      uVar5 = uVar5 + param_4;
      uVar3 = uVar9 - 1;
      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {
        uVar3 = uVar9 - 2;
        uVar5 = uVar5 + param_4;
      }
    }
    if (uVar4 == 0) {
      trap(7);
    }
    uVar11 = (uVar5 - uVar7) / uVar4;
    uVar9 = uVar8 * uVar11;
    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;
    uVar5 = uVar11;
    if (param_1 < uVar9) {
      param_1 = param_1 + param_4;
      uVar5 = uVar11 - 1;
      if ((param_4 <= param_1) && (param_1 < uVar9)) {
        uVar5 = uVar11 - 2;
        param_1 = param_1 + param_4;
      }
    }
    param_1 = param_1 - uVar9;
    uVar5 = uVar3 << 0x10 | uVar5;
  }
  if (uVar4 == 0) {
    trap(7);
  }
  uVar9 = param_1 / uVar4;
  uVar6 = uVar9 * uVar8;
  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;
  uVar3 = uVar9;
  if (uVar7 < uVar6) {
    uVar7 = uVar7 + param_4;
    uVar3 = uVar9 - 1;
    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {
      uVar7 = uVar7 + param_4;
      uVar3 = uVar9 - 2;
    }
  }
  if (uVar4 == 0) {
    trap(7);
  }
  uVar9 = (uVar7 - uVar6) / uVar4;
  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;
  uVar6 = param_4 + uVar4;
  if (uVar4 < uVar9 * uVar8) {
    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {
      uVar9 = uVar3 << 0x10 | uVar9 - 1;
      goto LAB_0001ec30;
    }
    uVar9 = uVar9 - 2;
  }
  uVar9 = uVar3 << 0x10 | uVar9;
LAB_0001ec30:
  return CONCAT44(uVar5,uVar9);
}


or t1,a1,zero
bne a2,zero,0x0001ec38
_or v0,a0,zero
sltu v1,a0,a3
beq v1,zero,0x0001eb60
_clz v1,a3
beq v1,zero,0x0001eaa4
_subu a0,zero,v1
sllv v0,v0,v1
srlv a0,a1,a0
sllv a3,a3,v1
sllv t1,a1,v1
or v0,a0,v0
srl v1,a3,0x10
andi a2,a3,0xffff
teq v1,zero
divu v0,v1
srl a0,t1,0x10
mflo v0
mfhi a1
mul t0,a2,v0
sll a1,a1,0x10
or a0,a1,a0
sltu a1,a0,t0
beq a1,zero,0x0001eafc
_nop
addu a0,a0,a3
sltu a1,a0,a3
bne a1,zero,0x0001ee54
_addiu t2,v0,-0x1
sltu a1,a0,t0
beq a1,zero,0x0001ee54
_nop
addiu v0,v0,-0x2
addu a0,a0,a3
subu a0,a0,t0
andi t1,t1,0xffff
teq v1,zero
divu a0,v1
mflo a0
mfhi v1
mul a2,a2,a0
sll v1,v1,0x10
or t1,v1,t1
sltu v1,t1,a2
beq v1,zero,0x0001eb50
_sll v1,v0,0x10
addu t1,a3,t1
sltu v1,t1,a3
bne v1,zero,0x0001ee6c
_addiu a1,a0,-0x1
sltu t1,t1,a2
beq t1,zero,0x0001ee6c
_nop
addiu a0,a0,-0x2
sll v1,v0,0x10
or v0,zero,zero
or v1,v1,a0
jr ra
_nop
bne a3,zero,0x0001eb7c
_clz t5,a3
li v0,0x1
teq a3,zero
divu v0,a3
mflo a3
clz t5,a3
bne t5,zero,0x0001ed78
_srl t0,a3,0x10
subu a0,a0,a3
li v0,0x1
andi t3,a3,0xffff
teq t0,zero
divu a0,t0
srl a1,t1,0x10
mflo a0
mfhi a2
mul v1,a0,t3
sll a2,a2,0x10
or a1,a2,a1
sltu a2,a1,v1
beq a2,zero,0x0001ebdc
_nop
addu a1,a1,a3
sltu a2,a1,a3
bne a2,zero,0x0001ebd8
_addiu t2,a0,-0x1
sltu a2,a1,v1
bne a2,zero,0x0001eeb0
_addiu a0,a0,-0x2
or a0,t2,zero
subu v1,a1,v1
andi t1,t1,0xffff
teq t0,zero
divu v1,t0
mflo v1
mfhi t0
mul t3,v1,t3
sll t0,t0,0x10
or t0,t0,t1
sltu a1,t0,t3
beq a1,zero,0x0001ec28
_addu t0,a3,t0
sltu a3,t0,a3
bne a3,zero,0x0001ee5c
_addiu a1,v1,-0x1
sltu t0,t0,t3
beq t0,zero,0x0001ee5c
_nop
addiu v1,v1,-0x2
sll a0,a0,0x10
or v1,a0,v1
jr ra
_nop
sltu v0,a0,a2
bne v0,zero,0x0001ec6c
_or v1,zero,zero
clz v0,a2
bne v0,zero,0x0001ec78
_li v1,0x20
sltu a0,a2,a0
bne a0,zero,0x0001ee84
_nop
sltu v1,a1,a3
xori v1,v1,0x1
jr ra
_nop
or v0,zero,zero
jr ra
_nop
sllv a2,a2,v0
subu v1,v1,v0
sllv t5,a0,v0
srlv t3,a3,v1
srlv a0,a0,v1
or t3,t3,a2
srl t1,t3,0x10
andi t4,t3,0xffff
teq t1,zero
divu a0,t1
srlv t2,a1,v1
or t2,t2,t5
srl a2,t2,0x10
mflo a0
mfhi t0
mul v1,t4,a0
sll t0,t0,0x10
or a2,t0,a2
sltu t0,a2,v1
beq t0,zero,0x0001ecf0
_sllv a3,a3,v0
addu a2,a2,t3
sltu t0,a2,t3
bne t0,zero,0x0001eea8
_addiu t5,a0,-0x1
sltu t0,a2,v1
beq t0,zero,0x0001eea8
_nop
addiu a0,a0,-0x2
addu a2,a2,t3
subu a2,a2,v1
andi t2,t2,0xffff
teq t1,zero
divu a2,t1
mflo v1
mfhi a2
mul t0,t4,v1
sll t1,a2,0x10
or t1,t1,t2
sltu a2,t1,t0
beq a2,zero,0x0001ed44
_nop
addu t1,t1,t3
sltu a2,t1,t3
bne a2,zero,0x0001ee98
_addiu t2,v1,-0x1
sltu a2,t1,t0
beq a2,zero,0x0001ee98
_nop
addiu v1,v1,-0x2
addu t1,t1,t3
sll a0,a0,0x10
subu t1,t1,t0
or a0,a0,v1
multu a0,a3
mfhi a2
sltu v1,t1,a2
bne v1,zero,0x0001ee74
_mflo a3
beq t1,a2,0x0001eeb8
_or v1,a0,zero
or v0,zero,zero
jr ra
_nop
li t1,0x20
sllv a3,a3,t5
subu t1,t1,t5
srl t0,a3,0x10
srlv v0,a0,t1
srlv t4,a1,t1
teq t0,zero
divu v0,t0
sllv a0,a0,t5
andi t3,a3,0xffff
sllv t1,a1,t5
or a1,t4,a0
srl v1,a1,0x10
mflo t6
mfhi t2
mul a0,t3,t6
sll t2,t2,0x10
or v1,t2,v1
sltu v0,v1,a0
beq v0,zero,0x0001edf0
_nop
addu v1,v1,a3
sltu v0,v1,a3
bne v0,zero,0x0001eea0
_addiu a2,t6,-0x1
sltu v0,v1,a0
beq v0,zero,0x0001eea0
_nop
addiu t6,t6,-0x2
addu v1,v1,a3
subu a0,v1,a0
andi a1,a1,0xffff
teq t0,zero
divu a0,t0
mflo v0
mfhi a0
mul v1,t3,v0
sll a0,a0,0x10
or a0,a0,a1
sltu a1,a0,v1
beq a1,zero,0x0001ee44
_nop
addu a0,a0,a3
sltu a1,a0,a3
bne a1,zero,0x0001ee90
_addiu a2,v0,-0x1
sltu a1,a0,v1
beq a1,zero,0x0001ee90
_nop
addiu v0,v0,-0x2
addu a0,a0,a3
sll t6,t6,0x10
subu a0,a0,v1
b 0x0001eb90
_or v0,t6,v0
b 0x0001eafc
_or v0,t2,zero
sll a0,a0,0x10
or v1,a1,zero
b 0x0001ec30
_or v1,a0,v1
b 0x0001eb4c
_or a0,a1,zero
addiu v1,a0,-0x1
or v0,zero,zero
jr ra
_nop
li v1,0x1
jr ra
_nop
b 0x0001ee44
_or v0,a2,zero
b 0x0001ed44
_or v1,t2,zero
b 0x0001edf0
_or t6,a2,zero
b 0x0001ecf0
_or a0,t5,zero
b 0x0001ebdc
_addu a1,a1,a3
sllv v0,a1,v0
sltu v0,v0,a3
bne v0,zero,0x0001ee74
_nop
or v1,a0,zero
jr ra
_nop
(translation_unit "ulonglong FUN_0001ea70(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  bool bVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }\n  uVar4 = param_4 >> 0x10;\n  if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = param_1 / uVar4;\n  uVar6 = uVar9 * uVar8;\n  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;\n  uVar3 = uVar9;\n  if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = (uVar7 - uVar6) / uVar4;\n  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;\n  uVar6 = param_4 + uVar4;\n  if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }\n  uVar9 = uVar3 << 0x10 | uVar9;\nLAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);\n}\n\n" (function_definition "ulonglong FUN_0001ea70(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  bool bVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }\n  uVar4 = param_4 >> 0x10;\n  if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = param_1 / uVar4;\n  uVar6 = uVar9 * uVar8;\n  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;\n  uVar3 = uVar9;\n  if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = (uVar7 - uVar6) / uVar4;\n  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;\n  uVar6 = param_4 + uVar4;\n  if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }\n  uVar9 = uVar3 << 0x10 | uVar9;\nLAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);\n}" type_identifier (function_declarator "FUN_0001ea70(uint param_1,uint param_2,uint param_3,uint param_4)" identifier (parameter_list "(uint param_1,uint param_2,uint param_3,uint param_4)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  bool bVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }\n  uVar4 = param_4 >> 0x10;\n  if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = param_1 / uVar4;\n  uVar6 = uVar9 * uVar8;\n  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;\n  uVar3 = uVar9;\n  if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = (uVar7 - uVar6) / uVar4;\n  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;\n  uVar6 = param_4 + uVar4;\n  if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }\n  uVar9 = uVar3 << 0x10 | uVar9;\nLAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "longlong lVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (if_statement "if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }" { (if_statement "if (param_1 < param_3) {\n      return 0;\n    }" if (parenthesized_expression "(param_1 < param_3)" ( (binary_expression "param_1 < param_3" identifier < identifier) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar3 = LZCOUNT(param_3);" (assignment_expression "uVar3 = LZCOUNT(param_3)" identifier = (call_expression "LZCOUNT(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (if_statement "if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }" { (if_statement "if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }" if (parenthesized_expression "(param_1 <= param_3)" ( (binary_expression "param_1 <= param_3" identifier <= identifier) )) (compound_statement "{\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }" { (return_statement "return (ulonglong)(param_2 < param_4) ^ 1;" return (binary_expression "(ulonglong)(param_2 < param_4) ^ 1" (call_expression "(ulonglong)(param_2 < param_4)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(param_2 < param_4)" ( (binary_expression "param_2 < param_4" identifier < identifier) ))) ^ number_literal) ;) })) (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar4 = 0x20 - uVar3;" (assignment_expression "uVar4 = 0x20 - uVar3" identifier = (binary_expression "0x20 - uVar3" number_literal - identifier)) ;) (expression_statement "uVar5 = param_1 >> (uVar4 & 0x1f);" (assignment_expression "uVar5 = param_1 >> (uVar4 & 0x1f)" identifier = (binary_expression "param_1 >> (uVar4 & 0x1f)" identifier >> (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);" (assignment_expression "uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f)" identifier = (binary_expression "param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f)" (binary_expression "param_4 >> (uVar4 & 0x1f)" identifier >> (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_3 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar6 = uVar7 >> 0x10;" (assignment_expression "uVar6 = uVar7 >> 0x10" identifier = (binary_expression "uVar7 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar6 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar11 = uVar5 / uVar6;" (assignment_expression "uVar11 = uVar5 / uVar6" identifier = (binary_expression "uVar5 / uVar6" identifier / identifier)) ;) (expression_statement "uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);" (assignment_expression "uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f)" identifier = (binary_expression "param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f)" (binary_expression "param_2 >> (uVar4 & 0x1f)" identifier >> (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_1 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar8 = (uVar7 & 0xffff) * uVar11;" (assignment_expression "uVar8 = (uVar7 & 0xffff) * uVar11" identifier = (binary_expression "(uVar7 & 0xffff) * uVar11" (parenthesized_expression "(uVar7 & 0xffff)" ( (binary_expression "uVar7 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;" (assignment_expression "uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10" identifier = (binary_expression "uVar5 % uVar6 << 0x10 | uVar9 >> 0x10" (binary_expression "uVar5 % uVar6 << 0x10" (binary_expression "uVar5 % uVar6" identifier % identifier) << number_literal) | (binary_expression "uVar9 >> 0x10" identifier >> number_literal))) ;) (expression_statement "uVar4 = uVar11;" (assignment_expression "uVar4 = uVar11" identifier = identifier) ;) (if_statement "if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }" if (parenthesized_expression "(uVar5 < uVar8)" ( (binary_expression "uVar5 < uVar8" identifier < identifier) )) (compound_statement "{\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }" { (expression_statement "uVar5 = uVar5 + uVar7;" (assignment_expression "uVar5 = uVar5 + uVar7" identifier = (binary_expression "uVar5 + uVar7" identifier + identifier)) ;) (expression_statement "uVar4 = uVar11 - 1;" (assignment_expression "uVar4 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }" if (parenthesized_expression "((uVar7 <= uVar5) && (uVar5 < uVar8))" ( (binary_expression "(uVar7 <= uVar5) && (uVar5 < uVar8)" (parenthesized_expression "(uVar7 <= uVar5)" ( (binary_expression "uVar7 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar8)" ( (binary_expression "uVar5 < uVar8" identifier < identifier) ))) )) (compound_statement "{\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }" { (expression_statement "uVar4 = uVar11 - 2;" (assignment_expression "uVar4 = uVar11 - 2" identifier = (binary_expression "uVar11 - 2" identifier - number_literal)) ;) (expression_statement "uVar5 = uVar5 + uVar7;" (assignment_expression "uVar5 = uVar5 + uVar7" identifier = (binary_expression "uVar5 + uVar7" identifier + identifier)) ;) })) })) (if_statement "if (uVar6 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar10 = (uVar5 - uVar8) / uVar6;" (assignment_expression "uVar10 = (uVar5 - uVar8) / uVar6" identifier = (binary_expression "(uVar5 - uVar8) / uVar6" (parenthesized_expression "(uVar5 - uVar8)" ( (binary_expression "uVar5 - uVar8" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar11 = (uVar7 & 0xffff) * uVar10;" (assignment_expression "uVar11 = (uVar7 & 0xffff) * uVar10" identifier = (binary_expression "(uVar7 & 0xffff) * uVar10" (parenthesized_expression "(uVar7 & 0xffff)" ( (binary_expression "uVar7 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;" (assignment_expression "uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff" identifier = (binary_expression "(uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff" (binary_expression "(uVar5 - uVar8) % uVar6 << 0x10" (binary_expression "(uVar5 - uVar8) % uVar6" (parenthesized_expression "(uVar5 - uVar8)" ( (binary_expression "uVar5 - uVar8" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "uVar9 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar5 = uVar10;" (assignment_expression "uVar5 = uVar10" identifier = identifier) ;) (if_statement "if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }" if (parenthesized_expression "(uVar6 < uVar11)" ( (binary_expression "uVar6 < uVar11" identifier < identifier) )) (compound_statement "{\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }" { (expression_statement "uVar6 = uVar6 + uVar7;" (assignment_expression "uVar6 = uVar6 + uVar7" identifier = (binary_expression "uVar6 + uVar7" identifier + identifier)) ;) (expression_statement "uVar5 = uVar10 - 1;" (assignment_expression "uVar5 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }" if (parenthesized_expression "((uVar7 <= uVar6) && (uVar6 < uVar11))" ( (binary_expression "(uVar7 <= uVar6) && (uVar6 < uVar11)" (parenthesized_expression "(uVar7 <= uVar6)" ( (binary_expression "uVar7 <= uVar6" identifier <= identifier) )) && (parenthesized_expression "(uVar6 < uVar11)" ( (binary_expression "uVar6 < uVar11" identifier < identifier) ))) )) (compound_statement "{\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }" { (expression_statement "uVar5 = uVar10 - 2;" (assignment_expression "uVar5 = uVar10 - 2" identifier = (binary_expression "uVar10 - 2" identifier - number_literal)) ;) (expression_statement "uVar6 = uVar6 + uVar7;" (assignment_expression "uVar6 = uVar6 + uVar7" identifier = (binary_expression "uVar6 + uVar7" identifier + identifier)) ;) })) })) (expression_statement "uVar5 = uVar4 << 0x10 | uVar5;" (assignment_expression "uVar5 = uVar4 << 0x10 | uVar5" identifier = (binary_expression "uVar4 << 0x10 | uVar5" (binary_expression "uVar4 << 0x10" identifier << number_literal) | identifier)) ;) (expression_statement "lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));" (assignment_expression "lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f))" identifier = (binary_expression "(ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f))" (cast_expression "(ulonglong)uVar5" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (call_expression "(ulonglong)(param_4 << (uVar3 & 0x1f))" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(param_4 << (uVar3 & 0x1f))" ( (binary_expression "param_4 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))) ))))) ;) (expression_statement "uVar4 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar4 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }" if (parenthesized_expression "(uVar4 <= uVar6 - uVar11)" ( (binary_expression "uVar4 <= uVar6 - uVar11" identifier <= (binary_expression "uVar6 - uVar11" identifier - identifier)) )) (compound_statement "{\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }" { (if_statement "if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }" if (parenthesized_expression "(uVar6 - uVar11 != uVar4)" ( (binary_expression "uVar6 - uVar11 != uVar4" (binary_expression "uVar6 - uVar11" identifier - identifier) != identifier) )) (compound_statement "{\n        return (ulonglong)uVar5;\n      }" { (return_statement "return (ulonglong)uVar5;" return (cast_expression "(ulonglong)uVar5" ( (type_descriptor "ulonglong" type_identifier) ) identifier) ;) })) (expression_statement "bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;" (assignment_expression "bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2" identifier = (binary_expression "param_2 << (uVar3 & 0x1f) < (uint)lVar2" (binary_expression "param_2 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))) < (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }" if (parenthesized_expression "(!bVar1)" ( (unary_expression "!bVar1" ! identifier) )) (compound_statement "{\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }" { (return_statement "return (ulonglong)CONCAT14(bVar1,uVar5);" return (cast_expression "(ulonglong)CONCAT14(bVar1,uVar5)" ( (type_descriptor "ulonglong" type_identifier) ) (call_expression "CONCAT14(bVar1,uVar5)" identifier (argument_list "(bVar1,uVar5)" ( identifier , identifier )))) ;) })) })) (return_statement "return (ulonglong)(uVar5 - 1);" return (call_expression "(ulonglong)(uVar5 - 1)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(uVar5 - 1)" ( (binary_expression "uVar5 - 1" identifier - number_literal) ))) ;) })) (expression_statement "uVar3 = LZCOUNT(param_4);" (assignment_expression "uVar3 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) (if_statement "if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }" if (parenthesized_expression "(param_1 < param_4)" ( (binary_expression "param_1 < param_4" identifier < identifier) )) (compound_statement "{\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }" { (if_statement "if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }" { (expression_statement "uVar4 = param_2 >> (-uVar3 & 0x1f);" (assignment_expression "uVar4 = param_2 >> (-uVar3 & 0x1f)" identifier = (binary_expression "param_2 >> (-uVar3 & 0x1f)" identifier >> (parenthesized_expression "(-uVar3 & 0x1f)" ( (binary_expression "-uVar3 & 0x1f" (unary_expression "-uVar3" - identifier) & number_literal) )))) ;) (expression_statement "param_4 = param_4 << (uVar3 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar3 & 0x1f)" identifier = (binary_expression "param_4 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "param_2 = param_2 << (uVar3 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar3 & 0x1f)" identifier = (binary_expression "param_2 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "param_1 = uVar4 | param_1 << (uVar3 & 0x1f);" (assignment_expression "param_1 = uVar4 | param_1 << (uVar3 & 0x1f)" identifier = (binary_expression "uVar4 | param_1 << (uVar3 & 0x1f)" identifier | (binary_expression "param_1 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))))) ;) })) (expression_statement "uVar3 = param_4 >> 0x10;" (assignment_expression "uVar3 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar7 = param_1 / uVar3;" (assignment_expression "uVar7 = param_1 / uVar3" identifier = (binary_expression "param_1 / uVar3" identifier / identifier)) ;) (expression_statement "uVar6 = (param_4 & 0xffff) * uVar7;" (assignment_expression "uVar6 = (param_4 & 0xffff) * uVar7" identifier = (binary_expression "(param_4 & 0xffff) * uVar7" (parenthesized_expression "(param_4 & 0xffff)" ( (binary_expression "param_4 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10" identifier = (binary_expression "param_1 % uVar3 << 0x10 | param_2 >> 0x10" (binary_expression "param_1 % uVar3 << 0x10" (binary_expression "param_1 % uVar3" identifier % identifier) << number_literal) | (binary_expression "param_2 >> 0x10" identifier >> number_literal))) ;) (expression_statement "uVar4 = uVar7;" (assignment_expression "uVar4 = uVar7" identifier = identifier) ;) (if_statement "if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" if (parenthesized_expression "(uVar5 < uVar6)" ( (binary_expression "uVar5 < uVar6" identifier < identifier) )) (compound_statement "{\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" { (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" identifier = (binary_expression "uVar5 + param_4" identifier + identifier)) ;) (expression_statement "uVar4 = uVar7 - 1;" (assignment_expression "uVar4 = uVar7 - 1" identifier = (binary_expression "uVar7 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }" if (parenthesized_expression "((param_4 <= uVar5) && (uVar5 < uVar6))" ( (binary_expression "(param_4 <= uVar5) && (uVar5 < uVar6)" (parenthesized_expression "(param_4 <= uVar5)" ( (binary_expression "param_4 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar6)" ( (binary_expression "uVar5 < uVar6" identifier < identifier) ))) )) (compound_statement "{\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }" { (expression_statement "uVar4 = uVar7 - 2;" (assignment_expression "uVar4 = uVar7 - 2" identifier = (binary_expression "uVar7 - 2" identifier - number_literal)) ;) (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" identifier = (binary_expression "uVar5 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar8 = (uVar5 - uVar6) / uVar3;" (assignment_expression "uVar8 = (uVar5 - uVar6) / uVar3" identifier = (binary_expression "(uVar5 - uVar6) / uVar3" (parenthesized_expression "(uVar5 - uVar6)" ( (binary_expression "uVar5 - uVar6" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar7 = (param_4 & 0xffff) * uVar8;" (assignment_expression "uVar7 = (param_4 & 0xffff) * uVar8" identifier = (binary_expression "(param_4 & 0xffff) * uVar8" (parenthesized_expression "(param_4 & 0xffff)" ( (binary_expression "param_4 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff" identifier = (binary_expression "(uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar5 - uVar6) % uVar3 << 0x10" (binary_expression "(uVar5 - uVar6) % uVar3" (parenthesized_expression "(uVar5 - uVar6)" ( (binary_expression "uVar5 - uVar6" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "param_2 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar3 = uVar8;" (assignment_expression "uVar3 = uVar8" identifier = identifier) ;) (if_statement "if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }" if (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) )) (compound_statement "{\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }" { (expression_statement "uVar5 = param_4 + uVar5;" (assignment_expression "uVar5 = param_4 + uVar5" identifier = (binary_expression "param_4 + uVar5" identifier + identifier)) ;) (expression_statement "uVar3 = uVar8 - 1;" (assignment_expression "uVar3 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }" if (parenthesized_expression "((param_4 <= uVar5) && (uVar5 < uVar7))" ( (binary_expression "(param_4 <= uVar5) && (uVar5 < uVar7)" (parenthesized_expression "(param_4 <= uVar5)" ( (binary_expression "param_4 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) ))) )) (compound_statement "{\n        uVar3 = uVar8 - 2;\n      }" { (expression_statement "uVar3 = uVar8 - 2;" (assignment_expression "uVar3 = uVar8 - 2" identifier = (binary_expression "uVar8 - 2" identifier - number_literal)) ;) })) })) (return_statement "return (ulonglong)(uVar4 << 0x10 | uVar3);" return (call_expression "(ulonglong)(uVar4 << 0x10 | uVar3)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(uVar4 << 0x10 | uVar3)" ( (binary_expression "uVar4 << 0x10 | uVar3" (binary_expression "uVar4 << 0x10" identifier << number_literal) | identifier) ))) ;) })) (expression_statement "uVar3 = LZCOUNT(param_4);" (assignment_expression "uVar3 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) (if_statement "if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) (expression_statement "param_4 = 1 / 0;" (assignment_expression "param_4 = 1 / 0" identifier = (binary_expression "1 / 0" number_literal / number_literal)) ;) (expression_statement "uVar3 = LZCOUNT(param_4);" (assignment_expression "uVar3 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) })) (expression_statement "uVar4 = param_4 >> 0x10;" (assignment_expression "uVar4 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }" { (expression_statement "param_1 = param_1 - param_4;" (assignment_expression "param_1 = param_1 - param_4" identifier = (binary_expression "param_1 - param_4" identifier - identifier)) ;) (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) (expression_statement "uVar8 = param_4 & 0xffff;" (assignment_expression "uVar8 = param_4 & 0xffff" identifier = (binary_expression "param_4 & 0xffff" identifier & number_literal)) ;) }) (else_clause "else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }" else (compound_statement "{\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }" { (expression_statement "param_4 = param_4 << (uVar3 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar3 & 0x1f)" identifier = (binary_expression "param_4 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar4 = param_4 >> 0x10;" (assignment_expression "uVar4 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (expression_statement "uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);" (assignment_expression "uVar5 = param_1 >> (0x20 - uVar3 & 0x1f)" identifier = (binary_expression "param_1 >> (0x20 - uVar3 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar3 & 0x1f)" ( (binary_expression "0x20 - uVar3 & 0x1f" (binary_expression "0x20 - uVar3" number_literal - identifier) & number_literal) )))) ;) (expression_statement "uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);" (assignment_expression "uVar6 = param_2 >> (0x20 - uVar3 & 0x1f)" identifier = (binary_expression "param_2 >> (0x20 - uVar3 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar3 & 0x1f)" ( (binary_expression "0x20 - uVar3 & 0x1f" (binary_expression "0x20 - uVar3" number_literal - identifier) & number_literal) )))) ;) (if_statement "if (uVar4 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar9 = uVar5 / uVar4;" (assignment_expression "uVar9 = uVar5 / uVar4" identifier = (binary_expression "uVar5 / uVar4" identifier / identifier)) ;) (expression_statement "uVar8 = param_4 & 0xffff;" (assignment_expression "uVar8 = param_4 & 0xffff" identifier = (binary_expression "param_4 & 0xffff" identifier & number_literal)) ;) (expression_statement "param_2 = param_2 << (uVar3 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar3 & 0x1f)" identifier = (binary_expression "param_2 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);" (assignment_expression "uVar6 = uVar6 | param_1 << (uVar3 & 0x1f)" identifier = (binary_expression "uVar6 | param_1 << (uVar3 & 0x1f)" identifier | (binary_expression "param_1 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar7 = uVar8 * uVar9;" (assignment_expression "uVar7 = uVar8 * uVar9" identifier = (binary_expression "uVar8 * uVar9" identifier * identifier)) ;) (expression_statement "uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;" (assignment_expression "uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10" identifier = (binary_expression "uVar5 % uVar4 << 0x10 | uVar6 >> 0x10" (binary_expression "uVar5 % uVar4 << 0x10" (binary_expression "uVar5 % uVar4" identifier % identifier) << number_literal) | (binary_expression "uVar6 >> 0x10" identifier >> number_literal))) ;) (expression_statement "uVar3 = uVar9;" (assignment_expression "uVar3 = uVar9" identifier = identifier) ;) (if_statement "if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" if (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) )) (compound_statement "{\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" { (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" identifier = (binary_expression "uVar5 + param_4" identifier + identifier)) ;) (expression_statement "uVar3 = uVar9 - 1;" (assignment_expression "uVar3 = uVar9 - 1" identifier = (binary_expression "uVar9 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }" if (parenthesized_expression "((param_4 <= uVar5) && (uVar5 < uVar7))" ( (binary_expression "(param_4 <= uVar5) && (uVar5 < uVar7)" (parenthesized_expression "(param_4 <= uVar5)" ( (binary_expression "param_4 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) ))) )) (compound_statement "{\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }" { (expression_statement "uVar3 = uVar9 - 2;" (assignment_expression "uVar3 = uVar9 - 2" identifier = (binary_expression "uVar9 - 2" identifier - number_literal)) ;) (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" identifier = (binary_expression "uVar5 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar4 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar11 = (uVar5 - uVar7) / uVar4;" (assignment_expression "uVar11 = (uVar5 - uVar7) / uVar4" identifier = (binary_expression "(uVar5 - uVar7) / uVar4" (parenthesized_expression "(uVar5 - uVar7)" ( (binary_expression "uVar5 - uVar7" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar9 = uVar8 * uVar11;" (assignment_expression "uVar9 = uVar8 * uVar11" identifier = (binary_expression "uVar8 * uVar11" identifier * identifier)) ;) (expression_statement "param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;" (assignment_expression "param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff" identifier = (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff" (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10" (binary_expression "(uVar5 - uVar7) % uVar4" (parenthesized_expression "(uVar5 - uVar7)" ( (binary_expression "uVar5 - uVar7" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "uVar6 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar5 = uVar11;" (assignment_expression "uVar5 = uVar11" identifier = identifier) ;) (if_statement "if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }" if (parenthesized_expression "(param_1 < uVar9)" ( (binary_expression "param_1 < uVar9" identifier < identifier) )) (compound_statement "{\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }" { (expression_statement "param_1 = param_1 + param_4;" (assignment_expression "param_1 = param_1 + param_4" identifier = (binary_expression "param_1 + param_4" identifier + identifier)) ;) (expression_statement "uVar5 = uVar11 - 1;" (assignment_expression "uVar5 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }" if (parenthesized_expression "((param_4 <= param_1) && (param_1 < uVar9))" ( (binary_expression "(param_4 <= param_1) && (param_1 < uVar9)" (parenthesized_expression "(param_4 <= param_1)" ( (binary_expression "param_4 <= param_1" identifier <= identifier) )) && (parenthesized_expression "(param_1 < uVar9)" ( (binary_expression "param_1 < uVar9" identifier < identifier) ))) )) (compound_statement "{\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }" { (expression_statement "uVar5 = uVar11 - 2;" (assignment_expression "uVar5 = uVar11 - 2" identifier = (binary_expression "uVar11 - 2" identifier - number_literal)) ;) (expression_statement "param_1 = param_1 + param_4;" (assignment_expression "param_1 = param_1 + param_4" identifier = (binary_expression "param_1 + param_4" identifier + identifier)) ;) })) })) (expression_statement "param_1 = param_1 - uVar9;" (assignment_expression "param_1 = param_1 - uVar9" identifier = (binary_expression "param_1 - uVar9" identifier - identifier)) ;) (expression_statement "uVar5 = uVar3 << 0x10 | uVar5;" (assignment_expression "uVar5 = uVar3 << 0x10 | uVar5" identifier = (binary_expression "uVar3 << 0x10 | uVar5" (binary_expression "uVar3 << 0x10" identifier << number_literal) | identifier)) ;) }))) (if_statement "if (uVar4 == 0) {\n    trap(7);\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar9 = param_1 / uVar4;" (assignment_expression "uVar9 = param_1 / uVar4" identifier = (binary_expression "param_1 / uVar4" identifier / identifier)) ;) (expression_statement "uVar6 = uVar9 * uVar8;" (assignment_expression "uVar6 = uVar9 * uVar8" identifier = (binary_expression "uVar9 * uVar8" identifier * identifier)) ;) (expression_statement "uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10" identifier = (binary_expression "param_1 % uVar4 << 0x10 | param_2 >> 0x10" (binary_expression "param_1 % uVar4 << 0x10" (binary_expression "param_1 % uVar4" identifier % identifier) << number_literal) | (binary_expression "param_2 >> 0x10" identifier >> number_literal))) ;) (expression_statement "uVar3 = uVar9;" (assignment_expression "uVar3 = uVar9" identifier = identifier) ;) (if_statement "if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }" if (parenthesized_expression "(uVar7 < uVar6)" ( (binary_expression "uVar7 < uVar6" identifier < identifier) )) (compound_statement "{\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }" { (expression_statement "uVar7 = uVar7 + param_4;" (assignment_expression "uVar7 = uVar7 + param_4" identifier = (binary_expression "uVar7 + param_4" identifier + identifier)) ;) (expression_statement "uVar3 = uVar9 - 1;" (assignment_expression "uVar3 = uVar9 - 1" identifier = (binary_expression "uVar9 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }" if (parenthesized_expression "((param_4 <= uVar7) && (uVar7 < uVar6))" ( (binary_expression "(param_4 <= uVar7) && (uVar7 < uVar6)" (parenthesized_expression "(param_4 <= uVar7)" ( (binary_expression "param_4 <= uVar7" identifier <= identifier) )) && (parenthesized_expression "(uVar7 < uVar6)" ( (binary_expression "uVar7 < uVar6" identifier < identifier) ))) )) (compound_statement "{\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }" { (expression_statement "uVar7 = uVar7 + param_4;" (assignment_expression "uVar7 = uVar7 + param_4" identifier = (binary_expression "uVar7 + param_4" identifier + identifier)) ;) (expression_statement "uVar3 = uVar9 - 2;" (assignment_expression "uVar3 = uVar9 - 2" identifier = (binary_expression "uVar9 - 2" identifier - number_literal)) ;) })) })) (if_statement "if (uVar4 == 0) {\n    trap(7);\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar9 = (uVar7 - uVar6) / uVar4;" (assignment_expression "uVar9 = (uVar7 - uVar6) / uVar4" identifier = (binary_expression "(uVar7 - uVar6) / uVar4" (parenthesized_expression "(uVar7 - uVar6)" ( (binary_expression "uVar7 - uVar6" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff" identifier = (binary_expression "(uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar7 - uVar6) % uVar4 << 0x10" (binary_expression "(uVar7 - uVar6) % uVar4" (parenthesized_expression "(uVar7 - uVar6)" ( (binary_expression "uVar7 - uVar6" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "param_2 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar6 = param_4 + uVar4;" (assignment_expression "uVar6 = param_4 + uVar4" identifier = (binary_expression "param_4 + uVar4" identifier + identifier)) ;) (if_statement "if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }" if (parenthesized_expression "(uVar4 < uVar9 * uVar8)" ( (binary_expression "uVar4 < uVar9 * uVar8" identifier < (binary_expression "uVar9 * uVar8" identifier * identifier)) )) (compound_statement "{\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }" { (if_statement "if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }" if (parenthesized_expression "((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6))" ( (binary_expression "(uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)" (parenthesized_expression "(uVar6 < param_4)" ( (binary_expression "uVar6 < param_4" identifier < identifier) )) || (parenthesized_expression "(uVar9 * uVar8 <= uVar6)" ( (binary_expression "uVar9 * uVar8 <= uVar6" (binary_expression "uVar9 * uVar8" identifier * identifier) <= identifier) ))) )) (compound_statement "{\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }" { (expression_statement "uVar9 = uVar3 << 0x10 | uVar9 - 1;" (assignment_expression "uVar9 = uVar3 << 0x10 | uVar9 - 1" identifier = (binary_expression "uVar3 << 0x10 | uVar9 - 1" (binary_expression "uVar3 << 0x10" identifier << number_literal) | (binary_expression "uVar9 - 1" identifier - number_literal))) ;) (goto_statement "goto LAB_0001ec30;" goto statement_identifier ;) })) (expression_statement "uVar9 = uVar9 - 2;" (assignment_expression "uVar9 = uVar9 - 2" identifier = (binary_expression "uVar9 - 2" identifier - number_literal)) ;) })) (expression_statement "uVar9 = uVar3 << 0x10 | uVar9;" (assignment_expression "uVar9 = uVar3 << 0x10 | uVar9" identifier = (binary_expression "uVar3 << 0x10 | uVar9" (binary_expression "uVar3 << 0x10" identifier << number_literal) | identifier)) ;) (labeled_statement "LAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);" statement_identifier : (return_statement "return CONCAT44(uVar5,uVar9);" return (call_expression "CONCAT44(uVar5,uVar9)" identifier (argument_list "(uVar5,uVar9)" ( identifier , identifier ))) ;)) })))
(translation_unit "ulonglong __udivdi3(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  bool bVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }\n  uVar4 = param_4 >> 0x10;\n  if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = param_1 / uVar4;\n  uVar6 = uVar9 * uVar8;\n  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;\n  uVar3 = uVar9;\n  if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = (uVar7 - uVar6) / uVar4;\n  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;\n  uVar6 = param_4 + uVar4;\n  if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }\n  uVar9 = uVar3 << 0x10 | uVar9;\nLAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);\n}\n\n" (function_definition "ulonglong __udivdi3(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  bool bVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }\n  uVar4 = param_4 >> 0x10;\n  if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = param_1 / uVar4;\n  uVar6 = uVar9 * uVar8;\n  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;\n  uVar3 = uVar9;\n  if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = (uVar7 - uVar6) / uVar4;\n  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;\n  uVar6 = param_4 + uVar4;\n  if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }\n  uVar9 = uVar3 << 0x10 | uVar9;\nLAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);\n}" type_identifier (function_declarator "__udivdi3(uint param_1,uint param_2,uint param_3,uint param_4)" identifier (parameter_list "(uint param_1,uint param_2,uint param_3,uint param_4)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  bool bVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }\n  uVar4 = param_4 >> 0x10;\n  if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = param_1 / uVar4;\n  uVar6 = uVar9 * uVar8;\n  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;\n  uVar3 = uVar9;\n  if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = (uVar7 - uVar6) / uVar4;\n  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;\n  uVar6 = param_4 + uVar4;\n  if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }\n  uVar9 = uVar3 << 0x10 | uVar9;\nLAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "longlong lVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (if_statement "if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }" { (if_statement "if (param_1 < param_3) {\n      return 0;\n    }" if (parenthesized_expression "(param_1 < param_3)" ( (binary_expression "param_1 < param_3" identifier < identifier) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar3 = LZCOUNT(param_3);" (assignment_expression "uVar3 = LZCOUNT(param_3)" identifier = (call_expression "LZCOUNT(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (if_statement "if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }" { (if_statement "if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }" if (parenthesized_expression "(param_1 <= param_3)" ( (binary_expression "param_1 <= param_3" identifier <= identifier) )) (compound_statement "{\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }" { (return_statement "return (ulonglong)(param_2 < param_4) ^ 1;" return (binary_expression "(ulonglong)(param_2 < param_4) ^ 1" (call_expression "(ulonglong)(param_2 < param_4)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(param_2 < param_4)" ( (binary_expression "param_2 < param_4" identifier < identifier) ))) ^ number_literal) ;) })) (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar4 = 0x20 - uVar3;" (assignment_expression "uVar4 = 0x20 - uVar3" identifier = (binary_expression "0x20 - uVar3" number_literal - identifier)) ;) (expression_statement "uVar5 = param_1 >> (uVar4 & 0x1f);" (assignment_expression "uVar5 = param_1 >> (uVar4 & 0x1f)" identifier = (binary_expression "param_1 >> (uVar4 & 0x1f)" identifier >> (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);" (assignment_expression "uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f)" identifier = (binary_expression "param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f)" (binary_expression "param_4 >> (uVar4 & 0x1f)" identifier >> (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_3 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar6 = uVar7 >> 0x10;" (assignment_expression "uVar6 = uVar7 >> 0x10" identifier = (binary_expression "uVar7 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar6 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar11 = uVar5 / uVar6;" (assignment_expression "uVar11 = uVar5 / uVar6" identifier = (binary_expression "uVar5 / uVar6" identifier / identifier)) ;) (expression_statement "uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);" (assignment_expression "uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f)" identifier = (binary_expression "param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f)" (binary_expression "param_2 >> (uVar4 & 0x1f)" identifier >> (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_1 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar8 = (uVar7 & 0xffff) * uVar11;" (assignment_expression "uVar8 = (uVar7 & 0xffff) * uVar11" identifier = (binary_expression "(uVar7 & 0xffff) * uVar11" (parenthesized_expression "(uVar7 & 0xffff)" ( (binary_expression "uVar7 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;" (assignment_expression "uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10" identifier = (binary_expression "uVar5 % uVar6 << 0x10 | uVar9 >> 0x10" (binary_expression "uVar5 % uVar6 << 0x10" (binary_expression "uVar5 % uVar6" identifier % identifier) << number_literal) | (binary_expression "uVar9 >> 0x10" identifier >> number_literal))) ;) (expression_statement "uVar4 = uVar11;" (assignment_expression "uVar4 = uVar11" identifier = identifier) ;) (if_statement "if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }" if (parenthesized_expression "(uVar5 < uVar8)" ( (binary_expression "uVar5 < uVar8" identifier < identifier) )) (compound_statement "{\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }" { (expression_statement "uVar5 = uVar5 + uVar7;" (assignment_expression "uVar5 = uVar5 + uVar7" identifier = (binary_expression "uVar5 + uVar7" identifier + identifier)) ;) (expression_statement "uVar4 = uVar11 - 1;" (assignment_expression "uVar4 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }" if (parenthesized_expression "((uVar7 <= uVar5) && (uVar5 < uVar8))" ( (binary_expression "(uVar7 <= uVar5) && (uVar5 < uVar8)" (parenthesized_expression "(uVar7 <= uVar5)" ( (binary_expression "uVar7 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar8)" ( (binary_expression "uVar5 < uVar8" identifier < identifier) ))) )) (compound_statement "{\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }" { (expression_statement "uVar4 = uVar11 - 2;" (assignment_expression "uVar4 = uVar11 - 2" identifier = (binary_expression "uVar11 - 2" identifier - number_literal)) ;) (expression_statement "uVar5 = uVar5 + uVar7;" (assignment_expression "uVar5 = uVar5 + uVar7" identifier = (binary_expression "uVar5 + uVar7" identifier + identifier)) ;) })) })) (if_statement "if (uVar6 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar10 = (uVar5 - uVar8) / uVar6;" (assignment_expression "uVar10 = (uVar5 - uVar8) / uVar6" identifier = (binary_expression "(uVar5 - uVar8) / uVar6" (parenthesized_expression "(uVar5 - uVar8)" ( (binary_expression "uVar5 - uVar8" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar11 = (uVar7 & 0xffff) * uVar10;" (assignment_expression "uVar11 = (uVar7 & 0xffff) * uVar10" identifier = (binary_expression "(uVar7 & 0xffff) * uVar10" (parenthesized_expression "(uVar7 & 0xffff)" ( (binary_expression "uVar7 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;" (assignment_expression "uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff" identifier = (binary_expression "(uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff" (binary_expression "(uVar5 - uVar8) % uVar6 << 0x10" (binary_expression "(uVar5 - uVar8) % uVar6" (parenthesized_expression "(uVar5 - uVar8)" ( (binary_expression "uVar5 - uVar8" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "uVar9 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar5 = uVar10;" (assignment_expression "uVar5 = uVar10" identifier = identifier) ;) (if_statement "if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }" if (parenthesized_expression "(uVar6 < uVar11)" ( (binary_expression "uVar6 < uVar11" identifier < identifier) )) (compound_statement "{\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }" { (expression_statement "uVar6 = uVar6 + uVar7;" (assignment_expression "uVar6 = uVar6 + uVar7" identifier = (binary_expression "uVar6 + uVar7" identifier + identifier)) ;) (expression_statement "uVar5 = uVar10 - 1;" (assignment_expression "uVar5 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }" if (parenthesized_expression "((uVar7 <= uVar6) && (uVar6 < uVar11))" ( (binary_expression "(uVar7 <= uVar6) && (uVar6 < uVar11)" (parenthesized_expression "(uVar7 <= uVar6)" ( (binary_expression "uVar7 <= uVar6" identifier <= identifier) )) && (parenthesized_expression "(uVar6 < uVar11)" ( (binary_expression "uVar6 < uVar11" identifier < identifier) ))) )) (compound_statement "{\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }" { (expression_statement "uVar5 = uVar10 - 2;" (assignment_expression "uVar5 = uVar10 - 2" identifier = (binary_expression "uVar10 - 2" identifier - number_literal)) ;) (expression_statement "uVar6 = uVar6 + uVar7;" (assignment_expression "uVar6 = uVar6 + uVar7" identifier = (binary_expression "uVar6 + uVar7" identifier + identifier)) ;) })) })) (expression_statement "uVar5 = uVar4 << 0x10 | uVar5;" (assignment_expression "uVar5 = uVar4 << 0x10 | uVar5" identifier = (binary_expression "uVar4 << 0x10 | uVar5" (binary_expression "uVar4 << 0x10" identifier << number_literal) | identifier)) ;) (expression_statement "lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));" (assignment_expression "lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f))" identifier = (binary_expression "(ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f))" (cast_expression "(ulonglong)uVar5" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (call_expression "(ulonglong)(param_4 << (uVar3 & 0x1f))" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(param_4 << (uVar3 & 0x1f))" ( (binary_expression "param_4 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))) ))))) ;) (expression_statement "uVar4 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar4 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }" if (parenthesized_expression "(uVar4 <= uVar6 - uVar11)" ( (binary_expression "uVar4 <= uVar6 - uVar11" identifier <= (binary_expression "uVar6 - uVar11" identifier - identifier)) )) (compound_statement "{\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }" { (if_statement "if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }" if (parenthesized_expression "(uVar6 - uVar11 != uVar4)" ( (binary_expression "uVar6 - uVar11 != uVar4" (binary_expression "uVar6 - uVar11" identifier - identifier) != identifier) )) (compound_statement "{\n        return (ulonglong)uVar5;\n      }" { (return_statement "return (ulonglong)uVar5;" return (cast_expression "(ulonglong)uVar5" ( (type_descriptor "ulonglong" type_identifier) ) identifier) ;) })) (expression_statement "bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;" (assignment_expression "bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2" identifier = (binary_expression "param_2 << (uVar3 & 0x1f) < (uint)lVar2" (binary_expression "param_2 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))) < (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }" if (parenthesized_expression "(!bVar1)" ( (unary_expression "!bVar1" ! identifier) )) (compound_statement "{\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }" { (return_statement "return (ulonglong)CONCAT14(bVar1,uVar5);" return (cast_expression "(ulonglong)CONCAT14(bVar1,uVar5)" ( (type_descriptor "ulonglong" type_identifier) ) (call_expression "CONCAT14(bVar1,uVar5)" identifier (argument_list "(bVar1,uVar5)" ( identifier , identifier )))) ;) })) })) (return_statement "return (ulonglong)(uVar5 - 1);" return (call_expression "(ulonglong)(uVar5 - 1)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(uVar5 - 1)" ( (binary_expression "uVar5 - 1" identifier - number_literal) ))) ;) })) (expression_statement "uVar3 = LZCOUNT(param_4);" (assignment_expression "uVar3 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) (if_statement "if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }" if (parenthesized_expression "(param_1 < param_4)" ( (binary_expression "param_1 < param_4" identifier < identifier) )) (compound_statement "{\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }" { (if_statement "if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }" { (expression_statement "uVar4 = param_2 >> (-uVar3 & 0x1f);" (assignment_expression "uVar4 = param_2 >> (-uVar3 & 0x1f)" identifier = (binary_expression "param_2 >> (-uVar3 & 0x1f)" identifier >> (parenthesized_expression "(-uVar3 & 0x1f)" ( (binary_expression "-uVar3 & 0x1f" (unary_expression "-uVar3" - identifier) & number_literal) )))) ;) (expression_statement "param_4 = param_4 << (uVar3 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar3 & 0x1f)" identifier = (binary_expression "param_4 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "param_2 = param_2 << (uVar3 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar3 & 0x1f)" identifier = (binary_expression "param_2 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "param_1 = uVar4 | param_1 << (uVar3 & 0x1f);" (assignment_expression "param_1 = uVar4 | param_1 << (uVar3 & 0x1f)" identifier = (binary_expression "uVar4 | param_1 << (uVar3 & 0x1f)" identifier | (binary_expression "param_1 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))))) ;) })) (expression_statement "uVar3 = param_4 >> 0x10;" (assignment_expression "uVar3 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar7 = param_1 / uVar3;" (assignment_expression "uVar7 = param_1 / uVar3" identifier = (binary_expression "param_1 / uVar3" identifier / identifier)) ;) (expression_statement "uVar6 = (param_4 & 0xffff) * uVar7;" (assignment_expression "uVar6 = (param_4 & 0xffff) * uVar7" identifier = (binary_expression "(param_4 & 0xffff) * uVar7" (parenthesized_expression "(param_4 & 0xffff)" ( (binary_expression "param_4 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10" identifier = (binary_expression "param_1 % uVar3 << 0x10 | param_2 >> 0x10" (binary_expression "param_1 % uVar3 << 0x10" (binary_expression "param_1 % uVar3" identifier % identifier) << number_literal) | (binary_expression "param_2 >> 0x10" identifier >> number_literal))) ;) (expression_statement "uVar4 = uVar7;" (assignment_expression "uVar4 = uVar7" identifier = identifier) ;) (if_statement "if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" if (parenthesized_expression "(uVar5 < uVar6)" ( (binary_expression "uVar5 < uVar6" identifier < identifier) )) (compound_statement "{\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" { (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" identifier = (binary_expression "uVar5 + param_4" identifier + identifier)) ;) (expression_statement "uVar4 = uVar7 - 1;" (assignment_expression "uVar4 = uVar7 - 1" identifier = (binary_expression "uVar7 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }" if (parenthesized_expression "((param_4 <= uVar5) && (uVar5 < uVar6))" ( (binary_expression "(param_4 <= uVar5) && (uVar5 < uVar6)" (parenthesized_expression "(param_4 <= uVar5)" ( (binary_expression "param_4 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar6)" ( (binary_expression "uVar5 < uVar6" identifier < identifier) ))) )) (compound_statement "{\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }" { (expression_statement "uVar4 = uVar7 - 2;" (assignment_expression "uVar4 = uVar7 - 2" identifier = (binary_expression "uVar7 - 2" identifier - number_literal)) ;) (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" identifier = (binary_expression "uVar5 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar8 = (uVar5 - uVar6) / uVar3;" (assignment_expression "uVar8 = (uVar5 - uVar6) / uVar3" identifier = (binary_expression "(uVar5 - uVar6) / uVar3" (parenthesized_expression "(uVar5 - uVar6)" ( (binary_expression "uVar5 - uVar6" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar7 = (param_4 & 0xffff) * uVar8;" (assignment_expression "uVar7 = (param_4 & 0xffff) * uVar8" identifier = (binary_expression "(param_4 & 0xffff) * uVar8" (parenthesized_expression "(param_4 & 0xffff)" ( (binary_expression "param_4 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff" identifier = (binary_expression "(uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar5 - uVar6) % uVar3 << 0x10" (binary_expression "(uVar5 - uVar6) % uVar3" (parenthesized_expression "(uVar5 - uVar6)" ( (binary_expression "uVar5 - uVar6" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "param_2 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar3 = uVar8;" (assignment_expression "uVar3 = uVar8" identifier = identifier) ;) (if_statement "if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }" if (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) )) (compound_statement "{\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }" { (expression_statement "uVar5 = param_4 + uVar5;" (assignment_expression "uVar5 = param_4 + uVar5" identifier = (binary_expression "param_4 + uVar5" identifier + identifier)) ;) (expression_statement "uVar3 = uVar8 - 1;" (assignment_expression "uVar3 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }" if (parenthesized_expression "((param_4 <= uVar5) && (uVar5 < uVar7))" ( (binary_expression "(param_4 <= uVar5) && (uVar5 < uVar7)" (parenthesized_expression "(param_4 <= uVar5)" ( (binary_expression "param_4 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) ))) )) (compound_statement "{\n        uVar3 = uVar8 - 2;\n      }" { (expression_statement "uVar3 = uVar8 - 2;" (assignment_expression "uVar3 = uVar8 - 2" identifier = (binary_expression "uVar8 - 2" identifier - number_literal)) ;) })) })) (return_statement "return (ulonglong)(uVar4 << 0x10 | uVar3);" return (call_expression "(ulonglong)(uVar4 << 0x10 | uVar3)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(uVar4 << 0x10 | uVar3)" ( (binary_expression "uVar4 << 0x10 | uVar3" (binary_expression "uVar4 << 0x10" identifier << number_literal) | identifier) ))) ;) })) (expression_statement "uVar3 = LZCOUNT(param_4);" (assignment_expression "uVar3 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) (if_statement "if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) (expression_statement "param_4 = 1 / 0;" (assignment_expression "param_4 = 1 / 0" identifier = (binary_expression "1 / 0" number_literal / number_literal)) ;) (expression_statement "uVar3 = LZCOUNT(param_4);" (assignment_expression "uVar3 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) })) (expression_statement "uVar4 = param_4 >> 0x10;" (assignment_expression "uVar4 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }" { (expression_statement "param_1 = param_1 - param_4;" (assignment_expression "param_1 = param_1 - param_4" identifier = (binary_expression "param_1 - param_4" identifier - identifier)) ;) (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) (expression_statement "uVar8 = param_4 & 0xffff;" (assignment_expression "uVar8 = param_4 & 0xffff" identifier = (binary_expression "param_4 & 0xffff" identifier & number_literal)) ;) }) (else_clause "else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }" else (compound_statement "{\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }" { (expression_statement "param_4 = param_4 << (uVar3 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar3 & 0x1f)" identifier = (binary_expression "param_4 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar4 = param_4 >> 0x10;" (assignment_expression "uVar4 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (expression_statement "uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);" (assignment_expression "uVar5 = param_1 >> (0x20 - uVar3 & 0x1f)" identifier = (binary_expression "param_1 >> (0x20 - uVar3 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar3 & 0x1f)" ( (binary_expression "0x20 - uVar3 & 0x1f" (binary_expression "0x20 - uVar3" number_literal - identifier) & number_literal) )))) ;) (expression_statement "uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);" (assignment_expression "uVar6 = param_2 >> (0x20 - uVar3 & 0x1f)" identifier = (binary_expression "param_2 >> (0x20 - uVar3 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar3 & 0x1f)" ( (binary_expression "0x20 - uVar3 & 0x1f" (binary_expression "0x20 - uVar3" number_literal - identifier) & number_literal) )))) ;) (if_statement "if (uVar4 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar9 = uVar5 / uVar4;" (assignment_expression "uVar9 = uVar5 / uVar4" identifier = (binary_expression "uVar5 / uVar4" identifier / identifier)) ;) (expression_statement "uVar8 = param_4 & 0xffff;" (assignment_expression "uVar8 = param_4 & 0xffff" identifier = (binary_expression "param_4 & 0xffff" identifier & number_literal)) ;) (expression_statement "param_2 = param_2 << (uVar3 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar3 & 0x1f)" identifier = (binary_expression "param_2 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);" (assignment_expression "uVar6 = uVar6 | param_1 << (uVar3 & 0x1f)" identifier = (binary_expression "uVar6 | param_1 << (uVar3 & 0x1f)" identifier | (binary_expression "param_1 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar7 = uVar8 * uVar9;" (assignment_expression "uVar7 = uVar8 * uVar9" identifier = (binary_expression "uVar8 * uVar9" identifier * identifier)) ;) (expression_statement "uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;" (assignment_expression "uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10" identifier = (binary_expression "uVar5 % uVar4 << 0x10 | uVar6 >> 0x10" (binary_expression "uVar5 % uVar4 << 0x10" (binary_expression "uVar5 % uVar4" identifier % identifier) << number_literal) | (binary_expression "uVar6 >> 0x10" identifier >> number_literal))) ;) (expression_statement "uVar3 = uVar9;" (assignment_expression "uVar3 = uVar9" identifier = identifier) ;) (if_statement "if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" if (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) )) (compound_statement "{\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" { (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" identifier = (binary_expression "uVar5 + param_4" identifier + identifier)) ;) (expression_statement "uVar3 = uVar9 - 1;" (assignment_expression "uVar3 = uVar9 - 1" identifier = (binary_expression "uVar9 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }" if (parenthesized_expression "((param_4 <= uVar5) && (uVar5 < uVar7))" ( (binary_expression "(param_4 <= uVar5) && (uVar5 < uVar7)" (parenthesized_expression "(param_4 <= uVar5)" ( (binary_expression "param_4 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) ))) )) (compound_statement "{\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }" { (expression_statement "uVar3 = uVar9 - 2;" (assignment_expression "uVar3 = uVar9 - 2" identifier = (binary_expression "uVar9 - 2" identifier - number_literal)) ;) (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" identifier = (binary_expression "uVar5 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar4 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar11 = (uVar5 - uVar7) / uVar4;" (assignment_expression "uVar11 = (uVar5 - uVar7) / uVar4" identifier = (binary_expression "(uVar5 - uVar7) / uVar4" (parenthesized_expression "(uVar5 - uVar7)" ( (binary_expression "uVar5 - uVar7" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar9 = uVar8 * uVar11;" (assignment_expression "uVar9 = uVar8 * uVar11" identifier = (binary_expression "uVar8 * uVar11" identifier * identifier)) ;) (expression_statement "param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;" (assignment_expression "param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff" identifier = (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff" (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10" (binary_expression "(uVar5 - uVar7) % uVar4" (parenthesized_expression "(uVar5 - uVar7)" ( (binary_expression "uVar5 - uVar7" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "uVar6 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar5 = uVar11;" (assignment_expression "uVar5 = uVar11" identifier = identifier) ;) (if_statement "if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }" if (parenthesized_expression "(param_1 < uVar9)" ( (binary_expression "param_1 < uVar9" identifier < identifier) )) (compound_statement "{\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }" { (expression_statement "param_1 = param_1 + param_4;" (assignment_expression "param_1 = param_1 + param_4" identifier = (binary_expression "param_1 + param_4" identifier + identifier)) ;) (expression_statement "uVar5 = uVar11 - 1;" (assignment_expression "uVar5 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }" if (parenthesized_expression "((param_4 <= param_1) && (param_1 < uVar9))" ( (binary_expression "(param_4 <= param_1) && (param_1 < uVar9)" (parenthesized_expression "(param_4 <= param_1)" ( (binary_expression "param_4 <= param_1" identifier <= identifier) )) && (parenthesized_expression "(param_1 < uVar9)" ( (binary_expression "param_1 < uVar9" identifier < identifier) ))) )) (compound_statement "{\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }" { (expression_statement "uVar5 = uVar11 - 2;" (assignment_expression "uVar5 = uVar11 - 2" identifier = (binary_expression "uVar11 - 2" identifier - number_literal)) ;) (expression_statement "param_1 = param_1 + param_4;" (assignment_expression "param_1 = param_1 + param_4" identifier = (binary_expression "param_1 + param_4" identifier + identifier)) ;) })) })) (expression_statement "param_1 = param_1 - uVar9;" (assignment_expression "param_1 = param_1 - uVar9" identifier = (binary_expression "param_1 - uVar9" identifier - identifier)) ;) (expression_statement "uVar5 = uVar3 << 0x10 | uVar5;" (assignment_expression "uVar5 = uVar3 << 0x10 | uVar5" identifier = (binary_expression "uVar3 << 0x10 | uVar5" (binary_expression "uVar3 << 0x10" identifier << number_literal) | identifier)) ;) }))) (if_statement "if (uVar4 == 0) {\n    trap(7);\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar9 = param_1 / uVar4;" (assignment_expression "uVar9 = param_1 / uVar4" identifier = (binary_expression "param_1 / uVar4" identifier / identifier)) ;) (expression_statement "uVar6 = uVar9 * uVar8;" (assignment_expression "uVar6 = uVar9 * uVar8" identifier = (binary_expression "uVar9 * uVar8" identifier * identifier)) ;) (expression_statement "uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10" identifier = (binary_expression "param_1 % uVar4 << 0x10 | param_2 >> 0x10" (binary_expression "param_1 % uVar4 << 0x10" (binary_expression "param_1 % uVar4" identifier % identifier) << number_literal) | (binary_expression "param_2 >> 0x10" identifier >> number_literal))) ;) (expression_statement "uVar3 = uVar9;" (assignment_expression "uVar3 = uVar9" identifier = identifier) ;) (if_statement "if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }" if (parenthesized_expression "(uVar7 < uVar6)" ( (binary_expression "uVar7 < uVar6" identifier < identifier) )) (compound_statement "{\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }" { (expression_statement "uVar7 = uVar7 + param_4;" (assignment_expression "uVar7 = uVar7 + param_4" identifier = (binary_expression "uVar7 + param_4" identifier + identifier)) ;) (expression_statement "uVar3 = uVar9 - 1;" (assignment_expression "uVar3 = uVar9 - 1" identifier = (binary_expression "uVar9 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }" if (parenthesized_expression "((param_4 <= uVar7) && (uVar7 < uVar6))" ( (binary_expression "(param_4 <= uVar7) && (uVar7 < uVar6)" (parenthesized_expression "(param_4 <= uVar7)" ( (binary_expression "param_4 <= uVar7" identifier <= identifier) )) && (parenthesized_expression "(uVar7 < uVar6)" ( (binary_expression "uVar7 < uVar6" identifier < identifier) ))) )) (compound_statement "{\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }" { (expression_statement "uVar7 = uVar7 + param_4;" (assignment_expression "uVar7 = uVar7 + param_4" identifier = (binary_expression "uVar7 + param_4" identifier + identifier)) ;) (expression_statement "uVar3 = uVar9 - 2;" (assignment_expression "uVar3 = uVar9 - 2" identifier = (binary_expression "uVar9 - 2" identifier - number_literal)) ;) })) })) (if_statement "if (uVar4 == 0) {\n    trap(7);\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar9 = (uVar7 - uVar6) / uVar4;" (assignment_expression "uVar9 = (uVar7 - uVar6) / uVar4" identifier = (binary_expression "(uVar7 - uVar6) / uVar4" (parenthesized_expression "(uVar7 - uVar6)" ( (binary_expression "uVar7 - uVar6" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff" identifier = (binary_expression "(uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar7 - uVar6) % uVar4 << 0x10" (binary_expression "(uVar7 - uVar6) % uVar4" (parenthesized_expression "(uVar7 - uVar6)" ( (binary_expression "uVar7 - uVar6" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "param_2 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar6 = param_4 + uVar4;" (assignment_expression "uVar6 = param_4 + uVar4" identifier = (binary_expression "param_4 + uVar4" identifier + identifier)) ;) (if_statement "if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }" if (parenthesized_expression "(uVar4 < uVar9 * uVar8)" ( (binary_expression "uVar4 < uVar9 * uVar8" identifier < (binary_expression "uVar9 * uVar8" identifier * identifier)) )) (compound_statement "{\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }" { (if_statement "if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }" if (parenthesized_expression "((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6))" ( (binary_expression "(uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)" (parenthesized_expression "(uVar6 < param_4)" ( (binary_expression "uVar6 < param_4" identifier < identifier) )) || (parenthesized_expression "(uVar9 * uVar8 <= uVar6)" ( (binary_expression "uVar9 * uVar8 <= uVar6" (binary_expression "uVar9 * uVar8" identifier * identifier) <= identifier) ))) )) (compound_statement "{\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }" { (expression_statement "uVar9 = uVar3 << 0x10 | uVar9 - 1;" (assignment_expression "uVar9 = uVar3 << 0x10 | uVar9 - 1" identifier = (binary_expression "uVar3 << 0x10 | uVar9 - 1" (binary_expression "uVar3 << 0x10" identifier << number_literal) | (binary_expression "uVar9 - 1" identifier - number_literal))) ;) (goto_statement "goto LAB_0001ec30;" goto statement_identifier ;) })) (expression_statement "uVar9 = uVar9 - 2;" (assignment_expression "uVar9 = uVar9 - 2" identifier = (binary_expression "uVar9 - 2" identifier - number_literal)) ;) })) (expression_statement "uVar9 = uVar3 << 0x10 | uVar9;" (assignment_expression "uVar9 = uVar3 << 0x10 | uVar9" identifier = (binary_expression "uVar3 << 0x10 | uVar9" (binary_expression "uVar3 << 0x10" identifier << number_literal) | identifier)) ;) (labeled_statement "LAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);" statement_identifier : (return_statement "return CONCAT44(uVar5,uVar9);" return (call_expression "CONCAT44(uVar5,uVar9)" identifier (argument_list "(uVar5,uVar9)" ( identifier , identifier ))) ;)) })))
(translation_unit "ulonglong FUN_0001ea70(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  bool bVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }\n  uVar4 = param_4 >> 0x10;\n  if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = param_1 / uVar4;\n  uVar6 = uVar9 * uVar8;\n  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;\n  uVar3 = uVar9;\n  if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = (uVar7 - uVar6) / uVar4;\n  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;\n  uVar6 = param_4 + uVar4;\n  if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }\n  uVar9 = uVar3 << 0x10 | uVar9;\nLAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);\n}\n\n" (function_definition "ulonglong FUN_0001ea70(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  bool bVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }\n  uVar4 = param_4 >> 0x10;\n  if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = param_1 / uVar4;\n  uVar6 = uVar9 * uVar8;\n  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;\n  uVar3 = uVar9;\n  if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = (uVar7 - uVar6) / uVar4;\n  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;\n  uVar6 = param_4 + uVar4;\n  if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }\n  uVar9 = uVar3 << 0x10 | uVar9;\nLAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);\n}" type_identifier (function_declarator "FUN_0001ea70(uint param_1,uint param_2,uint param_3,uint param_4)" identifier (parameter_list "(uint param_1,uint param_2,uint param_3,uint param_4)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  bool bVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }\n  uVar4 = param_4 >> 0x10;\n  if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = param_1 / uVar4;\n  uVar6 = uVar9 * uVar8;\n  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;\n  uVar3 = uVar9;\n  if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = (uVar7 - uVar6) / uVar4;\n  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;\n  uVar6 = param_4 + uVar4;\n  if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }\n  uVar9 = uVar3 << 0x10 | uVar9;\nLAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "longlong lVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (if_statement "if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }" { (if_statement "if (param_1 < param_3) {\n      return 0;\n    }" if (parenthesized_expression "(param_1 < param_3)" ( (binary_expression "param_1 < param_3" identifier < identifier) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar3 = LZCOUNT(param_3);" (assignment_expression "uVar3 = LZCOUNT(param_3)" identifier = (call_expression "LZCOUNT(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (if_statement "if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }" { (if_statement "if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }" if (parenthesized_expression "(param_1 <= param_3)" ( (binary_expression "param_1 <= param_3" identifier <= identifier) )) (compound_statement "{\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }" { (return_statement "return (ulonglong)(param_2 < param_4) ^ 1;" return (binary_expression "(ulonglong)(param_2 < param_4) ^ 1" (call_expression "(ulonglong)(param_2 < param_4)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(param_2 < param_4)" ( (binary_expression "param_2 < param_4" identifier < identifier) ))) ^ number_literal) ;) })) (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar4 = 0x20 - uVar3;" (assignment_expression "uVar4 = 0x20 - uVar3" identifier = (binary_expression "0x20 - uVar3" number_literal - identifier)) ;) (expression_statement "uVar5 = param_1 >> (uVar4 & 0x1f);" (assignment_expression "uVar5 = param_1 >> (uVar4 & 0x1f)" identifier = (binary_expression "param_1 >> (uVar4 & 0x1f)" identifier >> (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);" (assignment_expression "uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f)" identifier = (binary_expression "param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f)" (binary_expression "param_4 >> (uVar4 & 0x1f)" identifier >> (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_3 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar6 = uVar7 >> 0x10;" (assignment_expression "uVar6 = uVar7 >> 0x10" identifier = (binary_expression "uVar7 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar6 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar11 = uVar5 / uVar6;" (assignment_expression "uVar11 = uVar5 / uVar6" identifier = (binary_expression "uVar5 / uVar6" identifier / identifier)) ;) (expression_statement "uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);" (assignment_expression "uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f)" identifier = (binary_expression "param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f)" (binary_expression "param_2 >> (uVar4 & 0x1f)" identifier >> (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_1 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar8 = (uVar7 & 0xffff) * uVar11;" (assignment_expression "uVar8 = (uVar7 & 0xffff) * uVar11" identifier = (binary_expression "(uVar7 & 0xffff) * uVar11" (parenthesized_expression "(uVar7 & 0xffff)" ( (binary_expression "uVar7 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;" (assignment_expression "uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10" identifier = (binary_expression "uVar5 % uVar6 << 0x10 | uVar9 >> 0x10" (binary_expression "uVar5 % uVar6 << 0x10" (binary_expression "uVar5 % uVar6" identifier % identifier) << number_literal) | (binary_expression "uVar9 >> 0x10" identifier >> number_literal))) ;) (expression_statement "uVar4 = uVar11;" (assignment_expression "uVar4 = uVar11" identifier = identifier) ;) (if_statement "if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }" if (parenthesized_expression "(uVar5 < uVar8)" ( (binary_expression "uVar5 < uVar8" identifier < identifier) )) (compound_statement "{\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }" { (expression_statement "uVar5 = uVar5 + uVar7;" (assignment_expression "uVar5 = uVar5 + uVar7" identifier = (binary_expression "uVar5 + uVar7" identifier + identifier)) ;) (expression_statement "uVar4 = uVar11 - 1;" (assignment_expression "uVar4 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }" if (parenthesized_expression "((uVar7 <= uVar5) && (uVar5 < uVar8))" ( (binary_expression "(uVar7 <= uVar5) && (uVar5 < uVar8)" (parenthesized_expression "(uVar7 <= uVar5)" ( (binary_expression "uVar7 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar8)" ( (binary_expression "uVar5 < uVar8" identifier < identifier) ))) )) (compound_statement "{\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }" { (expression_statement "uVar4 = uVar11 - 2;" (assignment_expression "uVar4 = uVar11 - 2" identifier = (binary_expression "uVar11 - 2" identifier - number_literal)) ;) (expression_statement "uVar5 = uVar5 + uVar7;" (assignment_expression "uVar5 = uVar5 + uVar7" identifier = (binary_expression "uVar5 + uVar7" identifier + identifier)) ;) })) })) (if_statement "if (uVar6 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar10 = (uVar5 - uVar8) / uVar6;" (assignment_expression "uVar10 = (uVar5 - uVar8) / uVar6" identifier = (binary_expression "(uVar5 - uVar8) / uVar6" (parenthesized_expression "(uVar5 - uVar8)" ( (binary_expression "uVar5 - uVar8" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar11 = (uVar7 & 0xffff) * uVar10;" (assignment_expression "uVar11 = (uVar7 & 0xffff) * uVar10" identifier = (binary_expression "(uVar7 & 0xffff) * uVar10" (parenthesized_expression "(uVar7 & 0xffff)" ( (binary_expression "uVar7 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;" (assignment_expression "uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff" identifier = (binary_expression "(uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff" (binary_expression "(uVar5 - uVar8) % uVar6 << 0x10" (binary_expression "(uVar5 - uVar8) % uVar6" (parenthesized_expression "(uVar5 - uVar8)" ( (binary_expression "uVar5 - uVar8" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "uVar9 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar5 = uVar10;" (assignment_expression "uVar5 = uVar10" identifier = identifier) ;) (if_statement "if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }" if (parenthesized_expression "(uVar6 < uVar11)" ( (binary_expression "uVar6 < uVar11" identifier < identifier) )) (compound_statement "{\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }" { (expression_statement "uVar6 = uVar6 + uVar7;" (assignment_expression "uVar6 = uVar6 + uVar7" identifier = (binary_expression "uVar6 + uVar7" identifier + identifier)) ;) (expression_statement "uVar5 = uVar10 - 1;" (assignment_expression "uVar5 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }" if (parenthesized_expression "((uVar7 <= uVar6) && (uVar6 < uVar11))" ( (binary_expression "(uVar7 <= uVar6) && (uVar6 < uVar11)" (parenthesized_expression "(uVar7 <= uVar6)" ( (binary_expression "uVar7 <= uVar6" identifier <= identifier) )) && (parenthesized_expression "(uVar6 < uVar11)" ( (binary_expression "uVar6 < uVar11" identifier < identifier) ))) )) (compound_statement "{\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }" { (expression_statement "uVar5 = uVar10 - 2;" (assignment_expression "uVar5 = uVar10 - 2" identifier = (binary_expression "uVar10 - 2" identifier - number_literal)) ;) (expression_statement "uVar6 = uVar6 + uVar7;" (assignment_expression "uVar6 = uVar6 + uVar7" identifier = (binary_expression "uVar6 + uVar7" identifier + identifier)) ;) })) })) (expression_statement "uVar5 = uVar4 << 0x10 | uVar5;" (assignment_expression "uVar5 = uVar4 << 0x10 | uVar5" identifier = (binary_expression "uVar4 << 0x10 | uVar5" (binary_expression "uVar4 << 0x10" identifier << number_literal) | identifier)) ;) (expression_statement "lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));" (assignment_expression "lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f))" identifier = (binary_expression "(ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f))" (cast_expression "(ulonglong)uVar5" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (call_expression "(ulonglong)(param_4 << (uVar3 & 0x1f))" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(param_4 << (uVar3 & 0x1f))" ( (binary_expression "param_4 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))) ))))) ;) (expression_statement "uVar4 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar4 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }" if (parenthesized_expression "(uVar4 <= uVar6 - uVar11)" ( (binary_expression "uVar4 <= uVar6 - uVar11" identifier <= (binary_expression "uVar6 - uVar11" identifier - identifier)) )) (compound_statement "{\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }" { (if_statement "if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }" if (parenthesized_expression "(uVar6 - uVar11 != uVar4)" ( (binary_expression "uVar6 - uVar11 != uVar4" (binary_expression "uVar6 - uVar11" identifier - identifier) != identifier) )) (compound_statement "{\n        return (ulonglong)uVar5;\n      }" { (return_statement "return (ulonglong)uVar5;" return (cast_expression "(ulonglong)uVar5" ( (type_descriptor "ulonglong" type_identifier) ) identifier) ;) })) (expression_statement "bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;" (assignment_expression "bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2" identifier = (binary_expression "param_2 << (uVar3 & 0x1f) < (uint)lVar2" (binary_expression "param_2 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))) < (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }" if (parenthesized_expression "(!bVar1)" ( (unary_expression "!bVar1" ! identifier) )) (compound_statement "{\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }" { (return_statement "return (ulonglong)CONCAT14(bVar1,uVar5);" return (cast_expression "(ulonglong)CONCAT14(bVar1,uVar5)" ( (type_descriptor "ulonglong" type_identifier) ) (call_expression "CONCAT14(bVar1,uVar5)" identifier (argument_list "(bVar1,uVar5)" ( identifier , identifier )))) ;) })) })) (return_statement "return (ulonglong)(uVar5 - 1);" return (call_expression "(ulonglong)(uVar5 - 1)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(uVar5 - 1)" ( (binary_expression "uVar5 - 1" identifier - number_literal) ))) ;) })) (expression_statement "uVar3 = LZCOUNT(param_4);" (assignment_expression "uVar3 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) (if_statement "if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }" if (parenthesized_expression "(param_1 < param_4)" ( (binary_expression "param_1 < param_4" identifier < identifier) )) (compound_statement "{\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }" { (if_statement "if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }" { (expression_statement "uVar4 = param_2 >> (-uVar3 & 0x1f);" (assignment_expression "uVar4 = param_2 >> (-uVar3 & 0x1f)" identifier = (binary_expression "param_2 >> (-uVar3 & 0x1f)" identifier >> (parenthesized_expression "(-uVar3 & 0x1f)" ( (binary_expression "-uVar3 & 0x1f" (unary_expression "-uVar3" - identifier) & number_literal) )))) ;) (expression_statement "param_4 = param_4 << (uVar3 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar3 & 0x1f)" identifier = (binary_expression "param_4 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "param_2 = param_2 << (uVar3 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar3 & 0x1f)" identifier = (binary_expression "param_2 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "param_1 = uVar4 | param_1 << (uVar3 & 0x1f);" (assignment_expression "param_1 = uVar4 | param_1 << (uVar3 & 0x1f)" identifier = (binary_expression "uVar4 | param_1 << (uVar3 & 0x1f)" identifier | (binary_expression "param_1 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))))) ;) })) (expression_statement "uVar3 = param_4 >> 0x10;" (assignment_expression "uVar3 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar7 = param_1 / uVar3;" (assignment_expression "uVar7 = param_1 / uVar3" identifier = (binary_expression "param_1 / uVar3" identifier / identifier)) ;) (expression_statement "uVar6 = (param_4 & 0xffff) * uVar7;" (assignment_expression "uVar6 = (param_4 & 0xffff) * uVar7" identifier = (binary_expression "(param_4 & 0xffff) * uVar7" (parenthesized_expression "(param_4 & 0xffff)" ( (binary_expression "param_4 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10" identifier = (binary_expression "param_1 % uVar3 << 0x10 | param_2 >> 0x10" (binary_expression "param_1 % uVar3 << 0x10" (binary_expression "param_1 % uVar3" identifier % identifier) << number_literal) | (binary_expression "param_2 >> 0x10" identifier >> number_literal))) ;) (expression_statement "uVar4 = uVar7;" (assignment_expression "uVar4 = uVar7" identifier = identifier) ;) (if_statement "if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" if (parenthesized_expression "(uVar5 < uVar6)" ( (binary_expression "uVar5 < uVar6" identifier < identifier) )) (compound_statement "{\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" { (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" identifier = (binary_expression "uVar5 + param_4" identifier + identifier)) ;) (expression_statement "uVar4 = uVar7 - 1;" (assignment_expression "uVar4 = uVar7 - 1" identifier = (binary_expression "uVar7 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }" if (parenthesized_expression "((param_4 <= uVar5) && (uVar5 < uVar6))" ( (binary_expression "(param_4 <= uVar5) && (uVar5 < uVar6)" (parenthesized_expression "(param_4 <= uVar5)" ( (binary_expression "param_4 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar6)" ( (binary_expression "uVar5 < uVar6" identifier < identifier) ))) )) (compound_statement "{\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }" { (expression_statement "uVar4 = uVar7 - 2;" (assignment_expression "uVar4 = uVar7 - 2" identifier = (binary_expression "uVar7 - 2" identifier - number_literal)) ;) (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" identifier = (binary_expression "uVar5 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar8 = (uVar5 - uVar6) / uVar3;" (assignment_expression "uVar8 = (uVar5 - uVar6) / uVar3" identifier = (binary_expression "(uVar5 - uVar6) / uVar3" (parenthesized_expression "(uVar5 - uVar6)" ( (binary_expression "uVar5 - uVar6" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar7 = (param_4 & 0xffff) * uVar8;" (assignment_expression "uVar7 = (param_4 & 0xffff) * uVar8" identifier = (binary_expression "(param_4 & 0xffff) * uVar8" (parenthesized_expression "(param_4 & 0xffff)" ( (binary_expression "param_4 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff" identifier = (binary_expression "(uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar5 - uVar6) % uVar3 << 0x10" (binary_expression "(uVar5 - uVar6) % uVar3" (parenthesized_expression "(uVar5 - uVar6)" ( (binary_expression "uVar5 - uVar6" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "param_2 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar3 = uVar8;" (assignment_expression "uVar3 = uVar8" identifier = identifier) ;) (if_statement "if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }" if (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) )) (compound_statement "{\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }" { (expression_statement "uVar5 = param_4 + uVar5;" (assignment_expression "uVar5 = param_4 + uVar5" identifier = (binary_expression "param_4 + uVar5" identifier + identifier)) ;) (expression_statement "uVar3 = uVar8 - 1;" (assignment_expression "uVar3 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }" if (parenthesized_expression "((param_4 <= uVar5) && (uVar5 < uVar7))" ( (binary_expression "(param_4 <= uVar5) && (uVar5 < uVar7)" (parenthesized_expression "(param_4 <= uVar5)" ( (binary_expression "param_4 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) ))) )) (compound_statement "{\n        uVar3 = uVar8 - 2;\n      }" { (expression_statement "uVar3 = uVar8 - 2;" (assignment_expression "uVar3 = uVar8 - 2" identifier = (binary_expression "uVar8 - 2" identifier - number_literal)) ;) })) })) (return_statement "return (ulonglong)(uVar4 << 0x10 | uVar3);" return (call_expression "(ulonglong)(uVar4 << 0x10 | uVar3)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(uVar4 << 0x10 | uVar3)" ( (binary_expression "uVar4 << 0x10 | uVar3" (binary_expression "uVar4 << 0x10" identifier << number_literal) | identifier) ))) ;) })) (expression_statement "uVar3 = LZCOUNT(param_4);" (assignment_expression "uVar3 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) (if_statement "if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) (expression_statement "param_4 = 1 / 0;" (assignment_expression "param_4 = 1 / 0" identifier = (binary_expression "1 / 0" number_literal / number_literal)) ;) (expression_statement "uVar3 = LZCOUNT(param_4);" (assignment_expression "uVar3 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) })) (expression_statement "uVar4 = param_4 >> 0x10;" (assignment_expression "uVar4 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }" { (expression_statement "param_1 = param_1 - param_4;" (assignment_expression "param_1 = param_1 - param_4" identifier = (binary_expression "param_1 - param_4" identifier - identifier)) ;) (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) (expression_statement "uVar8 = param_4 & 0xffff;" (assignment_expression "uVar8 = param_4 & 0xffff" identifier = (binary_expression "param_4 & 0xffff" identifier & number_literal)) ;) }) (else_clause "else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }" else (compound_statement "{\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }" { (expression_statement "param_4 = param_4 << (uVar3 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar3 & 0x1f)" identifier = (binary_expression "param_4 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar4 = param_4 >> 0x10;" (assignment_expression "uVar4 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (expression_statement "uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);" (assignment_expression "uVar5 = param_1 >> (0x20 - uVar3 & 0x1f)" identifier = (binary_expression "param_1 >> (0x20 - uVar3 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar3 & 0x1f)" ( (binary_expression "0x20 - uVar3 & 0x1f" (binary_expression "0x20 - uVar3" number_literal - identifier) & number_literal) )))) ;) (expression_statement "uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);" (assignment_expression "uVar6 = param_2 >> (0x20 - uVar3 & 0x1f)" identifier = (binary_expression "param_2 >> (0x20 - uVar3 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar3 & 0x1f)" ( (binary_expression "0x20 - uVar3 & 0x1f" (binary_expression "0x20 - uVar3" number_literal - identifier) & number_literal) )))) ;) (if_statement "if (uVar4 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar9 = uVar5 / uVar4;" (assignment_expression "uVar9 = uVar5 / uVar4" identifier = (binary_expression "uVar5 / uVar4" identifier / identifier)) ;) (expression_statement "uVar8 = param_4 & 0xffff;" (assignment_expression "uVar8 = param_4 & 0xffff" identifier = (binary_expression "param_4 & 0xffff" identifier & number_literal)) ;) (expression_statement "param_2 = param_2 << (uVar3 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar3 & 0x1f)" identifier = (binary_expression "param_2 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);" (assignment_expression "uVar6 = uVar6 | param_1 << (uVar3 & 0x1f)" identifier = (binary_expression "uVar6 | param_1 << (uVar3 & 0x1f)" identifier | (binary_expression "param_1 << (uVar3 & 0x1f)" identifier << (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar7 = uVar8 * uVar9;" (assignment_expression "uVar7 = uVar8 * uVar9" identifier = (binary_expression "uVar8 * uVar9" identifier * identifier)) ;) (expression_statement "uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;" (assignment_expression "uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10" identifier = (binary_expression "uVar5 % uVar4 << 0x10 | uVar6 >> 0x10" (binary_expression "uVar5 % uVar4 << 0x10" (binary_expression "uVar5 % uVar4" identifier % identifier) << number_literal) | (binary_expression "uVar6 >> 0x10" identifier >> number_literal))) ;) (expression_statement "uVar3 = uVar9;" (assignment_expression "uVar3 = uVar9" identifier = identifier) ;) (if_statement "if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" if (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) )) (compound_statement "{\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" { (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" identifier = (binary_expression "uVar5 + param_4" identifier + identifier)) ;) (expression_statement "uVar3 = uVar9 - 1;" (assignment_expression "uVar3 = uVar9 - 1" identifier = (binary_expression "uVar9 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }" if (parenthesized_expression "((param_4 <= uVar5) && (uVar5 < uVar7))" ( (binary_expression "(param_4 <= uVar5) && (uVar5 < uVar7)" (parenthesized_expression "(param_4 <= uVar5)" ( (binary_expression "param_4 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) ))) )) (compound_statement "{\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }" { (expression_statement "uVar3 = uVar9 - 2;" (assignment_expression "uVar3 = uVar9 - 2" identifier = (binary_expression "uVar9 - 2" identifier - number_literal)) ;) (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" identifier = (binary_expression "uVar5 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar4 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar11 = (uVar5 - uVar7) / uVar4;" (assignment_expression "uVar11 = (uVar5 - uVar7) / uVar4" identifier = (binary_expression "(uVar5 - uVar7) / uVar4" (parenthesized_expression "(uVar5 - uVar7)" ( (binary_expression "uVar5 - uVar7" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar9 = uVar8 * uVar11;" (assignment_expression "uVar9 = uVar8 * uVar11" identifier = (binary_expression "uVar8 * uVar11" identifier * identifier)) ;) (expression_statement "param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;" (assignment_expression "param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff" identifier = (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff" (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10" (binary_expression "(uVar5 - uVar7) % uVar4" (parenthesized_expression "(uVar5 - uVar7)" ( (binary_expression "uVar5 - uVar7" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "uVar6 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar5 = uVar11;" (assignment_expression "uVar5 = uVar11" identifier = identifier) ;) (if_statement "if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }" if (parenthesized_expression "(param_1 < uVar9)" ( (binary_expression "param_1 < uVar9" identifier < identifier) )) (compound_statement "{\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }" { (expression_statement "param_1 = param_1 + param_4;" (assignment_expression "param_1 = param_1 + param_4" identifier = (binary_expression "param_1 + param_4" identifier + identifier)) ;) (expression_statement "uVar5 = uVar11 - 1;" (assignment_expression "uVar5 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }" if (parenthesized_expression "((param_4 <= param_1) && (param_1 < uVar9))" ( (binary_expression "(param_4 <= param_1) && (param_1 < uVar9)" (parenthesized_expression "(param_4 <= param_1)" ( (binary_expression "param_4 <= param_1" identifier <= identifier) )) && (parenthesized_expression "(param_1 < uVar9)" ( (binary_expression "param_1 < uVar9" identifier < identifier) ))) )) (compound_statement "{\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }" { (expression_statement "uVar5 = uVar11 - 2;" (assignment_expression "uVar5 = uVar11 - 2" identifier = (binary_expression "uVar11 - 2" identifier - number_literal)) ;) (expression_statement "param_1 = param_1 + param_4;" (assignment_expression "param_1 = param_1 + param_4" identifier = (binary_expression "param_1 + param_4" identifier + identifier)) ;) })) })) (expression_statement "param_1 = param_1 - uVar9;" (assignment_expression "param_1 = param_1 - uVar9" identifier = (binary_expression "param_1 - uVar9" identifier - identifier)) ;) (expression_statement "uVar5 = uVar3 << 0x10 | uVar5;" (assignment_expression "uVar5 = uVar3 << 0x10 | uVar5" identifier = (binary_expression "uVar3 << 0x10 | uVar5" (binary_expression "uVar3 << 0x10" identifier << number_literal) | identifier)) ;) }))) (if_statement "if (uVar4 == 0) {\n    trap(7);\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar9 = param_1 / uVar4;" (assignment_expression "uVar9 = param_1 / uVar4" identifier = (binary_expression "param_1 / uVar4" identifier / identifier)) ;) (expression_statement "uVar6 = uVar9 * uVar8;" (assignment_expression "uVar6 = uVar9 * uVar8" identifier = (binary_expression "uVar9 * uVar8" identifier * identifier)) ;) (expression_statement "uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10" identifier = (binary_expression "param_1 % uVar4 << 0x10 | param_2 >> 0x10" (binary_expression "param_1 % uVar4 << 0x10" (binary_expression "param_1 % uVar4" identifier % identifier) << number_literal) | (binary_expression "param_2 >> 0x10" identifier >> number_literal))) ;) (expression_statement "uVar3 = uVar9;" (assignment_expression "uVar3 = uVar9" identifier = identifier) ;) (if_statement "if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }" if (parenthesized_expression "(uVar7 < uVar6)" ( (binary_expression "uVar7 < uVar6" identifier < identifier) )) (compound_statement "{\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }" { (expression_statement "uVar7 = uVar7 + param_4;" (assignment_expression "uVar7 = uVar7 + param_4" identifier = (binary_expression "uVar7 + param_4" identifier + identifier)) ;) (expression_statement "uVar3 = uVar9 - 1;" (assignment_expression "uVar3 = uVar9 - 1" identifier = (binary_expression "uVar9 - 1" identifier - number_literal)) ;) (if_statement "if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }" if (parenthesized_expression "((param_4 <= uVar7) && (uVar7 < uVar6))" ( (binary_expression "(param_4 <= uVar7) && (uVar7 < uVar6)" (parenthesized_expression "(param_4 <= uVar7)" ( (binary_expression "param_4 <= uVar7" identifier <= identifier) )) && (parenthesized_expression "(uVar7 < uVar6)" ( (binary_expression "uVar7 < uVar6" identifier < identifier) ))) )) (compound_statement "{\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }" { (expression_statement "uVar7 = uVar7 + param_4;" (assignment_expression "uVar7 = uVar7 + param_4" identifier = (binary_expression "uVar7 + param_4" identifier + identifier)) ;) (expression_statement "uVar3 = uVar9 - 2;" (assignment_expression "uVar3 = uVar9 - 2" identifier = (binary_expression "uVar9 - 2" identifier - number_literal)) ;) })) })) (if_statement "if (uVar4 == 0) {\n    trap(7);\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar9 = (uVar7 - uVar6) / uVar4;" (assignment_expression "uVar9 = (uVar7 - uVar6) / uVar4" identifier = (binary_expression "(uVar7 - uVar6) / uVar4" (parenthesized_expression "(uVar7 - uVar6)" ( (binary_expression "uVar7 - uVar6" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff" identifier = (binary_expression "(uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar7 - uVar6) % uVar4 << 0x10" (binary_expression "(uVar7 - uVar6) % uVar4" (parenthesized_expression "(uVar7 - uVar6)" ( (binary_expression "uVar7 - uVar6" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "param_2 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar6 = param_4 + uVar4;" (assignment_expression "uVar6 = param_4 + uVar4" identifier = (binary_expression "param_4 + uVar4" identifier + identifier)) ;) (if_statement "if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }" if (parenthesized_expression "(uVar4 < uVar9 * uVar8)" ( (binary_expression "uVar4 < uVar9 * uVar8" identifier < (binary_expression "uVar9 * uVar8" identifier * identifier)) )) (compound_statement "{\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }" { (if_statement "if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }" if (parenthesized_expression "((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6))" ( (binary_expression "(uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)" (parenthesized_expression "(uVar6 < param_4)" ( (binary_expression "uVar6 < param_4" identifier < identifier) )) || (parenthesized_expression "(uVar9 * uVar8 <= uVar6)" ( (binary_expression "uVar9 * uVar8 <= uVar6" (binary_expression "uVar9 * uVar8" identifier * identifier) <= identifier) ))) )) (compound_statement "{\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }" { (expression_statement "uVar9 = uVar3 << 0x10 | uVar9 - 1;" (assignment_expression "uVar9 = uVar3 << 0x10 | uVar9 - 1" identifier = (binary_expression "uVar3 << 0x10 | uVar9 - 1" (binary_expression "uVar3 << 0x10" identifier << number_literal) | (binary_expression "uVar9 - 1" identifier - number_literal))) ;) (goto_statement "goto LAB_0001ec30;" goto statement_identifier ;) })) (expression_statement "uVar9 = uVar9 - 2;" (assignment_expression "uVar9 = uVar9 - 2" identifier = (binary_expression "uVar9 - 2" identifier - number_literal)) ;) })) (expression_statement "uVar9 = uVar3 << 0x10 | uVar9;" (assignment_expression "uVar9 = uVar3 << 0x10 | uVar9" identifier = (binary_expression "uVar3 << 0x10 | uVar9" (binary_expression "uVar3 << 0x10" identifier << number_literal) | identifier)) ;) (labeled_statement "LAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);" statement_identifier : (return_statement "return CONCAT44(uVar5,uVar9);" return (call_expression "CONCAT44(uVar5,uVar9)" identifier (argument_list "(uVar5,uVar9)" ( identifier , identifier ))) ;)) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) ^ LIT) ;) })) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT % IDENT) << LIT) | (binary_expression IDENT >> LIT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) % IDENT) << LIT) | (binary_expression IDENT & LIT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << LIT) | IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (binary_expression IDENT - IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) != IDENT) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE) ) IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) < (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) })) })) (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (unary_expression - IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT % IDENT) << LIT) | (binary_expression IDENT >> LIT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) % IDENT) << LIT) | (binary_expression IDENT & LIT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) })) })) (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT << LIT) | IDENT) ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT / LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT % IDENT) << LIT) | (binary_expression IDENT >> LIT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) % IDENT) << LIT) | (binary_expression IDENT & LIT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << LIT) | IDENT)) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT % IDENT) << LIT) | (binary_expression IDENT >> LIT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) % IDENT) << LIT) | (binary_expression IDENT & LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT * IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) || (parenthesized_expression ( (binary_expression (binary_expression IDENT * IDENT) <= IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << LIT) | (binary_expression IDENT - LIT))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << LIT) | IDENT)) ;) (labeled_statement statement_identifier : (return_statement return (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;)) })))
(function_definition "ulonglong FUN_0001ea70(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  bool bVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }\n  uVar4 = param_4 >> 0x10;\n  if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = param_1 / uVar4;\n  uVar6 = uVar9 * uVar8;\n  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;\n  uVar3 = uVar9;\n  if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = (uVar7 - uVar6) / uVar4;\n  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;\n  uVar6 = param_4 + uVar4;\n  if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }\n  uVar9 = uVar3 << 0x10 | uVar9;\nLAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);\n}" (type_identifier "ulonglong") (function_declarator "FUN_0001ea70(uint param_1,uint param_2,uint param_3,uint param_4)" (identifier "FUN_0001ea70") (parameter_list "(uint param_1,uint param_2,uint param_3,uint param_4)" (( "(") (parameter_declaration "uint param_1" (type_identifier "uint") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) () ")"))) (compound_statement "{\n  bool bVar1;\n  longlong lVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }\n  uVar3 = LZCOUNT(param_4);\n  if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }\n  uVar4 = param_4 >> 0x10;\n  if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = param_1 / uVar4;\n  uVar6 = uVar9 * uVar8;\n  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;\n  uVar3 = uVar9;\n  if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }\n  if (uVar4 == 0) {\n    trap(7);\n  }\n  uVar9 = (uVar7 - uVar6) / uVar4;\n  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;\n  uVar6 = param_4 + uVar4;\n  if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }\n  uVar9 = uVar3 << 0x10 | uVar9;\nLAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);\n}" ({ "{") (declaration "bool bVar1;" (primitive_type "bool") (identifier "bVar1") (; ";")) (declaration "longlong lVar2;" (type_identifier "longlong") (identifier "lVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (if_statement "if (param_3 != 0) {\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }" (if "if") (parenthesized_expression "(param_3 != 0)" (( "(") (binary_expression "param_3 != 0" (identifier "param_3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    if (param_1 < param_3) {\n      return 0;\n    }\n    uVar3 = LZCOUNT(param_3);\n    if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }\n    uVar4 = 0x20 - uVar3;\n    uVar5 = param_1 >> (uVar4 & 0x1f);\n    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);\n    uVar6 = uVar7 >> 0x10;\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar11 = uVar5 / uVar6;\n    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);\n    uVar8 = (uVar7 & 0xffff) * uVar11;\n    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;\n    uVar4 = uVar11;\n    if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }\n    if (uVar6 == 0) {\n      trap(7);\n    }\n    uVar10 = (uVar5 - uVar8) / uVar6;\n    uVar11 = (uVar7 & 0xffff) * uVar10;\n    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;\n    uVar5 = uVar10;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }\n    uVar5 = uVar4 << 0x10 | uVar5;\n    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));\n    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);\n    if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }\n    return (ulonglong)(uVar5 - 1);\n  }" ({ "{") (if_statement "if (param_1 < param_3) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_1 < param_3)" (( "(") (binary_expression "param_1 < param_3" (identifier "param_1") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar3 = LZCOUNT(param_3);" (assignment_expression "uVar3 = LZCOUNT(param_3)" (identifier "uVar3") (= "=") (call_expression "LZCOUNT(param_3)" (identifier "LZCOUNT") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (uVar3 == 0) {\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }" (if "if") (parenthesized_expression "(uVar3 == 0)" (( "(") (binary_expression "uVar3 == 0" (identifier "uVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }\n      return 1;\n    }" ({ "{") (if_statement "if (param_1 <= param_3) {\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }" (if "if") (parenthesized_expression "(param_1 <= param_3)" (( "(") (binary_expression "param_1 <= param_3" (identifier "param_1") (<= "<=") (identifier "param_3")) () ")")) (compound_statement "{\n        return (ulonglong)(param_2 < param_4) ^ 1;\n      }" ({ "{") (return_statement "return (ulonglong)(param_2 < param_4) ^ 1;" (return "return") (binary_expression "(ulonglong)(param_2 < param_4) ^ 1" (call_expression "(ulonglong)(param_2 < param_4)" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (argument_list "(param_2 < param_4)" (( "(") (binary_expression "param_2 < param_4" (identifier "param_2") (< "<") (identifier "param_4")) () ")"))) (^ "^") (number_literal "1")) (; ";")) (} "}"))) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "uVar4 = 0x20 - uVar3;" (assignment_expression "uVar4 = 0x20 - uVar3" (identifier "uVar4") (= "=") (binary_expression "0x20 - uVar3" (number_literal "0x20") (- "-") (identifier "uVar3"))) (; ";")) (expression_statement "uVar5 = param_1 >> (uVar4 & 0x1f);" (assignment_expression "uVar5 = param_1 >> (uVar4 & 0x1f)" (identifier "uVar5") (= "=") (binary_expression "param_1 >> (uVar4 & 0x1f)" (identifier "param_1") (>> ">>") (parenthesized_expression "(uVar4 & 0x1f)" (( "(") (binary_expression "uVar4 & 0x1f" (identifier "uVar4") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);" (assignment_expression "uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f)" (identifier "uVar7") (= "=") (binary_expression "param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f)" (binary_expression "param_4 >> (uVar4 & 0x1f)" (identifier "param_4") (>> ">>") (parenthesized_expression "(uVar4 & 0x1f)" (( "(") (binary_expression "uVar4 & 0x1f" (identifier "uVar4") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "param_3 << (uVar3 & 0x1f)" (identifier "param_3") (<< "<<") (parenthesized_expression "(uVar3 & 0x1f)" (( "(") (binary_expression "uVar3 & 0x1f" (identifier "uVar3") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "uVar6 = uVar7 >> 0x10;" (assignment_expression "uVar6 = uVar7 >> 0x10" (identifier "uVar6") (= "=") (binary_expression "uVar7 >> 0x10" (identifier "uVar7") (>> ">>") (number_literal "0x10"))) (; ";")) (if_statement "if (uVar6 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar6 == 0)" (( "(") (binary_expression "uVar6 == 0" (identifier "uVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      trap(7);\n    }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar11 = uVar5 / uVar6;" (assignment_expression "uVar11 = uVar5 / uVar6" (identifier "uVar11") (= "=") (binary_expression "uVar5 / uVar6" (identifier "uVar5") (/ "/") (identifier "uVar6"))) (; ";")) (expression_statement "uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);" (assignment_expression "uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f)" (identifier "uVar9") (= "=") (binary_expression "param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f)" (binary_expression "param_2 >> (uVar4 & 0x1f)" (identifier "param_2") (>> ">>") (parenthesized_expression "(uVar4 & 0x1f)" (( "(") (binary_expression "uVar4 & 0x1f" (identifier "uVar4") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "param_1 << (uVar3 & 0x1f)" (identifier "param_1") (<< "<<") (parenthesized_expression "(uVar3 & 0x1f)" (( "(") (binary_expression "uVar3 & 0x1f" (identifier "uVar3") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "uVar8 = (uVar7 & 0xffff) * uVar11;" (assignment_expression "uVar8 = (uVar7 & 0xffff) * uVar11" (identifier "uVar8") (= "=") (binary_expression "(uVar7 & 0xffff) * uVar11" (parenthesized_expression "(uVar7 & 0xffff)" (( "(") (binary_expression "uVar7 & 0xffff" (identifier "uVar7") (& "&") (number_literal "0xffff")) () ")")) (* "*") (identifier "uVar11"))) (; ";")) (expression_statement "uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;" (assignment_expression "uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10" (identifier "uVar5") (= "=") (binary_expression "uVar5 % uVar6 << 0x10 | uVar9 >> 0x10" (binary_expression "uVar5 % uVar6 << 0x10" (binary_expression "uVar5 % uVar6" (identifier "uVar5") (% "%") (identifier "uVar6")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "uVar9 >> 0x10" (identifier "uVar9") (>> ">>") (number_literal "0x10")))) (; ";")) (expression_statement "uVar4 = uVar11;" (assignment_expression "uVar4 = uVar11" (identifier "uVar4") (= "=") (identifier "uVar11")) (; ";")) (if_statement "if (uVar5 < uVar8) {\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }" (if "if") (parenthesized_expression "(uVar5 < uVar8)" (( "(") (binary_expression "uVar5 < uVar8" (identifier "uVar5") (< "<") (identifier "uVar8")) () ")")) (compound_statement "{\n      uVar5 = uVar5 + uVar7;\n      uVar4 = uVar11 - 1;\n      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }\n    }" ({ "{") (expression_statement "uVar5 = uVar5 + uVar7;" (assignment_expression "uVar5 = uVar5 + uVar7" (identifier "uVar5") (= "=") (binary_expression "uVar5 + uVar7" (identifier "uVar5") (+ "+") (identifier "uVar7"))) (; ";")) (expression_statement "uVar4 = uVar11 - 1;" (assignment_expression "uVar4 = uVar11 - 1" (identifier "uVar4") (= "=") (binary_expression "uVar11 - 1" (identifier "uVar11") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }" (if "if") (parenthesized_expression "((uVar7 <= uVar5) && (uVar5 < uVar8))" (( "(") (binary_expression "(uVar7 <= uVar5) && (uVar5 < uVar8)" (parenthesized_expression "(uVar7 <= uVar5)" (( "(") (binary_expression "uVar7 <= uVar5" (identifier "uVar7") (<= "<=") (identifier "uVar5")) () ")")) (&& "&&") (parenthesized_expression "(uVar5 < uVar8)" (( "(") (binary_expression "uVar5 < uVar8" (identifier "uVar5") (< "<") (identifier "uVar8")) () ")"))) () ")")) (compound_statement "{\n        uVar4 = uVar11 - 2;\n        uVar5 = uVar5 + uVar7;\n      }" ({ "{") (expression_statement "uVar4 = uVar11 - 2;" (assignment_expression "uVar4 = uVar11 - 2" (identifier "uVar4") (= "=") (binary_expression "uVar11 - 2" (identifier "uVar11") (- "-") (number_literal "2"))) (; ";")) (expression_statement "uVar5 = uVar5 + uVar7;" (assignment_expression "uVar5 = uVar5 + uVar7" (identifier "uVar5") (= "=") (binary_expression "uVar5 + uVar7" (identifier "uVar5") (+ "+") (identifier "uVar7"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (uVar6 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar6 == 0)" (( "(") (binary_expression "uVar6 == 0" (identifier "uVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      trap(7);\n    }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar10 = (uVar5 - uVar8) / uVar6;" (assignment_expression "uVar10 = (uVar5 - uVar8) / uVar6" (identifier "uVar10") (= "=") (binary_expression "(uVar5 - uVar8) / uVar6" (parenthesized_expression "(uVar5 - uVar8)" (( "(") (binary_expression "uVar5 - uVar8" (identifier "uVar5") (- "-") (identifier "uVar8")) () ")")) (/ "/") (identifier "uVar6"))) (; ";")) (expression_statement "uVar11 = (uVar7 & 0xffff) * uVar10;" (assignment_expression "uVar11 = (uVar7 & 0xffff) * uVar10" (identifier "uVar11") (= "=") (binary_expression "(uVar7 & 0xffff) * uVar10" (parenthesized_expression "(uVar7 & 0xffff)" (( "(") (binary_expression "uVar7 & 0xffff" (identifier "uVar7") (& "&") (number_literal "0xffff")) () ")")) (* "*") (identifier "uVar10"))) (; ";")) (expression_statement "uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;" (assignment_expression "uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff" (identifier "uVar6") (= "=") (binary_expression "(uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff" (binary_expression "(uVar5 - uVar8) % uVar6 << 0x10" (binary_expression "(uVar5 - uVar8) % uVar6" (parenthesized_expression "(uVar5 - uVar8)" (( "(") (binary_expression "uVar5 - uVar8" (identifier "uVar5") (- "-") (identifier "uVar8")) () ")")) (% "%") (identifier "uVar6")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "uVar9 & 0xffff" (identifier "uVar9") (& "&") (number_literal "0xffff")))) (; ";")) (expression_statement "uVar5 = uVar10;" (assignment_expression "uVar5 = uVar10" (identifier "uVar5") (= "=") (identifier "uVar10")) (; ";")) (if_statement "if (uVar6 < uVar11) {\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }" (if "if") (parenthesized_expression "(uVar6 < uVar11)" (( "(") (binary_expression "uVar6 < uVar11" (identifier "uVar6") (< "<") (identifier "uVar11")) () ")")) (compound_statement "{\n      uVar6 = uVar6 + uVar7;\n      uVar5 = uVar10 - 1;\n      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }\n    }" ({ "{") (expression_statement "uVar6 = uVar6 + uVar7;" (assignment_expression "uVar6 = uVar6 + uVar7" (identifier "uVar6") (= "=") (binary_expression "uVar6 + uVar7" (identifier "uVar6") (+ "+") (identifier "uVar7"))) (; ";")) (expression_statement "uVar5 = uVar10 - 1;" (assignment_expression "uVar5 = uVar10 - 1" (identifier "uVar5") (= "=") (binary_expression "uVar10 - 1" (identifier "uVar10") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }" (if "if") (parenthesized_expression "((uVar7 <= uVar6) && (uVar6 < uVar11))" (( "(") (binary_expression "(uVar7 <= uVar6) && (uVar6 < uVar11)" (parenthesized_expression "(uVar7 <= uVar6)" (( "(") (binary_expression "uVar7 <= uVar6" (identifier "uVar7") (<= "<=") (identifier "uVar6")) () ")")) (&& "&&") (parenthesized_expression "(uVar6 < uVar11)" (( "(") (binary_expression "uVar6 < uVar11" (identifier "uVar6") (< "<") (identifier "uVar11")) () ")"))) () ")")) (compound_statement "{\n        uVar5 = uVar10 - 2;\n        uVar6 = uVar6 + uVar7;\n      }" ({ "{") (expression_statement "uVar5 = uVar10 - 2;" (assignment_expression "uVar5 = uVar10 - 2" (identifier "uVar5") (= "=") (binary_expression "uVar10 - 2" (identifier "uVar10") (- "-") (number_literal "2"))) (; ";")) (expression_statement "uVar6 = uVar6 + uVar7;" (assignment_expression "uVar6 = uVar6 + uVar7" (identifier "uVar6") (= "=") (binary_expression "uVar6 + uVar7" (identifier "uVar6") (+ "+") (identifier "uVar7"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar5 = uVar4 << 0x10 | uVar5;" (assignment_expression "uVar5 = uVar4 << 0x10 | uVar5" (identifier "uVar5") (= "=") (binary_expression "uVar4 << 0x10 | uVar5" (binary_expression "uVar4 << 0x10" (identifier "uVar4") (<< "<<") (number_literal "0x10")) (| "|") (identifier "uVar5"))) (; ";")) (expression_statement "lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));" (assignment_expression "lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f))" (identifier "lVar2") (= "=") (binary_expression "(ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f))" (cast_expression "(ulonglong)uVar5" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar5")) (* "*") (call_expression "(ulonglong)(param_4 << (uVar3 & 0x1f))" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (argument_list "(param_4 << (uVar3 & 0x1f))" (( "(") (binary_expression "param_4 << (uVar3 & 0x1f)" (identifier "param_4") (<< "<<") (parenthesized_expression "(uVar3 & 0x1f)" (( "(") (binary_expression "uVar3 & 0x1f" (identifier "uVar3") (& "&") (number_literal "0x1f")) () ")"))) () ")"))))) (; ";")) (expression_statement "uVar4 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar4 = (uint)((ulonglong)lVar2 >> 0x20)" (identifier "uVar4") (= "=") (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)lVar2 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar2")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (if_statement "if (uVar4 <= uVar6 - uVar11) {\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }" (if "if") (parenthesized_expression "(uVar4 <= uVar6 - uVar11)" (( "(") (binary_expression "uVar4 <= uVar6 - uVar11" (identifier "uVar4") (<= "<=") (binary_expression "uVar6 - uVar11" (identifier "uVar6") (- "-") (identifier "uVar11"))) () ")")) (compound_statement "{\n      if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }\n      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;\n      if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }\n    }" ({ "{") (if_statement "if (uVar6 - uVar11 != uVar4) {\n        return (ulonglong)uVar5;\n      }" (if "if") (parenthesized_expression "(uVar6 - uVar11 != uVar4)" (( "(") (binary_expression "uVar6 - uVar11 != uVar4" (binary_expression "uVar6 - uVar11" (identifier "uVar6") (- "-") (identifier "uVar11")) (!= "!=") (identifier "uVar4")) () ")")) (compound_statement "{\n        return (ulonglong)uVar5;\n      }" ({ "{") (return_statement "return (ulonglong)uVar5;" (return "return") (cast_expression "(ulonglong)uVar5" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar5")) (; ";")) (} "}"))) (expression_statement "bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;" (assignment_expression "bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2" (identifier "bVar1") (= "=") (binary_expression "param_2 << (uVar3 & 0x1f) < (uint)lVar2" (binary_expression "param_2 << (uVar3 & 0x1f)" (identifier "param_2") (<< "<<") (parenthesized_expression "(uVar3 & 0x1f)" (( "(") (binary_expression "uVar3 & 0x1f" (identifier "uVar3") (& "&") (number_literal "0x1f")) () ")"))) (< "<") (cast_expression "(uint)lVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar2")))) (; ";")) (if_statement "if (!bVar1) {\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }" (if "if") (parenthesized_expression "(!bVar1)" (( "(") (unary_expression "!bVar1" (! "!") (identifier "bVar1")) () ")")) (compound_statement "{\n        return (ulonglong)CONCAT14(bVar1,uVar5);\n      }" ({ "{") (return_statement "return (ulonglong)CONCAT14(bVar1,uVar5);" (return "return") (cast_expression "(ulonglong)CONCAT14(bVar1,uVar5)" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (call_expression "CONCAT14(bVar1,uVar5)" (identifier "CONCAT14") (argument_list "(bVar1,uVar5)" (( "(") (identifier "bVar1") (, ",") (identifier "uVar5") () ")")))) (; ";")) (} "}"))) (} "}"))) (return_statement "return (ulonglong)(uVar5 - 1);" (return "return") (call_expression "(ulonglong)(uVar5 - 1)" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (argument_list "(uVar5 - 1)" (( "(") (binary_expression "uVar5 - 1" (identifier "uVar5") (- "-") (number_literal "1")) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar3 = LZCOUNT(param_4);" (assignment_expression "uVar3 = LZCOUNT(param_4)" (identifier "uVar3") (= "=") (call_expression "LZCOUNT(param_4)" (identifier "LZCOUNT") (argument_list "(param_4)" (( "(") (identifier "param_4") () ")")))) (; ";")) (if_statement "if (param_1 < param_4) {\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }" (if "if") (parenthesized_expression "(param_1 < param_4)" (( "(") (binary_expression "param_1 < param_4" (identifier "param_1") (< "<") (identifier "param_4")) () ")")) (compound_statement "{\n    if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }\n    uVar3 = param_4 >> 0x10;\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar7 = param_1 / uVar3;\n    uVar6 = (param_4 & 0xffff) * uVar7;\n    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;\n    uVar4 = uVar7;\n    if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar8 = (uVar5 - uVar6) / uVar3;\n    uVar7 = (param_4 & 0xffff) * uVar8;\n    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;\n    uVar3 = uVar8;\n    if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }\n    return (ulonglong)(uVar4 << 0x10 | uVar3);\n  }" ({ "{") (if_statement "if (uVar3 != 0) {\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }" (if "if") (parenthesized_expression "(uVar3 != 0)" (( "(") (binary_expression "uVar3 != 0" (identifier "uVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      uVar4 = param_2 >> (-uVar3 & 0x1f);\n      param_4 = param_4 << (uVar3 & 0x1f);\n      param_2 = param_2 << (uVar3 & 0x1f);\n      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);\n    }" ({ "{") (expression_statement "uVar4 = param_2 >> (-uVar3 & 0x1f);" (assignment_expression "uVar4 = param_2 >> (-uVar3 & 0x1f)" (identifier "uVar4") (= "=") (binary_expression "param_2 >> (-uVar3 & 0x1f)" (identifier "param_2") (>> ">>") (parenthesized_expression "(-uVar3 & 0x1f)" (( "(") (binary_expression "-uVar3 & 0x1f" (unary_expression "-uVar3" (- "-") (identifier "uVar3")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "param_4 = param_4 << (uVar3 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar3 & 0x1f)" (identifier "param_4") (= "=") (binary_expression "param_4 << (uVar3 & 0x1f)" (identifier "param_4") (<< "<<") (parenthesized_expression "(uVar3 & 0x1f)" (( "(") (binary_expression "uVar3 & 0x1f" (identifier "uVar3") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "param_2 = param_2 << (uVar3 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar3 & 0x1f)" (identifier "param_2") (= "=") (binary_expression "param_2 << (uVar3 & 0x1f)" (identifier "param_2") (<< "<<") (parenthesized_expression "(uVar3 & 0x1f)" (( "(") (binary_expression "uVar3 & 0x1f" (identifier "uVar3") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "param_1 = uVar4 | param_1 << (uVar3 & 0x1f);" (assignment_expression "param_1 = uVar4 | param_1 << (uVar3 & 0x1f)" (identifier "param_1") (= "=") (binary_expression "uVar4 | param_1 << (uVar3 & 0x1f)" (identifier "uVar4") (| "|") (binary_expression "param_1 << (uVar3 & 0x1f)" (identifier "param_1") (<< "<<") (parenthesized_expression "(uVar3 & 0x1f)" (( "(") (binary_expression "uVar3 & 0x1f" (identifier "uVar3") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (} "}"))) (expression_statement "uVar3 = param_4 >> 0x10;" (assignment_expression "uVar3 = param_4 >> 0x10" (identifier "uVar3") (= "=") (binary_expression "param_4 >> 0x10" (identifier "param_4") (>> ">>") (number_literal "0x10"))) (; ";")) (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar3 == 0)" (( "(") (binary_expression "uVar3 == 0" (identifier "uVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      trap(7);\n    }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar7 = param_1 / uVar3;" (assignment_expression "uVar7 = param_1 / uVar3" (identifier "uVar7") (= "=") (binary_expression "param_1 / uVar3" (identifier "param_1") (/ "/") (identifier "uVar3"))) (; ";")) (expression_statement "uVar6 = (param_4 & 0xffff) * uVar7;" (assignment_expression "uVar6 = (param_4 & 0xffff) * uVar7" (identifier "uVar6") (= "=") (binary_expression "(param_4 & 0xffff) * uVar7" (parenthesized_expression "(param_4 & 0xffff)" (( "(") (binary_expression "param_4 & 0xffff" (identifier "param_4") (& "&") (number_literal "0xffff")) () ")")) (* "*") (identifier "uVar7"))) (; ";")) (expression_statement "uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10" (identifier "uVar5") (= "=") (binary_expression "param_1 % uVar3 << 0x10 | param_2 >> 0x10" (binary_expression "param_1 % uVar3 << 0x10" (binary_expression "param_1 % uVar3" (identifier "param_1") (% "%") (identifier "uVar3")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "param_2 >> 0x10" (identifier "param_2") (>> ">>") (number_literal "0x10")))) (; ";")) (expression_statement "uVar4 = uVar7;" (assignment_expression "uVar4 = uVar7" (identifier "uVar4") (= "=") (identifier "uVar7")) (; ";")) (if_statement "if (uVar5 < uVar6) {\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" (if "if") (parenthesized_expression "(uVar5 < uVar6)" (( "(") (binary_expression "uVar5 < uVar6" (identifier "uVar5") (< "<") (identifier "uVar6")) () ")")) (compound_statement "{\n      uVar5 = uVar5 + param_4;\n      uVar4 = uVar7 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" ({ "{") (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" (identifier "uVar5") (= "=") (binary_expression "uVar5 + param_4" (identifier "uVar5") (+ "+") (identifier "param_4"))) (; ";")) (expression_statement "uVar4 = uVar7 - 1;" (assignment_expression "uVar4 = uVar7 - 1" (identifier "uVar4") (= "=") (binary_expression "uVar7 - 1" (identifier "uVar7") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((param_4 <= uVar5) && (uVar5 < uVar6)) {\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }" (if "if") (parenthesized_expression "((param_4 <= uVar5) && (uVar5 < uVar6))" (( "(") (binary_expression "(param_4 <= uVar5) && (uVar5 < uVar6)" (parenthesized_expression "(param_4 <= uVar5)" (( "(") (binary_expression "param_4 <= uVar5" (identifier "param_4") (<= "<=") (identifier "uVar5")) () ")")) (&& "&&") (parenthesized_expression "(uVar5 < uVar6)" (( "(") (binary_expression "uVar5 < uVar6" (identifier "uVar5") (< "<") (identifier "uVar6")) () ")"))) () ")")) (compound_statement "{\n        uVar4 = uVar7 - 2;\n        uVar5 = uVar5 + param_4;\n      }" ({ "{") (expression_statement "uVar4 = uVar7 - 2;" (assignment_expression "uVar4 = uVar7 - 2" (identifier "uVar4") (= "=") (binary_expression "uVar7 - 2" (identifier "uVar7") (- "-") (number_literal "2"))) (; ";")) (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" (identifier "uVar5") (= "=") (binary_expression "uVar5 + param_4" (identifier "uVar5") (+ "+") (identifier "param_4"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar3 == 0)" (( "(") (binary_expression "uVar3 == 0" (identifier "uVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      trap(7);\n    }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar8 = (uVar5 - uVar6) / uVar3;" (assignment_expression "uVar8 = (uVar5 - uVar6) / uVar3" (identifier "uVar8") (= "=") (binary_expression "(uVar5 - uVar6) / uVar3" (parenthesized_expression "(uVar5 - uVar6)" (( "(") (binary_expression "uVar5 - uVar6" (identifier "uVar5") (- "-") (identifier "uVar6")) () ")")) (/ "/") (identifier "uVar3"))) (; ";")) (expression_statement "uVar7 = (param_4 & 0xffff) * uVar8;" (assignment_expression "uVar7 = (param_4 & 0xffff) * uVar8" (identifier "uVar7") (= "=") (binary_expression "(param_4 & 0xffff) * uVar8" (parenthesized_expression "(param_4 & 0xffff)" (( "(") (binary_expression "param_4 & 0xffff" (identifier "param_4") (& "&") (number_literal "0xffff")) () ")")) (* "*") (identifier "uVar8"))) (; ";")) (expression_statement "uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff" (identifier "uVar5") (= "=") (binary_expression "(uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar5 - uVar6) % uVar3 << 0x10" (binary_expression "(uVar5 - uVar6) % uVar3" (parenthesized_expression "(uVar5 - uVar6)" (( "(") (binary_expression "uVar5 - uVar6" (identifier "uVar5") (- "-") (identifier "uVar6")) () ")")) (% "%") (identifier "uVar3")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "param_2 & 0xffff" (identifier "param_2") (& "&") (number_literal "0xffff")))) (; ";")) (expression_statement "uVar3 = uVar8;" (assignment_expression "uVar3 = uVar8" (identifier "uVar3") (= "=") (identifier "uVar8")) (; ";")) (if_statement "if (uVar5 < uVar7) {\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }" (if "if") (parenthesized_expression "(uVar5 < uVar7)" (( "(") (binary_expression "uVar5 < uVar7" (identifier "uVar5") (< "<") (identifier "uVar7")) () ")")) (compound_statement "{\n      uVar5 = param_4 + uVar5;\n      uVar3 = uVar8 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }\n    }" ({ "{") (expression_statement "uVar5 = param_4 + uVar5;" (assignment_expression "uVar5 = param_4 + uVar5" (identifier "uVar5") (= "=") (binary_expression "param_4 + uVar5" (identifier "param_4") (+ "+") (identifier "uVar5"))) (; ";")) (expression_statement "uVar3 = uVar8 - 1;" (assignment_expression "uVar3 = uVar8 - 1" (identifier "uVar3") (= "=") (binary_expression "uVar8 - 1" (identifier "uVar8") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar8 - 2;\n      }" (if "if") (parenthesized_expression "((param_4 <= uVar5) && (uVar5 < uVar7))" (( "(") (binary_expression "(param_4 <= uVar5) && (uVar5 < uVar7)" (parenthesized_expression "(param_4 <= uVar5)" (( "(") (binary_expression "param_4 <= uVar5" (identifier "param_4") (<= "<=") (identifier "uVar5")) () ")")) (&& "&&") (parenthesized_expression "(uVar5 < uVar7)" (( "(") (binary_expression "uVar5 < uVar7" (identifier "uVar5") (< "<") (identifier "uVar7")) () ")"))) () ")")) (compound_statement "{\n        uVar3 = uVar8 - 2;\n      }" ({ "{") (expression_statement "uVar3 = uVar8 - 2;" (assignment_expression "uVar3 = uVar8 - 2" (identifier "uVar3") (= "=") (binary_expression "uVar8 - 2" (identifier "uVar8") (- "-") (number_literal "2"))) (; ";")) (} "}"))) (} "}"))) (return_statement "return (ulonglong)(uVar4 << 0x10 | uVar3);" (return "return") (call_expression "(ulonglong)(uVar4 << 0x10 | uVar3)" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (argument_list "(uVar4 << 0x10 | uVar3)" (( "(") (binary_expression "uVar4 << 0x10 | uVar3" (binary_expression "uVar4 << 0x10" (identifier "uVar4") (<< "<<") (number_literal "0x10")) (| "|") (identifier "uVar3")) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar3 = LZCOUNT(param_4);" (assignment_expression "uVar3 = LZCOUNT(param_4)" (identifier "uVar3") (= "=") (call_expression "LZCOUNT(param_4)" (identifier "LZCOUNT") (argument_list "(param_4)" (( "(") (identifier "param_4") () ")")))) (; ";")) (if_statement "if (param_4 == 0) {\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }" (if "if") (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    trap(7);\n    param_4 = 1 / 0;\n    uVar3 = LZCOUNT(param_4);\n  }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (expression_statement "param_4 = 1 / 0;" (assignment_expression "param_4 = 1 / 0" (identifier "param_4") (= "=") (binary_expression "1 / 0" (number_literal "1") (/ "/") (number_literal "0"))) (; ";")) (expression_statement "uVar3 = LZCOUNT(param_4);" (assignment_expression "uVar3 = LZCOUNT(param_4)" (identifier "uVar3") (= "=") (call_expression "LZCOUNT(param_4)" (identifier "LZCOUNT") (argument_list "(param_4)" (( "(") (identifier "param_4") () ")")))) (; ";")) (} "}"))) (expression_statement "uVar4 = param_4 >> 0x10;" (assignment_expression "uVar4 = param_4 >> 0x10" (identifier "uVar4") (= "=") (binary_expression "param_4 >> 0x10" (identifier "param_4") (>> ">>") (number_literal "0x10"))) (; ";")) (if_statement "if (uVar3 == 0) {\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }\n  else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }" (if "if") (parenthesized_expression "(uVar3 == 0)" (( "(") (binary_expression "uVar3 == 0" (identifier "uVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    param_1 = param_1 - param_4;\n    uVar5 = 1;\n    uVar8 = param_4 & 0xffff;\n  }" ({ "{") (expression_statement "param_1 = param_1 - param_4;" (assignment_expression "param_1 = param_1 - param_4" (identifier "param_1") (= "=") (binary_expression "param_1 - param_4" (identifier "param_1") (- "-") (identifier "param_4"))) (; ";")) (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" (identifier "uVar5") (= "=") (number_literal "1")) (; ";")) (expression_statement "uVar8 = param_4 & 0xffff;" (assignment_expression "uVar8 = param_4 & 0xffff" (identifier "uVar8") (= "=") (binary_expression "param_4 & 0xffff" (identifier "param_4") (& "&") (number_literal "0xffff"))) (; ";")) (} "}")) (else_clause "else {\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }" (else "else") (compound_statement "{\n    param_4 = param_4 << (uVar3 & 0x1f);\n    uVar4 = param_4 >> 0x10;\n    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);\n    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar9 = uVar5 / uVar4;\n    uVar8 = param_4 & 0xffff;\n    param_2 = param_2 << (uVar3 & 0x1f);\n    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);\n    uVar7 = uVar8 * uVar9;\n    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;\n    uVar3 = uVar9;\n    if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }\n    if (uVar4 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar5 - uVar7) / uVar4;\n    uVar9 = uVar8 * uVar11;\n    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;\n    uVar5 = uVar11;\n    if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }\n    param_1 = param_1 - uVar9;\n    uVar5 = uVar3 << 0x10 | uVar5;\n  }" ({ "{") (expression_statement "param_4 = param_4 << (uVar3 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar3 & 0x1f)" (identifier "param_4") (= "=") (binary_expression "param_4 << (uVar3 & 0x1f)" (identifier "param_4") (<< "<<") (parenthesized_expression "(uVar3 & 0x1f)" (( "(") (binary_expression "uVar3 & 0x1f" (identifier "uVar3") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar4 = param_4 >> 0x10;" (assignment_expression "uVar4 = param_4 >> 0x10" (identifier "uVar4") (= "=") (binary_expression "param_4 >> 0x10" (identifier "param_4") (>> ">>") (number_literal "0x10"))) (; ";")) (expression_statement "uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);" (assignment_expression "uVar5 = param_1 >> (0x20 - uVar3 & 0x1f)" (identifier "uVar5") (= "=") (binary_expression "param_1 >> (0x20 - uVar3 & 0x1f)" (identifier "param_1") (>> ">>") (parenthesized_expression "(0x20 - uVar3 & 0x1f)" (( "(") (binary_expression "0x20 - uVar3 & 0x1f" (binary_expression "0x20 - uVar3" (number_literal "0x20") (- "-") (identifier "uVar3")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);" (assignment_expression "uVar6 = param_2 >> (0x20 - uVar3 & 0x1f)" (identifier "uVar6") (= "=") (binary_expression "param_2 >> (0x20 - uVar3 & 0x1f)" (identifier "param_2") (>> ">>") (parenthesized_expression "(0x20 - uVar3 & 0x1f)" (( "(") (binary_expression "0x20 - uVar3 & 0x1f" (binary_expression "0x20 - uVar3" (number_literal "0x20") (- "-") (identifier "uVar3")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (if_statement "if (uVar4 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar4 == 0)" (( "(") (binary_expression "uVar4 == 0" (identifier "uVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      trap(7);\n    }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar9 = uVar5 / uVar4;" (assignment_expression "uVar9 = uVar5 / uVar4" (identifier "uVar9") (= "=") (binary_expression "uVar5 / uVar4" (identifier "uVar5") (/ "/") (identifier "uVar4"))) (; ";")) (expression_statement "uVar8 = param_4 & 0xffff;" (assignment_expression "uVar8 = param_4 & 0xffff" (identifier "uVar8") (= "=") (binary_expression "param_4 & 0xffff" (identifier "param_4") (& "&") (number_literal "0xffff"))) (; ";")) (expression_statement "param_2 = param_2 << (uVar3 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar3 & 0x1f)" (identifier "param_2") (= "=") (binary_expression "param_2 << (uVar3 & 0x1f)" (identifier "param_2") (<< "<<") (parenthesized_expression "(uVar3 & 0x1f)" (( "(") (binary_expression "uVar3 & 0x1f" (identifier "uVar3") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);" (assignment_expression "uVar6 = uVar6 | param_1 << (uVar3 & 0x1f)" (identifier "uVar6") (= "=") (binary_expression "uVar6 | param_1 << (uVar3 & 0x1f)" (identifier "uVar6") (| "|") (binary_expression "param_1 << (uVar3 & 0x1f)" (identifier "param_1") (<< "<<") (parenthesized_expression "(uVar3 & 0x1f)" (( "(") (binary_expression "uVar3 & 0x1f" (identifier "uVar3") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "uVar7 = uVar8 * uVar9;" (assignment_expression "uVar7 = uVar8 * uVar9" (identifier "uVar7") (= "=") (binary_expression "uVar8 * uVar9" (identifier "uVar8") (* "*") (identifier "uVar9"))) (; ";")) (expression_statement "uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;" (assignment_expression "uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10" (identifier "uVar5") (= "=") (binary_expression "uVar5 % uVar4 << 0x10 | uVar6 >> 0x10" (binary_expression "uVar5 % uVar4 << 0x10" (binary_expression "uVar5 % uVar4" (identifier "uVar5") (% "%") (identifier "uVar4")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "uVar6 >> 0x10" (identifier "uVar6") (>> ">>") (number_literal "0x10")))) (; ";")) (expression_statement "uVar3 = uVar9;" (assignment_expression "uVar3 = uVar9" (identifier "uVar3") (= "=") (identifier "uVar9")) (; ";")) (if_statement "if (uVar5 < uVar7) {\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" (if "if") (parenthesized_expression "(uVar5 < uVar7)" (( "(") (binary_expression "uVar5 < uVar7" (identifier "uVar5") (< "<") (identifier "uVar7")) () ")")) (compound_statement "{\n      uVar5 = uVar5 + param_4;\n      uVar3 = uVar9 - 1;\n      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }\n    }" ({ "{") (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" (identifier "uVar5") (= "=") (binary_expression "uVar5 + param_4" (identifier "uVar5") (+ "+") (identifier "param_4"))) (; ";")) (expression_statement "uVar3 = uVar9 - 1;" (assignment_expression "uVar3 = uVar9 - 1" (identifier "uVar3") (= "=") (binary_expression "uVar9 - 1" (identifier "uVar9") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((param_4 <= uVar5) && (uVar5 < uVar7)) {\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }" (if "if") (parenthesized_expression "((param_4 <= uVar5) && (uVar5 < uVar7))" (( "(") (binary_expression "(param_4 <= uVar5) && (uVar5 < uVar7)" (parenthesized_expression "(param_4 <= uVar5)" (( "(") (binary_expression "param_4 <= uVar5" (identifier "param_4") (<= "<=") (identifier "uVar5")) () ")")) (&& "&&") (parenthesized_expression "(uVar5 < uVar7)" (( "(") (binary_expression "uVar5 < uVar7" (identifier "uVar5") (< "<") (identifier "uVar7")) () ")"))) () ")")) (compound_statement "{\n        uVar3 = uVar9 - 2;\n        uVar5 = uVar5 + param_4;\n      }" ({ "{") (expression_statement "uVar3 = uVar9 - 2;" (assignment_expression "uVar3 = uVar9 - 2" (identifier "uVar3") (= "=") (binary_expression "uVar9 - 2" (identifier "uVar9") (- "-") (number_literal "2"))) (; ";")) (expression_statement "uVar5 = uVar5 + param_4;" (assignment_expression "uVar5 = uVar5 + param_4" (identifier "uVar5") (= "=") (binary_expression "uVar5 + param_4" (identifier "uVar5") (+ "+") (identifier "param_4"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (uVar4 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar4 == 0)" (( "(") (binary_expression "uVar4 == 0" (identifier "uVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      trap(7);\n    }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar11 = (uVar5 - uVar7) / uVar4;" (assignment_expression "uVar11 = (uVar5 - uVar7) / uVar4" (identifier "uVar11") (= "=") (binary_expression "(uVar5 - uVar7) / uVar4" (parenthesized_expression "(uVar5 - uVar7)" (( "(") (binary_expression "uVar5 - uVar7" (identifier "uVar5") (- "-") (identifier "uVar7")) () ")")) (/ "/") (identifier "uVar4"))) (; ";")) (expression_statement "uVar9 = uVar8 * uVar11;" (assignment_expression "uVar9 = uVar8 * uVar11" (identifier "uVar9") (= "=") (binary_expression "uVar8 * uVar11" (identifier "uVar8") (* "*") (identifier "uVar11"))) (; ";")) (expression_statement "param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;" (assignment_expression "param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff" (identifier "param_1") (= "=") (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff" (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10" (binary_expression "(uVar5 - uVar7) % uVar4" (parenthesized_expression "(uVar5 - uVar7)" (( "(") (binary_expression "uVar5 - uVar7" (identifier "uVar5") (- "-") (identifier "uVar7")) () ")")) (% "%") (identifier "uVar4")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "uVar6 & 0xffff" (identifier "uVar6") (& "&") (number_literal "0xffff")))) (; ";")) (expression_statement "uVar5 = uVar11;" (assignment_expression "uVar5 = uVar11" (identifier "uVar5") (= "=") (identifier "uVar11")) (; ";")) (if_statement "if (param_1 < uVar9) {\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }" (if "if") (parenthesized_expression "(param_1 < uVar9)" (( "(") (binary_expression "param_1 < uVar9" (identifier "param_1") (< "<") (identifier "uVar9")) () ")")) (compound_statement "{\n      param_1 = param_1 + param_4;\n      uVar5 = uVar11 - 1;\n      if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }\n    }" ({ "{") (expression_statement "param_1 = param_1 + param_4;" (assignment_expression "param_1 = param_1 + param_4" (identifier "param_1") (= "=") (binary_expression "param_1 + param_4" (identifier "param_1") (+ "+") (identifier "param_4"))) (; ";")) (expression_statement "uVar5 = uVar11 - 1;" (assignment_expression "uVar5 = uVar11 - 1" (identifier "uVar5") (= "=") (binary_expression "uVar11 - 1" (identifier "uVar11") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((param_4 <= param_1) && (param_1 < uVar9)) {\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }" (if "if") (parenthesized_expression "((param_4 <= param_1) && (param_1 < uVar9))" (( "(") (binary_expression "(param_4 <= param_1) && (param_1 < uVar9)" (parenthesized_expression "(param_4 <= param_1)" (( "(") (binary_expression "param_4 <= param_1" (identifier "param_4") (<= "<=") (identifier "param_1")) () ")")) (&& "&&") (parenthesized_expression "(param_1 < uVar9)" (( "(") (binary_expression "param_1 < uVar9" (identifier "param_1") (< "<") (identifier "uVar9")) () ")"))) () ")")) (compound_statement "{\n        uVar5 = uVar11 - 2;\n        param_1 = param_1 + param_4;\n      }" ({ "{") (expression_statement "uVar5 = uVar11 - 2;" (assignment_expression "uVar5 = uVar11 - 2" (identifier "uVar5") (= "=") (binary_expression "uVar11 - 2" (identifier "uVar11") (- "-") (number_literal "2"))) (; ";")) (expression_statement "param_1 = param_1 + param_4;" (assignment_expression "param_1 = param_1 + param_4" (identifier "param_1") (= "=") (binary_expression "param_1 + param_4" (identifier "param_1") (+ "+") (identifier "param_4"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "param_1 = param_1 - uVar9;" (assignment_expression "param_1 = param_1 - uVar9" (identifier "param_1") (= "=") (binary_expression "param_1 - uVar9" (identifier "param_1") (- "-") (identifier "uVar9"))) (; ";")) (expression_statement "uVar5 = uVar3 << 0x10 | uVar5;" (assignment_expression "uVar5 = uVar3 << 0x10 | uVar5" (identifier "uVar5") (= "=") (binary_expression "uVar3 << 0x10 | uVar5" (binary_expression "uVar3 << 0x10" (identifier "uVar3") (<< "<<") (number_literal "0x10")) (| "|") (identifier "uVar5"))) (; ";")) (} "}")))) (if_statement "if (uVar4 == 0) {\n    trap(7);\n  }" (if "if") (parenthesized_expression "(uVar4 == 0)" (( "(") (binary_expression "uVar4 == 0" (identifier "uVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    trap(7);\n  }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar9 = param_1 / uVar4;" (assignment_expression "uVar9 = param_1 / uVar4" (identifier "uVar9") (= "=") (binary_expression "param_1 / uVar4" (identifier "param_1") (/ "/") (identifier "uVar4"))) (; ";")) (expression_statement "uVar6 = uVar9 * uVar8;" (assignment_expression "uVar6 = uVar9 * uVar8" (identifier "uVar6") (= "=") (binary_expression "uVar9 * uVar8" (identifier "uVar9") (* "*") (identifier "uVar8"))) (; ";")) (expression_statement "uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10" (identifier "uVar7") (= "=") (binary_expression "param_1 % uVar4 << 0x10 | param_2 >> 0x10" (binary_expression "param_1 % uVar4 << 0x10" (binary_expression "param_1 % uVar4" (identifier "param_1") (% "%") (identifier "uVar4")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "param_2 >> 0x10" (identifier "param_2") (>> ">>") (number_literal "0x10")))) (; ";")) (expression_statement "uVar3 = uVar9;" (assignment_expression "uVar3 = uVar9" (identifier "uVar3") (= "=") (identifier "uVar9")) (; ";")) (if_statement "if (uVar7 < uVar6) {\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }" (if "if") (parenthesized_expression "(uVar7 < uVar6)" (( "(") (binary_expression "uVar7 < uVar6" (identifier "uVar7") (< "<") (identifier "uVar6")) () ")")) (compound_statement "{\n    uVar7 = uVar7 + param_4;\n    uVar3 = uVar9 - 1;\n    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }\n  }" ({ "{") (expression_statement "uVar7 = uVar7 + param_4;" (assignment_expression "uVar7 = uVar7 + param_4" (identifier "uVar7") (= "=") (binary_expression "uVar7 + param_4" (identifier "uVar7") (+ "+") (identifier "param_4"))) (; ";")) (expression_statement "uVar3 = uVar9 - 1;" (assignment_expression "uVar3 = uVar9 - 1" (identifier "uVar3") (= "=") (binary_expression "uVar9 - 1" (identifier "uVar9") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((param_4 <= uVar7) && (uVar7 < uVar6)) {\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }" (if "if") (parenthesized_expression "((param_4 <= uVar7) && (uVar7 < uVar6))" (( "(") (binary_expression "(param_4 <= uVar7) && (uVar7 < uVar6)" (parenthesized_expression "(param_4 <= uVar7)" (( "(") (binary_expression "param_4 <= uVar7" (identifier "param_4") (<= "<=") (identifier "uVar7")) () ")")) (&& "&&") (parenthesized_expression "(uVar7 < uVar6)" (( "(") (binary_expression "uVar7 < uVar6" (identifier "uVar7") (< "<") (identifier "uVar6")) () ")"))) () ")")) (compound_statement "{\n      uVar7 = uVar7 + param_4;\n      uVar3 = uVar9 - 2;\n    }" ({ "{") (expression_statement "uVar7 = uVar7 + param_4;" (assignment_expression "uVar7 = uVar7 + param_4" (identifier "uVar7") (= "=") (binary_expression "uVar7 + param_4" (identifier "uVar7") (+ "+") (identifier "param_4"))) (; ";")) (expression_statement "uVar3 = uVar9 - 2;" (assignment_expression "uVar3 = uVar9 - 2" (identifier "uVar3") (= "=") (binary_expression "uVar9 - 2" (identifier "uVar9") (- "-") (number_literal "2"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (uVar4 == 0) {\n    trap(7);\n  }" (if "if") (parenthesized_expression "(uVar4 == 0)" (( "(") (binary_expression "uVar4 == 0" (identifier "uVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    trap(7);\n  }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar9 = (uVar7 - uVar6) / uVar4;" (assignment_expression "uVar9 = (uVar7 - uVar6) / uVar4" (identifier "uVar9") (= "=") (binary_expression "(uVar7 - uVar6) / uVar4" (parenthesized_expression "(uVar7 - uVar6)" (( "(") (binary_expression "uVar7 - uVar6" (identifier "uVar7") (- "-") (identifier "uVar6")) () ")")) (/ "/") (identifier "uVar4"))) (; ";")) (expression_statement "uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff" (identifier "uVar4") (= "=") (binary_expression "(uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar7 - uVar6) % uVar4 << 0x10" (binary_expression "(uVar7 - uVar6) % uVar4" (parenthesized_expression "(uVar7 - uVar6)" (( "(") (binary_expression "uVar7 - uVar6" (identifier "uVar7") (- "-") (identifier "uVar6")) () ")")) (% "%") (identifier "uVar4")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "param_2 & 0xffff" (identifier "param_2") (& "&") (number_literal "0xffff")))) (; ";")) (expression_statement "uVar6 = param_4 + uVar4;" (assignment_expression "uVar6 = param_4 + uVar4" (identifier "uVar6") (= "=") (binary_expression "param_4 + uVar4" (identifier "param_4") (+ "+") (identifier "uVar4"))) (; ";")) (if_statement "if (uVar4 < uVar9 * uVar8) {\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }" (if "if") (parenthesized_expression "(uVar4 < uVar9 * uVar8)" (( "(") (binary_expression "uVar4 < uVar9 * uVar8" (identifier "uVar4") (< "<") (binary_expression "uVar9 * uVar8" (identifier "uVar9") (* "*") (identifier "uVar8"))) () ")")) (compound_statement "{\n    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }\n    uVar9 = uVar9 - 2;\n  }" ({ "{") (if_statement "if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }" (if "if") (parenthesized_expression "((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6))" (( "(") (binary_expression "(uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)" (parenthesized_expression "(uVar6 < param_4)" (( "(") (binary_expression "uVar6 < param_4" (identifier "uVar6") (< "<") (identifier "param_4")) () ")")) (|| "||") (parenthesized_expression "(uVar9 * uVar8 <= uVar6)" (( "(") (binary_expression "uVar9 * uVar8 <= uVar6" (binary_expression "uVar9 * uVar8" (identifier "uVar9") (* "*") (identifier "uVar8")) (<= "<=") (identifier "uVar6")) () ")"))) () ")")) (compound_statement "{\n      uVar9 = uVar3 << 0x10 | uVar9 - 1;\n      goto LAB_0001ec30;\n    }" ({ "{") (expression_statement "uVar9 = uVar3 << 0x10 | uVar9 - 1;" (assignment_expression "uVar9 = uVar3 << 0x10 | uVar9 - 1" (identifier "uVar9") (= "=") (binary_expression "uVar3 << 0x10 | uVar9 - 1" (binary_expression "uVar3 << 0x10" (identifier "uVar3") (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "uVar9 - 1" (identifier "uVar9") (- "-") (number_literal "1")))) (; ";")) (goto_statement "goto LAB_0001ec30;" (goto "goto") (statement_identifier "LAB_0001ec30") (; ";")) (} "}"))) (expression_statement "uVar9 = uVar9 - 2;" (assignment_expression "uVar9 = uVar9 - 2" (identifier "uVar9") (= "=") (binary_expression "uVar9 - 2" (identifier "uVar9") (- "-") (number_literal "2"))) (; ";")) (} "}"))) (expression_statement "uVar9 = uVar3 << 0x10 | uVar9;" (assignment_expression "uVar9 = uVar3 << 0x10 | uVar9" (identifier "uVar9") (= "=") (binary_expression "uVar3 << 0x10 | uVar9" (binary_expression "uVar3 << 0x10" (identifier "uVar3") (<< "<<") (number_literal "0x10")) (| "|") (identifier "uVar9"))) (; ";")) (labeled_statement "LAB_0001ec30:\n  return CONCAT44(uVar5,uVar9);" (statement_identifier "LAB_0001ec30") (: ":") (return_statement "return CONCAT44(uVar5,uVar9);" (return "return") (call_expression "CONCAT44(uVar5,uVar9)" (identifier "CONCAT44") (argument_list "(uVar5,uVar9)" (( "(") (identifier "uVar5") (, ",") (identifier "uVar9") () ")"))) (; ";"))) (} "}")))

type_1 function_1(type_2 var_2,type_2 var_5,type_2 var_1,type_2 var_6)

{
  bool bVar1;
  type_3 lVar2;
  type_2 var_4;
  type_2 var_7;
  type_2 var_11;
  type_2 var_9;
  type_2 var_8;
  type_2 var_14;
  type_2 var_13;
  type_2 var_15;
  type_2 var_12;
  
  if (var_1 != 0) {
    if (var_2 < var_1) {
      return 0;
    }
    var_4 = var_3(var_1);
    if (var_4 == 0) {
      if (var_2 <= var_1) {
        return (type_1)(var_5 < var_6) ^ 1;
      }
      return 1;
    }
    var_7 = 0x20 - var_4;
    var_11 = var_2 >> (var_7 & 0x1f);
    var_8 = var_6 >> (var_7 & 0x1f) | var_1 << (var_4 & 0x1f);
    var_9 = var_8 >> 0x10;
    if (var_9 == 0) {
      var_10(7);
    }
    var_12 = var_11 / var_9;
    var_13 = var_5 >> (var_7 & 0x1f) | var_2 << (var_4 & 0x1f);
    var_14 = (var_8 & 0xffff) * var_12;
    var_11 = var_11 % var_9 << 0x10 | var_13 >> 0x10;
    var_7 = var_12;
    if (var_11 < var_14) {
      var_11 = var_11 + var_8;
      var_7 = var_12 - 1;
      if ((var_8 <= var_11) && (var_11 < var_14)) {
        var_7 = var_12 - 2;
        var_11 = var_11 + var_8;
      }
    }
    if (var_9 == 0) {
      var_10(7);
    }
    var_15 = (var_11 - var_14) / var_9;
    var_12 = (var_8 & 0xffff) * var_15;
    var_9 = (var_11 - var_14) % var_9 << 0x10 | var_13 & 0xffff;
    var_11 = var_15;
    if (var_9 < var_12) {
      var_9 = var_9 + var_8;
      var_11 = var_15 - 1;
      if ((var_8 <= var_9) && (var_9 < var_12)) {
        var_11 = var_15 - 2;
        var_9 = var_9 + var_8;
      }
    }
    var_11 = var_7 << 0x10 | var_11;
    lVar2 = (type_1)var_11 * (type_1)(var_6 << (var_4 & 0x1f));
    var_7 = (type_2)((type_1)lVar2 >> 0x20);
    if (var_7 <= var_9 - var_12) {
      if (var_9 - var_12 != var_7) {
        return (type_1)var_11;
      }
      bVar1 = var_5 << (var_4 & 0x1f) < (type_2)lVar2;
      if (!bVar1) {
        return (type_1)var_16(bVar1,var_11);
      }
    }
    return (type_1)(var_11 - 1);
  }
  var_4 = var_3(var_6);
  if (var_2 < var_6) {
    if (var_4 != 0) {
      var_7 = var_5 >> (-var_4 & 0x1f);
      var_6 = var_6 << (var_4 & 0x1f);
      var_5 = var_5 << (var_4 & 0x1f);
      var_2 = var_7 | var_2 << (var_4 & 0x1f);
    }
    var_4 = var_6 >> 0x10;
    if (var_4 == 0) {
      var_10(7);
    }
    var_8 = var_2 / var_4;
    var_9 = (var_6 & 0xffff) * var_8;
    var_11 = var_2 % var_4 << 0x10 | var_5 >> 0x10;
    var_7 = var_8;
    if (var_11 < var_9) {
      var_11 = var_11 + var_6;
      var_7 = var_8 - 1;
      if ((var_6 <= var_11) && (var_11 < var_9)) {
        var_7 = var_8 - 2;
        var_11 = var_11 + var_6;
      }
    }
    if (var_4 == 0) {
      var_10(7);
    }
    var_14 = (var_11 - var_9) / var_4;
    var_8 = (var_6 & 0xffff) * var_14;
    var_11 = (var_11 - var_9) % var_4 << 0x10 | var_5 & 0xffff;
    var_4 = var_14;
    if (var_11 < var_8) {
      var_11 = var_6 + var_11;
      var_4 = var_14 - 1;
      if ((var_6 <= var_11) && (var_11 < var_8)) {
        var_4 = var_14 - 2;
      }
    }
    return (type_1)(var_7 << 0x10 | var_4);
  }
  var_4 = var_3(var_6);
  if (var_6 == 0) {
    var_10(7);
    var_6 = 1 / 0;
    var_4 = var_3(var_6);
  }
  var_7 = var_6 >> 0x10;
  if (var_4 == 0) {
    var_2 = var_2 - var_6;
    var_11 = 1;
    var_14 = var_6 & 0xffff;
  }
  else {
    var_6 = var_6 << (var_4 & 0x1f);
    var_7 = var_6 >> 0x10;
    var_11 = var_2 >> (0x20 - var_4 & 0x1f);
    var_9 = var_5 >> (0x20 - var_4 & 0x1f);
    if (var_7 == 0) {
      var_10(7);
    }
    var_13 = var_11 / var_7;
    var_14 = var_6 & 0xffff;
    var_5 = var_5 << (var_4 & 0x1f);
    var_9 = var_9 | var_2 << (var_4 & 0x1f);
    var_8 = var_14 * var_13;
    var_11 = var_11 % var_7 << 0x10 | var_9 >> 0x10;
    var_4 = var_13;
    if (var_11 < var_8) {
      var_11 = var_11 + var_6;
      var_4 = var_13 - 1;
      if ((var_6 <= var_11) && (var_11 < var_8)) {
        var_4 = var_13 - 2;
        var_11 = var_11 + var_6;
      }
    }
    if (var_7 == 0) {
      var_10(7);
    }
    var_12 = (var_11 - var_8) / var_7;
    var_13 = var_14 * var_12;
    var_2 = (var_11 - var_8) % var_7 << 0x10 | var_9 & 0xffff;
    var_11 = var_12;
    if (var_2 < var_13) {
      var_2 = var_2 + var_6;
      var_11 = var_12 - 1;
      if ((var_6 <= var_2) && (var_2 < var_13)) {
        var_11 = var_12 - 2;
        var_2 = var_2 + var_6;
      }
    }
    var_2 = var_2 - var_13;
    var_11 = var_4 << 0x10 | var_11;
  }
  if (var_7 == 0) {
    var_10(7);
  }
  var_13 = var_2 / var_7;
  var_9 = var_13 * var_14;
  var_8 = var_2 % var_7 << 0x10 | var_5 >> 0x10;
  var_4 = var_13;
  if (var_8 < var_9) {
    var_8 = var_8 + var_6;
    var_4 = var_13 - 1;
    if ((var_6 <= var_8) && (var_8 < var_9)) {
      var_8 = var_8 + var_6;
      var_4 = var_13 - 2;
    }
  }
  if (var_7 == 0) {
    var_10(7);
  }
  var_13 = (var_8 - var_9) / var_7;
  var_7 = (var_8 - var_9) % var_7 << 0x10 | var_5 & 0xffff;
  var_9 = var_6 + var_7;
  if (var_7 < var_13 * var_14) {
    if ((var_9 < var_6) || (var_13 * var_14 <= var_9)) {
      var_13 = var_4 << 0x10 | var_13 - 1;
      goto LAB_0001ec30;
    }
    var_13 = var_13 - 2;
  }
  var_13 = var_4 << 0x10 | var_13;
LAB_0001ec30:
  return var_17(var_11,var_13);
}


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

ulonglong MASKED(uint param_1,uint param_2,uint param_3,uint param_4)

{
  bool bVar1;
  longlong lVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  
  if (param_3 != 0) {
    if (param_1 < param_3) {
      return 0;
    }
    uVar3 = LZCOUNT(param_3);
    if (uVar3 == 0) {
      if (param_1 <= param_3) {
        return (ulonglong)(param_2 < param_4) ^ 1;
      }
      return 1;
    }
    uVar4 = 0x20 - uVar3;
    uVar5 = param_1 >> (uVar4 & 0x1f);
    uVar7 = param_4 >> (uVar4 & 0x1f) | param_3 << (uVar3 & 0x1f);
    uVar6 = uVar7 >> 0x10;
    if (uVar6 == 0) {
      trap(7);
    }
    uVar11 = uVar5 / uVar6;
    uVar9 = param_2 >> (uVar4 & 0x1f) | param_1 << (uVar3 & 0x1f);
    uVar8 = (uVar7 & 0xffff) * uVar11;
    uVar5 = uVar5 % uVar6 << 0x10 | uVar9 >> 0x10;
    uVar4 = uVar11;
    if (uVar5 < uVar8) {
      uVar5 = uVar5 + uVar7;
      uVar4 = uVar11 - 1;
      if ((uVar7 <= uVar5) && (uVar5 < uVar8)) {
        uVar4 = uVar11 - 2;
        uVar5 = uVar5 + uVar7;
      }
    }
    if (uVar6 == 0) {
      trap(7);
    }
    uVar10 = (uVar5 - uVar8) / uVar6;
    uVar11 = (uVar7 & 0xffff) * uVar10;
    uVar6 = (uVar5 - uVar8) % uVar6 << 0x10 | uVar9 & 0xffff;
    uVar5 = uVar10;
    if (uVar6 < uVar11) {
      uVar6 = uVar6 + uVar7;
      uVar5 = uVar10 - 1;
      if ((uVar7 <= uVar6) && (uVar6 < uVar11)) {
        uVar5 = uVar10 - 2;
        uVar6 = uVar6 + uVar7;
      }
    }
    uVar5 = uVar4 << 0x10 | uVar5;
    lVar2 = (ulonglong)uVar5 * (ulonglong)(param_4 << (uVar3 & 0x1f));
    uVar4 = (uint)((ulonglong)lVar2 >> 0x20);
    if (uVar4 <= uVar6 - uVar11) {
      if (uVar6 - uVar11 != uVar4) {
        return (ulonglong)uVar5;
      }
      bVar1 = param_2 << (uVar3 & 0x1f) < (uint)lVar2;
      if (!bVar1) {
        return (ulonglong)CONCAT14(bVar1,uVar5);
      }
    }
    return (ulonglong)(uVar5 - 1);
  }
  uVar3 = LZCOUNT(param_4);
  if (param_1 < param_4) {
    if (uVar3 != 0) {
      uVar4 = param_2 >> (-uVar3 & 0x1f);
      param_4 = param_4 << (uVar3 & 0x1f);
      param_2 = param_2 << (uVar3 & 0x1f);
      param_1 = uVar4 | param_1 << (uVar3 & 0x1f);
    }
    uVar3 = param_4 >> 0x10;
    if (uVar3 == 0) {
      trap(7);
    }
    uVar7 = param_1 / uVar3;
    uVar6 = (param_4 & 0xffff) * uVar7;
    uVar5 = param_1 % uVar3 << 0x10 | param_2 >> 0x10;
    uVar4 = uVar7;
    if (uVar5 < uVar6) {
      uVar5 = uVar5 + param_4;
      uVar4 = uVar7 - 1;
      if ((param_4 <= uVar5) && (uVar5 < uVar6)) {
        uVar4 = uVar7 - 2;
        uVar5 = uVar5 + param_4;
      }
    }
    if (uVar3 == 0) {
      trap(7);
    }
    uVar8 = (uVar5 - uVar6) / uVar3;
    uVar7 = (param_4 & 0xffff) * uVar8;
    uVar5 = (uVar5 - uVar6) % uVar3 << 0x10 | param_2 & 0xffff;
    uVar3 = uVar8;
    if (uVar5 < uVar7) {
      uVar5 = param_4 + uVar5;
      uVar3 = uVar8 - 1;
      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {
        uVar3 = uVar8 - 2;
      }
    }
    return (ulonglong)(uVar4 << 0x10 | uVar3);
  }
  uVar3 = LZCOUNT(param_4);
  if (param_4 == 0) {
    trap(7);
    param_4 = 1 / 0;
    uVar3 = LZCOUNT(param_4);
  }
  uVar4 = param_4 >> 0x10;
  if (uVar3 == 0) {
    param_1 = param_1 - param_4;
    uVar5 = 1;
    uVar8 = param_4 & 0xffff;
  }
  else {
    param_4 = param_4 << (uVar3 & 0x1f);
    uVar4 = param_4 >> 0x10;
    uVar5 = param_1 >> (0x20 - uVar3 & 0x1f);
    uVar6 = param_2 >> (0x20 - uVar3 & 0x1f);
    if (uVar4 == 0) {
      trap(7);
    }
    uVar9 = uVar5 / uVar4;
    uVar8 = param_4 & 0xffff;
    param_2 = param_2 << (uVar3 & 0x1f);
    uVar6 = uVar6 | param_1 << (uVar3 & 0x1f);
    uVar7 = uVar8 * uVar9;
    uVar5 = uVar5 % uVar4 << 0x10 | uVar6 >> 0x10;
    uVar3 = uVar9;
    if (uVar5 < uVar7) {
      uVar5 = uVar5 + param_4;
      uVar3 = uVar9 - 1;
      if ((param_4 <= uVar5) && (uVar5 < uVar7)) {
        uVar3 = uVar9 - 2;
        uVar5 = uVar5 + param_4;
      }
    }
    if (uVar4 == 0) {
      trap(7);
    }
    uVar11 = (uVar5 - uVar7) / uVar4;
    uVar9 = uVar8 * uVar11;
    param_1 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar6 & 0xffff;
    uVar5 = uVar11;
    if (param_1 < uVar9) {
      param_1 = param_1 + param_4;
      uVar5 = uVar11 - 1;
      if ((param_4 <= param_1) && (param_1 < uVar9)) {
        uVar5 = uVar11 - 2;
        param_1 = param_1 + param_4;
      }
    }
    param_1 = param_1 - uVar9;
    uVar5 = uVar3 << 0x10 | uVar5;
  }
  if (uVar4 == 0) {
    trap(7);
  }
  uVar9 = param_1 / uVar4;
  uVar6 = uVar9 * uVar8;
  uVar7 = param_1 % uVar4 << 0x10 | param_2 >> 0x10;
  uVar3 = uVar9;
  if (uVar7 < uVar6) {
    uVar7 = uVar7 + param_4;
    uVar3 = uVar9 - 1;
    if ((param_4 <= uVar7) && (uVar7 < uVar6)) {
      uVar7 = uVar7 + param_4;
      uVar3 = uVar9 - 2;
    }
  }
  if (uVar4 == 0) {
    trap(7);
  }
  uVar9 = (uVar7 - uVar6) / uVar4;
  uVar4 = (uVar7 - uVar6) % uVar4 << 0x10 | param_2 & 0xffff;
  uVar6 = param_4 + uVar4;
  if (uVar4 < uVar9 * uVar8) {
    if ((uVar6 < param_4) || (uVar9 * uVar8 <= uVar6)) {
      uVar9 = uVar3 << 0x10 | uVar9 - 1;
      goto LAB_0001ec30;
    }
    uVar9 = uVar9 - 2;
  }
  uVar9 = uVar3 << 0x10 | uVar9;
LAB_0001ec30:
  return CONCAT44(uVar5,uVar9);
}

