
int der_decode_bit_string(uchar *in,ulong inlen,uchar *out,ulong *outlen)

{
  byte bVar1;
  ulong uVar2;
  uint uVar3;
  long lVar4;
  ulong uVar5;
  long lVar6;
  bool bVar7;
  
  if (in == (uchar *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);
  }
  if (out == (uchar *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);
  }
  if (outlen == (ulong *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);
  }
  if (inlen < 4) {
    return 0x10;
  }
  if ((*in & 0x1f) != 3) {
    return 7;
  }
  bVar1 = in[1];
  uVar5 = (ulong)bVar1;
  lVar6 = 2;
  if ((char)bVar1 < '\0') {
    uVar2 = (ulong)(bVar1 & 0x7f);
    if (1 < uVar2 - 1) {
      return 7;
    }
    uVar5 = (ulong)in[2];
    if (uVar2 != 1) {
      uVar5 = (ulong)CONCAT11(in[2],in[3]);
    }
    lVar6 = uVar2 + 2;
  }
  if (uVar5 == 0) {
    return 7;
  }
  if (inlen < uVar5 + lVar6) {
    return 7;
  }
  uVar5 = (uVar5 * 8 + -8) - (ulong)(in[lVar6] & 7);
  if (*outlen < uVar5) {
    *outlen = uVar5;
    return 6;
  }
  if (uVar5 != 0) {
    lVar4 = lVar6 + 1;
    *out = (uchar)((int)(uint)in[lVar6 + 1] >> 7);
    uVar2 = 1;
    if (1 < uVar5) {
      uVar3 = (int)uVar5 - 1U & 3;
      if (uVar3 != 0) {
        if (uVar3 != 1) {
          if (uVar3 != 2) {
            uVar2 = 2;
            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;
          }
          bVar7 = uVar2 == 7;
          out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;
          uVar2 = uVar2 + 1;
          lVar4 = lVar6 + 1 + (ulong)bVar7;
        }
        bVar7 = uVar2 == 7;
        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;
        uVar2 = uVar2 + 1;
        lVar4 = lVar4 + (ulong)bVar7;
        if (uVar5 == uVar2) goto LAB_0017a4d2;
      }
      do {
        uVar3 = (uint)uVar2;
        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;
        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;
        out[uVar2 + 1] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;
        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);
        out[uVar2 + 2] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;
        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);
        out[uVar2 + 3] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;
        uVar2 = uVar2 + 4;
        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;
      } while (uVar5 != uVar2);
    }
  }
LAB_0017a4d2:
  *outlen = uVar5;
  return 0;
}



undefined8 der_decode_bit_string(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)

{
  byte bVar1;
  ulong uVar2;
  uint uVar3;
  long lVar4;
  ulong uVar5;
  long lVar6;
  bool bVar7;
  
  if (param_1 == (byte *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);
  }
  if (param_3 == (undefined1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);
  }
  if (param_4 == (ulong *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);
  }
  if (param_2 < 4) {
    return 0x10;
  }
  if ((*param_1 & 0x1f) != 3) {
    return 7;
  }
  bVar1 = param_1[1];
  uVar5 = (ulong)bVar1;
  lVar6 = 2;
  if ((char)bVar1 < '\0') {
    uVar2 = (ulong)(bVar1 & 0x7f);
    if (1 < uVar2 - 1) {
      return 7;
    }
    uVar5 = (ulong)param_1[2];
    if (uVar2 != 1) {
      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);
    }
    lVar6 = uVar2 + 2;
  }
  if (uVar5 == 0) {
    return 7;
  }
  if (param_2 < uVar5 + lVar6) {
    return 7;
  }
  uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);
  if (*param_4 < uVar5) {
    *param_4 = uVar5;
    return 6;
  }
  if (uVar5 != 0) {
    lVar4 = lVar6 + 1;
    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);
    uVar2 = 1;
    if (1 < uVar5) {
      uVar3 = (int)uVar5 - 1U & 3;
      if (uVar3 != 0) {
        if (uVar3 != 1) {
          if (uVar3 != 2) {
            uVar2 = 2;
            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;
          }
          bVar7 = uVar2 == 7;
          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;
          uVar2 = uVar2 + 1;
          lVar4 = lVar6 + 1 + (ulong)bVar7;
        }
        bVar7 = uVar2 == 7;
        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;
        uVar2 = uVar2 + 1;
        lVar4 = lVar4 + (ulong)bVar7;
        if (uVar5 == uVar2) goto LAB_0017a4d2;
      }
      do {
        uVar3 = (uint)uVar2;
        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;
        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;
        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;
        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);
        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;
        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);
        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;
        uVar2 = uVar2 + 4;
        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;
      } while (uVar5 != uVar2);
    }
  }
LAB_0017a4d2:
  *param_4 = uVar5;
  return 0;
}


SUB RSP,0x8
TEST RDI,RDI
JZ 0x0017a577
TEST RDX,RDX
JZ 0x0017a55f
MOV R9,RCX
TEST RCX,RCX
JZ 0x0017a547
MOV EAX,0x10
CMP RSI,0x3
JBE 0x0017a4d7
MOVZX ECX,byte ptr [RDI]
MOV EAX,0x7
AND ECX,0x1f
CMP CL,0x3
JNZ 0x0017a4d7
MOVZX R8D,byte ptr [RDI + 0x1]
MOV R11D,0x2
MOV RCX,R8
TEST R8B,R8B
JS 0x0017a4e0
TEST R8,R8
JZ 0x0017a540
LEA RCX,[R8 + R11*0x1]
MOV EAX,0x7
CMP RCX,RSI
JA 0x0017a4d7
MOVZX ESI,byte ptr [RDI + R11*0x1]
LEA R10,[-0x8 + R8*0x8]
AND ESI,0x7
SUB R10,RSI
CMP qword ptr [R9],R10
JC 0x0017a510
TEST R10,R10
JZ 0x0017a4d2
MOVZX EAX,byte ptr [RDI + R11*0x1 + 0x1]
LEA R8,[R11 + 0x1]
SAR EAX,0x7
MOV byte ptr [RDX],AL
MOV EAX,0x1
CMP R10,0x1
JBE 0x0017a4d2
MOV RCX,R10
SUB RCX,RAX
AND ECX,0x3
JZ 0x0017a40d
CMP RCX,0x1
JZ 0x0017a3d5
CMP RCX,0x2
JNZ 0x0017a520
MOV ECX,EAX
MOVZX R11D,byte ptr [RDI + R8*0x1]
MOV RSI,RAX
NOT ECX
AND ESI,0x7
AND ECX,0x7
SAR R11D,CL
AND R11D,0x1
CMP RSI,0x7
MOV byte ptr [RDX + RAX*0x1],R11B
SETZ R11B
ADD RAX,0x1
MOVZX ECX,R11B
ADD R8,RCX
MOV ECX,EAX
MOVZX ESI,byte ptr [RDI + R8*0x1]
MOV R11,RAX
NOT ECX
AND R11D,0x7
AND ECX,0x7
SAR ESI,CL
AND ESI,0x1
CMP R11,0x7
MOV byte ptr [RDX + RAX*0x1],SIL
SETZ SIL
ADD RAX,0x1
MOVZX ECX,SIL
ADD R8,RCX
CMP R10,RAX
JZ 0x0017a4d2
MOV ECX,EAX
MOVZX R11D,byte ptr [RDI + R8*0x1]
XOR ESI,ESI
NOT ECX
AND ECX,0x7
SAR R11D,CL
AND R11D,0x1
MOV byte ptr [RDX + RAX*0x1],R11B
MOV R11,RAX
AND R11D,0x7
CMP R11,0x7
LEA R11,[RAX + 0x1]
SETZ SIL
MOV ECX,R11D
AND R11D,0x7
ADD RSI,R8
NOT ECX
MOVZX R8D,byte ptr [RDI + RSI*0x1]
AND ECX,0x7
SAR R8D,CL
AND R8D,0x1
MOV byte ptr [RDX + RAX*0x1 + 0x1],R8B
XOR R8D,R8D
CMP R11,0x7
LEA R11,[RAX + 0x2]
SETZ R8B
MOV ECX,R11D
AND R11D,0x7
ADD RSI,R8
NOT ECX
MOVZX R8D,byte ptr [RDI + RSI*0x1]
AND ECX,0x7
SAR R8D,CL
AND R8D,0x1
MOV byte ptr [RDX + RAX*0x1 + 0x2],R8B
XOR R8D,R8D
CMP R11,0x7
LEA R11,[RAX + 0x3]
SETZ R8B
MOV ECX,R11D
AND R11D,0x7
ADD RSI,R8
NOT ECX
MOVZX R8D,byte ptr [RDI + RSI*0x1]
AND ECX,0x7
SAR R8D,CL
AND R8D,0x1
MOV byte ptr [RDX + RAX*0x1 + 0x3],R8B
XOR R8D,R8D
CMP R11,0x7
SETZ R8B
ADD RAX,0x4
ADD R8,RSI
CMP R10,RAX
JNZ 0x0017a40d
MOV qword ptr [R9],R10
XOR EAX,EAX
ADD RSP,0x8
RET
AND ECX,0x7f
LEA R10,[RCX + -0x1]
CMP R10,0x1
JA 0x0017a4d7
MOVZX R8D,byte ptr [RDI + 0x2]
TEST R10,R10
JZ 0x0017a502
MOVZX EAX,byte ptr [RDI + 0x3]
SHL R8,0x8
OR R8,RAX
LEA R11,[RCX + 0x2]
JMP 0x0017a32c
MOV qword ptr [R9],R10
MOV EAX,0x6
JMP 0x0017a4d7
MOVZX R8D,byte ptr [RDI + R8*0x1]
MOV EAX,0x2
SAR R8D,0x6
AND R8D,0x1
MOV byte ptr [RDX + 0x1],R8B
LEA R8,[R11 + 0x1]
JMP 0x0017a3a5
MOV EAX,0x7
JMP 0x0017a4d7
MOV EDX,0x22
LEA RSI,[0x1d2208]
LEA RDI,[0x1bd93a]
CALL 0x00114270
MOV EDX,0x21
LEA RSI,[0x1d2208]
LEA RDI,[0x1b77e1]
CALL 0x00114270
MOV EDX,0x20
LEA RSI,[0x1d2208]
LEA RDI,[0x1b77d0]
CALL 0x00114270
(translation_unit "undefined8 der_decode_bit_string(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)\n\n{\n  byte bVar1;\n  ulong uVar2;\n  uint uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  bool bVar7;\n  \n  if (param_1 == (byte *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }\n  if (param_3 == (undefined1 *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }\n  if (param_4 == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }\n  if (param_2 < 4) {\n    return 0x10;\n  }\n  if ((*param_1 & 0x1f) != 3) {\n    return 7;\n  }\n  bVar1 = param_1[1];\n  uVar5 = (ulong)bVar1;\n  lVar6 = 2;\n  if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }\n  if (uVar5 == 0) {\n    return 7;\n  }\n  if (param_2 < uVar5 + lVar6) {\n    return 7;\n  }\n  uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);\n  if (*param_4 < uVar5) {\n    *param_4 = uVar5;\n    return 6;\n  }\n  if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }\nLAB_0017a4d2:\n  *param_4 = uVar5;\n  return 0;\n}\n\n" (function_definition "undefined8 der_decode_bit_string(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)\n\n{\n  byte bVar1;\n  ulong uVar2;\n  uint uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  bool bVar7;\n  \n  if (param_1 == (byte *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }\n  if (param_3 == (undefined1 *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }\n  if (param_4 == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }\n  if (param_2 < 4) {\n    return 0x10;\n  }\n  if ((*param_1 & 0x1f) != 3) {\n    return 7;\n  }\n  bVar1 = param_1[1];\n  uVar5 = (ulong)bVar1;\n  lVar6 = 2;\n  if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }\n  if (uVar5 == 0) {\n    return 7;\n  }\n  if (param_2 < uVar5 + lVar6) {\n    return 7;\n  }\n  uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);\n  if (*param_4 < uVar5) {\n    *param_4 = uVar5;\n    return 6;\n  }\n  if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }\nLAB_0017a4d2:\n  *param_4 = uVar5;\n  return 0;\n}" type_identifier (function_declarator "der_decode_bit_string(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)" identifier (parameter_list "(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "undefined1 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "ulong *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  ulong uVar2;\n  uint uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  bool bVar7;\n  \n  if (param_1 == (byte *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }\n  if (param_3 == (undefined1 *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }\n  if (param_4 == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }\n  if (param_2 < 4) {\n    return 0x10;\n  }\n  if ((*param_1 & 0x1f) != 3) {\n    return 7;\n  }\n  bVar1 = param_1[1];\n  uVar5 = (ulong)bVar1;\n  lVar6 = 2;\n  if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }\n  if (uVar5 == 0) {\n    return 7;\n  }\n  if (param_2 < uVar5 + lVar6) {\n    return 7;\n  }\n  uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);\n  if (*param_4 < uVar5) {\n    *param_4 = uVar5;\n    return 6;\n  }\n  if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }\nLAB_0017a4d2:\n  *param_4 = uVar5;\n  return 0;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "bool bVar7;" primitive_type identifier ;) (if_statement "if (param_1 == (byte *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }" if (parenthesized_expression "(param_1 == (byte *)0x0)" ( (binary_expression "param_1 == (byte *)0x0" identifier == (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }" { comment (expression_statement "crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);" (call_expression "crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20)" identifier (argument_list "("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20)" ( (string_literal ""in != NULL"" " string_content ") , (string_literal ""src/pk/asn1/der/bit/der_decode_bit_string.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_3 == (undefined1 *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }" if (parenthesized_expression "(param_3 == (undefined1 *)0x0)" ( (binary_expression "param_3 == (undefined1 *)0x0" identifier == (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }" { comment (expression_statement "crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);" (call_expression "crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21)" identifier (argument_list "("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21)" ( (string_literal ""out != NULL"" " string_content ") , (string_literal ""src/pk/asn1/der/bit/der_decode_bit_string.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_4 == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }" if (parenthesized_expression "(param_4 == (ulong *)0x0)" ( (binary_expression "param_4 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }" { comment (expression_statement "crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);" (call_expression "crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22)" identifier (argument_list "("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22)" ( (string_literal ""outlen != NULL"" " string_content ") , (string_literal ""src/pk/asn1/der/bit/der_decode_bit_string.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_2 < 4) {\n    return 0x10;\n  }" if (parenthesized_expression "(param_2 < 4)" ( (binary_expression "param_2 < 4" identifier < number_literal) )) (compound_statement "{\n    return 0x10;\n  }" { (return_statement "return 0x10;" return number_literal ;) })) (if_statement "if ((*param_1 & 0x1f) != 3) {\n    return 7;\n  }" if (parenthesized_expression "((*param_1 & 0x1f) != 3)" ( (binary_expression "(*param_1 & 0x1f) != 3" (parenthesized_expression "(*param_1 & 0x1f)" ( (binary_expression "*param_1 & 0x1f" (pointer_expression "*param_1" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n    return 7;\n  }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "bVar1 = param_1[1];" (assignment_expression "bVar1 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "uVar5 = (ulong)bVar1;" (assignment_expression "uVar5 = (ulong)bVar1" identifier = (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "lVar6 = 2;" (assignment_expression "lVar6 = 2" identifier = number_literal) ;) (if_statement "if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }" { (expression_statement "uVar2 = (ulong)(bVar1 & 0x7f);" (assignment_expression "uVar2 = (ulong)(bVar1 & 0x7f)" identifier = (call_expression "(ulong)(bVar1 & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )))) ;) (if_statement "if (1 < uVar2 - 1) {\n      return 7;\n    }" if (parenthesized_expression "(1 < uVar2 - 1)" ( (binary_expression "1 < uVar2 - 1" number_literal < (binary_expression "uVar2 - 1" identifier - number_literal)) )) (compound_statement "{\n      return 7;\n    }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "uVar5 = (ulong)param_1[2];" (assignment_expression "uVar5 = (ulong)param_1[2]" identifier = (cast_expression "(ulong)param_1[2]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (if_statement "if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }" if (parenthesized_expression "(uVar2 != 1)" ( (binary_expression "uVar2 != 1" identifier != number_literal) )) (compound_statement "{\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }" { (expression_statement "uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);" (assignment_expression "uVar5 = (ulong)CONCAT11(param_1[2],param_1[3])" identifier = (cast_expression "(ulong)CONCAT11(param_1[2],param_1[3])" ( (type_descriptor "ulong" type_identifier) ) (call_expression "CONCAT11(param_1[2],param_1[3])" identifier (argument_list "(param_1[2],param_1[3])" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (subscript_expression "param_1[3]" identifier [ number_literal ]) ))))) ;) })) (expression_statement "lVar6 = uVar2 + 2;" (assignment_expression "lVar6 = uVar2 + 2" identifier = (binary_expression "uVar2 + 2" identifier + number_literal)) ;) })) (if_statement "if (uVar5 == 0) {\n    return 7;\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    return 7;\n  }" { (return_statement "return 7;" return number_literal ;) })) (if_statement "if (param_2 < uVar5 + lVar6) {\n    return 7;\n  }" if (parenthesized_expression "(param_2 < uVar5 + lVar6)" ( (binary_expression "param_2 < uVar5 + lVar6" identifier < (binary_expression "uVar5 + lVar6" identifier + identifier)) )) (compound_statement "{\n    return 7;\n  }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);" (assignment_expression "uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7)" identifier = (binary_expression "(uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7)" (parenthesized_expression "(uVar5 * 8 + -8)" ( (binary_expression "uVar5 * 8 + -8" (binary_expression "uVar5 * 8" identifier * number_literal) + number_literal) )) - (call_expression "(ulong)(param_1[lVar6] & 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[lVar6] & 7)" ( (binary_expression "param_1[lVar6] & 7" (subscript_expression "param_1[lVar6]" identifier [ identifier ]) & number_literal) ))))) ;) (if_statement "if (*param_4 < uVar5) {\n    *param_4 = uVar5;\n    return 6;\n  }" if (parenthesized_expression "(*param_4 < uVar5)" ( (binary_expression "*param_4 < uVar5" (pointer_expression "*param_4" * identifier) < identifier) )) (compound_statement "{\n    *param_4 = uVar5;\n    return 6;\n  }" { (expression_statement "*param_4 = uVar5;" (assignment_expression "*param_4 = uVar5" (pointer_expression "*param_4" * identifier) = identifier) ;) (return_statement "return 6;" return number_literal ;) })) (if_statement "if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }" { (expression_statement "lVar4 = lVar6 + 1;" (assignment_expression "lVar4 = lVar6 + 1" identifier = (binary_expression "lVar6 + 1" identifier + number_literal)) ;) (expression_statement "*param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);" (assignment_expression "*param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7)" (pointer_expression "*param_3" * identifier) = (cast_expression "(char)((int)(uint)param_1[lVar6 + 1] >> 7)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((int)(uint)param_1[lVar6 + 1] >> 7)" ( (binary_expression "(int)(uint)param_1[lVar6 + 1] >> 7" (cast_expression "(int)(uint)param_1[lVar6 + 1]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6 + 1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6 + 1]" identifier [ (binary_expression "lVar6 + 1" identifier + number_literal) ]))) >> number_literal) )))) ;) (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" identifier = number_literal) ;) (if_statement "if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }" if (parenthesized_expression "(1 < uVar5)" ( (binary_expression "1 < uVar5" number_literal < identifier) )) (compound_statement "{\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }" { (expression_statement "uVar3 = (int)uVar5 - 1U & 3;" (assignment_expression "uVar3 = (int)uVar5 - 1U & 3" identifier = (binary_expression "(int)uVar5 - 1U & 3" (binary_expression "(int)uVar5 - 1U" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal) & number_literal)) ;) (if_statement "if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }" { (if_statement "if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }" if (parenthesized_expression "(uVar3 != 1)" ( (binary_expression "uVar3 != 1" identifier != number_literal) )) (compound_statement "{\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }" { (if_statement "if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }" if (parenthesized_expression "(uVar3 != 2)" ( (binary_expression "uVar3 != 2" identifier != number_literal) )) (compound_statement "{\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }" { (expression_statement "uVar2 = 2;" (assignment_expression "uVar2 = 2" identifier = number_literal) ;) (expression_statement "param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;" (assignment_expression "param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1" (subscript_expression "param_3[1]" identifier [ number_literal ]) = (binary_expression "(byte)((int)(uint)param_1[lVar4] >> 6) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar4] >> 6)" ( (binary_expression "(int)(uint)param_1[lVar4] >> 6" (cast_expression "(int)(uint)param_1[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar4]" identifier [ identifier ]))) >> number_literal) ))) & number_literal)) ;) })) (expression_statement "bVar7 = uVar2 == 7;" (assignment_expression "bVar7 = uVar2 == 7" identifier = (binary_expression "uVar2 == 7" identifier == number_literal)) ;) (expression_statement "param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;" (assignment_expression "param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1" (subscript_expression "param_3[uVar2]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7))" ( (binary_expression "(int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)" (cast_expression "(int)(uint)param_1[lVar6 + 1]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6 + 1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6 + 1]" identifier [ (binary_expression "lVar6 + 1" identifier + number_literal) ]))) >> (parenthesized_expression "(~(byte)uVar2 & 7)" ( (binary_expression "~(byte)uVar2 & 7" (unary_expression "~(byte)uVar2" ~ (cast_expression "(byte)uVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) (expression_statement "lVar4 = lVar6 + 1 + (ulong)bVar7;" (assignment_expression "lVar4 = lVar6 + 1 + (ulong)bVar7" identifier = (binary_expression "lVar6 + 1 + (ulong)bVar7" (binary_expression "lVar6 + 1" identifier + number_literal) + (cast_expression "(ulong)bVar7" ( (type_descriptor "ulong" type_identifier) ) identifier))) ;) })) (expression_statement "bVar7 = uVar2 == 7;" (assignment_expression "bVar7 = uVar2 == 7" identifier = (binary_expression "uVar2 == 7" identifier == number_literal)) ;) (expression_statement "param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;" (assignment_expression "param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1" (subscript_expression "param_3[uVar2]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7))" ( (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)" (cast_expression "(int)(uint)param_1[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar2 & 7)" ( (binary_expression "~(byte)uVar2 & 7" (unary_expression "~(byte)uVar2" ~ (cast_expression "(byte)uVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) (expression_statement "lVar4 = lVar4 + (ulong)bVar7;" (assignment_expression "lVar4 = lVar4 + (ulong)bVar7" identifier = (binary_expression "lVar4 + (ulong)bVar7" identifier + (cast_expression "(ulong)bVar7" ( (type_descriptor "ulong" type_identifier) ) identifier))) ;) (if_statement "if (uVar5 == uVar2) goto LAB_0017a4d2;" if (parenthesized_expression "(uVar5 == uVar2)" ( (binary_expression "uVar5 == uVar2" identifier == identifier) )) (goto_statement "goto LAB_0017a4d2;" goto statement_identifier ;)) })) (do_statement "do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);" do (compound_statement "{\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      }" { (expression_statement "uVar3 = (uint)uVar2;" (assignment_expression "uVar3 = (uint)uVar2" identifier = (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;" (assignment_expression "param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1" (subscript_expression "param_3[uVar2]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7))" ( (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)" (cast_expression "(int)(uint)param_1[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar2 & 7)" ( (binary_expression "~(byte)uVar2 & 7" (unary_expression "~(byte)uVar2" ~ (cast_expression "(byte)uVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;" (assignment_expression "lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4" identifier = (binary_expression "(ulong)((uVar3 & 7) == 7) + lVar4" (call_expression "(ulong)((uVar3 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar3 & 7) == 7)" ( (binary_expression "(uVar3 & 7) == 7" (parenthesized_expression "(uVar3 & 7)" ( (binary_expression "uVar3 & 7" identifier & number_literal) )) == number_literal) ))) + identifier)) ;) (expression_statement "param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;" (assignment_expression "param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1" (subscript_expression "param_3[uVar2 + 1]" identifier [ (binary_expression "uVar2 + 1" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7))" ( (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)" (cast_expression "(int)(uint)param_1[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)(uVar3 + 1) & 7)" ( (binary_expression "~(byte)(uVar3 + 1) & 7" (unary_expression "~(byte)(uVar3 + 1)" ~ (call_expression "(byte)(uVar3 + 1)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) )))) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);" (assignment_expression "lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7)" identifier = (binary_expression "lVar4 + (ulong)((uVar3 + 1 & 7) == 7)" identifier + (call_expression "(ulong)((uVar3 + 1 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar3 + 1 & 7) == 7)" ( (binary_expression "(uVar3 + 1 & 7) == 7" (parenthesized_expression "(uVar3 + 1 & 7)" ( (binary_expression "uVar3 + 1 & 7" (binary_expression "uVar3 + 1" identifier + number_literal) & number_literal) )) == number_literal) ))))) ;) (expression_statement "param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;" (assignment_expression "param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1" (subscript_expression "param_3[uVar2 + 2]" identifier [ (binary_expression "uVar2 + 2" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7))" ( (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)" (cast_expression "(int)(uint)param_1[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)(uVar3 + 2) & 7)" ( (binary_expression "~(byte)(uVar3 + 2) & 7" (unary_expression "~(byte)(uVar3 + 2)" ~ (call_expression "(byte)(uVar3 + 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar3 + 2)" ( (binary_expression "uVar3 + 2" identifier + number_literal) )))) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);" (assignment_expression "lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7)" identifier = (binary_expression "lVar4 + (ulong)((uVar3 + 2 & 7) == 7)" identifier + (call_expression "(ulong)((uVar3 + 2 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar3 + 2 & 7) == 7)" ( (binary_expression "(uVar3 + 2 & 7) == 7" (parenthesized_expression "(uVar3 + 2 & 7)" ( (binary_expression "uVar3 + 2 & 7" (binary_expression "uVar3 + 2" identifier + number_literal) & number_literal) )) == number_literal) ))))) ;) (expression_statement "param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;" (assignment_expression "param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1" (subscript_expression "param_3[uVar2 + 3]" identifier [ (binary_expression "uVar2 + 3" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7))" ( (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)" (cast_expression "(int)(uint)param_1[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)(uVar3 + 3) & 7)" ( (binary_expression "~(byte)(uVar3 + 3) & 7" (unary_expression "~(byte)(uVar3 + 3)" ~ (call_expression "(byte)(uVar3 + 3)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar3 + 3)" ( (binary_expression "uVar3 + 3" identifier + number_literal) )))) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar2 = uVar2 + 4;" (assignment_expression "uVar2 = uVar2 + 4" identifier = (binary_expression "uVar2 + 4" identifier + number_literal)) ;) (expression_statement "lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;" (assignment_expression "lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4" identifier = (binary_expression "(ulong)((uVar3 + 3 & 7) == 7) + lVar4" (call_expression "(ulong)((uVar3 + 3 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar3 + 3 & 7) == 7)" ( (binary_expression "(uVar3 + 3 & 7) == 7" (parenthesized_expression "(uVar3 + 3 & 7)" ( (binary_expression "uVar3 + 3 & 7" (binary_expression "uVar3 + 3" identifier + number_literal) & number_literal) )) == number_literal) ))) + identifier)) ;) }) while (parenthesized_expression "(uVar5 != uVar2)" ( (binary_expression "uVar5 != uVar2" identifier != identifier) )) ;) })) })) (labeled_statement "LAB_0017a4d2:\n  *param_4 = uVar5;" statement_identifier : (expression_statement "*param_4 = uVar5;" (assignment_expression "*param_4 = uVar5" (pointer_expression "*param_4" * identifier) = identifier) ;)) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "int der_decode_bit_string(uchar *in,ulong inlen,uchar *out,ulong *outlen)\n\n{\n  byte bVar1;\n  ulong uVar2;\n  uint uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  bool bVar7;\n  \n  if (in == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }\n  if (out == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }\n  if (outlen == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }\n  if (inlen < 4) {\n    return 0x10;\n  }\n  if ((*in & 0x1f) != 3) {\n    return 7;\n  }\n  bVar1 = in[1];\n  uVar5 = (ulong)bVar1;\n  lVar6 = 2;\n  if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)in[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(in[2],in[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }\n  if (uVar5 == 0) {\n    return 7;\n  }\n  if (inlen < uVar5 + lVar6) {\n    return 7;\n  }\n  uVar5 = (uVar5 * 8 + -8) - (ulong)(in[lVar6] & 7);\n  if (*outlen < uVar5) {\n    *outlen = uVar5;\n    return 6;\n  }\n  if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *out = (uchar)((int)(uint)in[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        out[uVar2 + 1] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        out[uVar2 + 2] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        out[uVar2 + 3] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }\nLAB_0017a4d2:\n  *outlen = uVar5;\n  return 0;\n}\n\n" (function_definition "int der_decode_bit_string(uchar *in,ulong inlen,uchar *out,ulong *outlen)\n\n{\n  byte bVar1;\n  ulong uVar2;\n  uint uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  bool bVar7;\n  \n  if (in == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }\n  if (out == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }\n  if (outlen == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }\n  if (inlen < 4) {\n    return 0x10;\n  }\n  if ((*in & 0x1f) != 3) {\n    return 7;\n  }\n  bVar1 = in[1];\n  uVar5 = (ulong)bVar1;\n  lVar6 = 2;\n  if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)in[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(in[2],in[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }\n  if (uVar5 == 0) {\n    return 7;\n  }\n  if (inlen < uVar5 + lVar6) {\n    return 7;\n  }\n  uVar5 = (uVar5 * 8 + -8) - (ulong)(in[lVar6] & 7);\n  if (*outlen < uVar5) {\n    *outlen = uVar5;\n    return 6;\n  }\n  if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *out = (uchar)((int)(uint)in[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        out[uVar2 + 1] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        out[uVar2 + 2] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        out[uVar2 + 3] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }\nLAB_0017a4d2:\n  *outlen = uVar5;\n  return 0;\n}" primitive_type (function_declarator "der_decode_bit_string(uchar *in,ulong inlen,uchar *out,ulong *outlen)" identifier (parameter_list "(uchar *in,ulong inlen,uchar *out,ulong *outlen)" ( (parameter_declaration "uchar *in" type_identifier (pointer_declarator "*in" * identifier)) , (parameter_declaration "ulong inlen" type_identifier identifier) , (parameter_declaration "uchar *out" type_identifier (pointer_declarator "*out" * identifier)) , (parameter_declaration "ulong *outlen" type_identifier (pointer_declarator "*outlen" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  ulong uVar2;\n  uint uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  bool bVar7;\n  \n  if (in == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }\n  if (out == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }\n  if (outlen == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }\n  if (inlen < 4) {\n    return 0x10;\n  }\n  if ((*in & 0x1f) != 3) {\n    return 7;\n  }\n  bVar1 = in[1];\n  uVar5 = (ulong)bVar1;\n  lVar6 = 2;\n  if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)in[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(in[2],in[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }\n  if (uVar5 == 0) {\n    return 7;\n  }\n  if (inlen < uVar5 + lVar6) {\n    return 7;\n  }\n  uVar5 = (uVar5 * 8 + -8) - (ulong)(in[lVar6] & 7);\n  if (*outlen < uVar5) {\n    *outlen = uVar5;\n    return 6;\n  }\n  if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *out = (uchar)((int)(uint)in[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        out[uVar2 + 1] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        out[uVar2 + 2] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        out[uVar2 + 3] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }\nLAB_0017a4d2:\n  *outlen = uVar5;\n  return 0;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "bool bVar7;" primitive_type identifier ;) (if_statement "if (in == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }" if (parenthesized_expression "(in == (uchar *)0x0)" ( (binary_expression "in == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }" { comment (expression_statement "crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);" (call_expression "crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20)" identifier (argument_list "("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20)" ( (string_literal ""in != NULL"" " string_content ") , (string_literal ""src/pk/asn1/der/bit/der_decode_bit_string.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (out == (uchar *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }" if (parenthesized_expression "(out == (uchar *)0x0)" ( (binary_expression "out == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }" { comment (expression_statement "crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);" (call_expression "crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21)" identifier (argument_list "("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21)" ( (string_literal ""out != NULL"" " string_content ") , (string_literal ""src/pk/asn1/der/bit/der_decode_bit_string.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (outlen == (ulong *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }" if (parenthesized_expression "(outlen == (ulong *)0x0)" ( (binary_expression "outlen == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }" { comment (expression_statement "crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);" (call_expression "crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22)" identifier (argument_list "("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22)" ( (string_literal ""outlen != NULL"" " string_content ") , (string_literal ""src/pk/asn1/der/bit/der_decode_bit_string.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (inlen < 4) {\n    return 0x10;\n  }" if (parenthesized_expression "(inlen < 4)" ( (binary_expression "inlen < 4" identifier < number_literal) )) (compound_statement "{\n    return 0x10;\n  }" { (return_statement "return 0x10;" return number_literal ;) })) (if_statement "if ((*in & 0x1f) != 3) {\n    return 7;\n  }" if (parenthesized_expression "((*in & 0x1f) != 3)" ( (binary_expression "(*in & 0x1f) != 3" (parenthesized_expression "(*in & 0x1f)" ( (binary_expression "*in & 0x1f" (pointer_expression "*in" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n    return 7;\n  }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "bVar1 = in[1];" (assignment_expression "bVar1 = in[1]" identifier = (subscript_expression "in[1]" identifier [ number_literal ])) ;) (expression_statement "uVar5 = (ulong)bVar1;" (assignment_expression "uVar5 = (ulong)bVar1" identifier = (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "lVar6 = 2;" (assignment_expression "lVar6 = 2" identifier = number_literal) ;) (if_statement "if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)in[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(in[2],in[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)in[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(in[2],in[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }" { (expression_statement "uVar2 = (ulong)(bVar1 & 0x7f);" (assignment_expression "uVar2 = (ulong)(bVar1 & 0x7f)" identifier = (call_expression "(ulong)(bVar1 & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )))) ;) (if_statement "if (1 < uVar2 - 1) {\n      return 7;\n    }" if (parenthesized_expression "(1 < uVar2 - 1)" ( (binary_expression "1 < uVar2 - 1" number_literal < (binary_expression "uVar2 - 1" identifier - number_literal)) )) (compound_statement "{\n      return 7;\n    }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "uVar5 = (ulong)in[2];" (assignment_expression "uVar5 = (ulong)in[2]" identifier = (cast_expression "(ulong)in[2]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "in[2]" identifier [ number_literal ]))) ;) (if_statement "if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(in[2],in[3]);\n    }" if (parenthesized_expression "(uVar2 != 1)" ( (binary_expression "uVar2 != 1" identifier != number_literal) )) (compound_statement "{\n      uVar5 = (ulong)CONCAT11(in[2],in[3]);\n    }" { (expression_statement "uVar5 = (ulong)CONCAT11(in[2],in[3]);" (assignment_expression "uVar5 = (ulong)CONCAT11(in[2],in[3])" identifier = (cast_expression "(ulong)CONCAT11(in[2],in[3])" ( (type_descriptor "ulong" type_identifier) ) (call_expression "CONCAT11(in[2],in[3])" identifier (argument_list "(in[2],in[3])" ( (subscript_expression "in[2]" identifier [ number_literal ]) , (subscript_expression "in[3]" identifier [ number_literal ]) ))))) ;) })) (expression_statement "lVar6 = uVar2 + 2;" (assignment_expression "lVar6 = uVar2 + 2" identifier = (binary_expression "uVar2 + 2" identifier + number_literal)) ;) })) (if_statement "if (uVar5 == 0) {\n    return 7;\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    return 7;\n  }" { (return_statement "return 7;" return number_literal ;) })) (if_statement "if (inlen < uVar5 + lVar6) {\n    return 7;\n  }" if (parenthesized_expression "(inlen < uVar5 + lVar6)" ( (binary_expression "inlen < uVar5 + lVar6" identifier < (binary_expression "uVar5 + lVar6" identifier + identifier)) )) (compound_statement "{\n    return 7;\n  }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "uVar5 = (uVar5 * 8 + -8) - (ulong)(in[lVar6] & 7);" (assignment_expression "uVar5 = (uVar5 * 8 + -8) - (ulong)(in[lVar6] & 7)" identifier = (binary_expression "(uVar5 * 8 + -8) - (ulong)(in[lVar6] & 7)" (parenthesized_expression "(uVar5 * 8 + -8)" ( (binary_expression "uVar5 * 8 + -8" (binary_expression "uVar5 * 8" identifier * number_literal) + number_literal) )) - (call_expression "(ulong)(in[lVar6] & 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(in[lVar6] & 7)" ( (binary_expression "in[lVar6] & 7" (subscript_expression "in[lVar6]" identifier [ identifier ]) & number_literal) ))))) ;) (if_statement "if (*outlen < uVar5) {\n    *outlen = uVar5;\n    return 6;\n  }" if (parenthesized_expression "(*outlen < uVar5)" ( (binary_expression "*outlen < uVar5" (pointer_expression "*outlen" * identifier) < identifier) )) (compound_statement "{\n    *outlen = uVar5;\n    return 6;\n  }" { (expression_statement "*outlen = uVar5;" (assignment_expression "*outlen = uVar5" (pointer_expression "*outlen" * identifier) = identifier) ;) (return_statement "return 6;" return number_literal ;) })) (if_statement "if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *out = (uchar)((int)(uint)in[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        out[uVar2 + 1] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        out[uVar2 + 2] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        out[uVar2 + 3] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    lVar4 = lVar6 + 1;\n    *out = (uchar)((int)(uint)in[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        out[uVar2 + 1] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        out[uVar2 + 2] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        out[uVar2 + 3] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }" { (expression_statement "lVar4 = lVar6 + 1;" (assignment_expression "lVar4 = lVar6 + 1" identifier = (binary_expression "lVar6 + 1" identifier + number_literal)) ;) (expression_statement "*out = (uchar)((int)(uint)in[lVar6 + 1] >> 7);" (assignment_expression "*out = (uchar)((int)(uint)in[lVar6 + 1] >> 7)" (pointer_expression "*out" * identifier) = (call_expression "(uchar)((int)(uint)in[lVar6 + 1] >> 7)" (parenthesized_expression "(uchar)" ( identifier )) (argument_list "((int)(uint)in[lVar6 + 1] >> 7)" ( (binary_expression "(int)(uint)in[lVar6 + 1] >> 7" (cast_expression "(int)(uint)in[lVar6 + 1]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar6 + 1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar6 + 1]" identifier [ (binary_expression "lVar6 + 1" identifier + number_literal) ]))) >> number_literal) )))) ;) (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" identifier = number_literal) ;) (if_statement "if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        out[uVar2 + 1] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        out[uVar2 + 2] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        out[uVar2 + 3] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }" if (parenthesized_expression "(1 < uVar5)" ( (binary_expression "1 < uVar5" number_literal < identifier) )) (compound_statement "{\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        out[uVar2 + 1] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        out[uVar2 + 2] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        out[uVar2 + 3] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }" { (expression_statement "uVar3 = (int)uVar5 - 1U & 3;" (assignment_expression "uVar3 = (int)uVar5 - 1U & 3" identifier = (binary_expression "(int)uVar5 - 1U & 3" (binary_expression "(int)uVar5 - 1U" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal) & number_literal)) ;) (if_statement "if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }" { (if_statement "if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }" if (parenthesized_expression "(uVar3 != 1)" ( (binary_expression "uVar3 != 1" identifier != number_literal) )) (compound_statement "{\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }" { (if_statement "if (uVar3 != 2) {\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }" if (parenthesized_expression "(uVar3 != 2)" ( (binary_expression "uVar3 != 2" identifier != number_literal) )) (compound_statement "{\n            uVar2 = 2;\n            out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;\n          }" { (expression_statement "uVar2 = 2;" (assignment_expression "uVar2 = 2" identifier = number_literal) ;) (expression_statement "out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1;" (assignment_expression "out[1] = (byte)((int)(uint)in[lVar4] >> 6) & 1" (subscript_expression "out[1]" identifier [ number_literal ]) = (binary_expression "(byte)((int)(uint)in[lVar4] >> 6) & 1" (call_expression "(byte)((int)(uint)in[lVar4] >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar4] >> 6)" ( (binary_expression "(int)(uint)in[lVar4] >> 6" (cast_expression "(int)(uint)in[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar4]" identifier [ identifier ]))) >> number_literal) ))) & number_literal)) ;) })) (expression_statement "bVar7 = uVar2 == 7;" (assignment_expression "bVar7 = uVar2 == 7" identifier = (binary_expression "uVar2 == 7" identifier == number_literal)) ;) (expression_statement "out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;" (assignment_expression "out[uVar2] = (byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1" (subscript_expression "out[uVar2]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1" (call_expression "(byte)((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7))" ( (binary_expression "(int)(uint)in[lVar6 + 1] >> (~(byte)uVar2 & 7)" (cast_expression "(int)(uint)in[lVar6 + 1]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar6 + 1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar6 + 1]" identifier [ (binary_expression "lVar6 + 1" identifier + number_literal) ]))) >> (parenthesized_expression "(~(byte)uVar2 & 7)" ( (binary_expression "~(byte)uVar2 & 7" (unary_expression "~(byte)uVar2" ~ (cast_expression "(byte)uVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) (expression_statement "lVar4 = lVar6 + 1 + (ulong)bVar7;" (assignment_expression "lVar4 = lVar6 + 1 + (ulong)bVar7" identifier = (binary_expression "lVar6 + 1 + (ulong)bVar7" (binary_expression "lVar6 + 1" identifier + number_literal) + (cast_expression "(ulong)bVar7" ( (type_descriptor "ulong" type_identifier) ) identifier))) ;) })) (expression_statement "bVar7 = uVar2 == 7;" (assignment_expression "bVar7 = uVar2 == 7" identifier = (binary_expression "uVar2 == 7" identifier == number_literal)) ;) (expression_statement "out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;" (assignment_expression "out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1" (subscript_expression "out[uVar2]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1" (call_expression "(byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7))" ( (binary_expression "(int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)" (cast_expression "(int)(uint)in[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar2 & 7)" ( (binary_expression "~(byte)uVar2 & 7" (unary_expression "~(byte)uVar2" ~ (cast_expression "(byte)uVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) (expression_statement "lVar4 = lVar4 + (ulong)bVar7;" (assignment_expression "lVar4 = lVar4 + (ulong)bVar7" identifier = (binary_expression "lVar4 + (ulong)bVar7" identifier + (cast_expression "(ulong)bVar7" ( (type_descriptor "ulong" type_identifier) ) identifier))) ;) (if_statement "if (uVar5 == uVar2) goto LAB_0017a4d2;" if (parenthesized_expression "(uVar5 == uVar2)" ( (binary_expression "uVar5 == uVar2" identifier == identifier) )) (goto_statement "goto LAB_0017a4d2;" goto statement_identifier ;)) })) (do_statement "do {\n        uVar3 = (uint)uVar2;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        out[uVar2 + 1] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        out[uVar2 + 2] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        out[uVar2 + 3] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);" do (compound_statement "{\n        uVar3 = (uint)uVar2;\n        out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        out[uVar2 + 1] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        out[uVar2 + 2] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        out[uVar2 + 3] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      }" { (expression_statement "uVar3 = (uint)uVar2;" (assignment_expression "uVar3 = (uint)uVar2" identifier = (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1;" (assignment_expression "out[uVar2] = (byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1" (subscript_expression "out[uVar2]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)) & 1" (call_expression "(byte)((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar4] >> (~(byte)uVar2 & 7))" ( (binary_expression "(int)(uint)in[lVar4] >> (~(byte)uVar2 & 7)" (cast_expression "(int)(uint)in[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar2 & 7)" ( (binary_expression "~(byte)uVar2 & 7" (unary_expression "~(byte)uVar2" ~ (cast_expression "(byte)uVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;" (assignment_expression "lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4" identifier = (binary_expression "(ulong)((uVar3 & 7) == 7) + lVar4" (call_expression "(ulong)((uVar3 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar3 & 7) == 7)" ( (binary_expression "(uVar3 & 7) == 7" (parenthesized_expression "(uVar3 & 7)" ( (binary_expression "uVar3 & 7" identifier & number_literal) )) == number_literal) ))) + identifier)) ;) (expression_statement "out[uVar2 + 1] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;" (assignment_expression "out[uVar2 + 1] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1" (subscript_expression "out[uVar2 + 1]" identifier [ (binary_expression "uVar2 + 1" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1" (call_expression "(byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7))" ( (binary_expression "(int)(uint)in[lVar4] >> (~(byte)(uVar3 + 1) & 7)" (cast_expression "(int)(uint)in[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)(uVar3 + 1) & 7)" ( (binary_expression "~(byte)(uVar3 + 1) & 7" (unary_expression "~(byte)(uVar3 + 1)" ~ (call_expression "(byte)(uVar3 + 1)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) )))) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);" (assignment_expression "lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7)" identifier = (binary_expression "lVar4 + (ulong)((uVar3 + 1 & 7) == 7)" identifier + (call_expression "(ulong)((uVar3 + 1 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar3 + 1 & 7) == 7)" ( (binary_expression "(uVar3 + 1 & 7) == 7" (parenthesized_expression "(uVar3 + 1 & 7)" ( (binary_expression "uVar3 + 1 & 7" (binary_expression "uVar3 + 1" identifier + number_literal) & number_literal) )) == number_literal) ))))) ;) (expression_statement "out[uVar2 + 2] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;" (assignment_expression "out[uVar2 + 2] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1" (subscript_expression "out[uVar2 + 2]" identifier [ (binary_expression "uVar2 + 2" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1" (call_expression "(byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7))" ( (binary_expression "(int)(uint)in[lVar4] >> (~(byte)(uVar3 + 2) & 7)" (cast_expression "(int)(uint)in[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)(uVar3 + 2) & 7)" ( (binary_expression "~(byte)(uVar3 + 2) & 7" (unary_expression "~(byte)(uVar3 + 2)" ~ (call_expression "(byte)(uVar3 + 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar3 + 2)" ( (binary_expression "uVar3 + 2" identifier + number_literal) )))) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);" (assignment_expression "lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7)" identifier = (binary_expression "lVar4 + (ulong)((uVar3 + 2 & 7) == 7)" identifier + (call_expression "(ulong)((uVar3 + 2 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar3 + 2 & 7) == 7)" ( (binary_expression "(uVar3 + 2 & 7) == 7" (parenthesized_expression "(uVar3 + 2 & 7)" ( (binary_expression "uVar3 + 2 & 7" (binary_expression "uVar3 + 2" identifier + number_literal) & number_literal) )) == number_literal) ))))) ;) (expression_statement "out[uVar2 + 3] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;" (assignment_expression "out[uVar2 + 3] = (byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1" (subscript_expression "out[uVar2 + 3]" identifier [ (binary_expression "uVar2 + 3" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1" (call_expression "(byte)((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7))" ( (binary_expression "(int)(uint)in[lVar4] >> (~(byte)(uVar3 + 3) & 7)" (cast_expression "(int)(uint)in[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)(uVar3 + 3) & 7)" ( (binary_expression "~(byte)(uVar3 + 3) & 7" (unary_expression "~(byte)(uVar3 + 3)" ~ (call_expression "(byte)(uVar3 + 3)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar3 + 3)" ( (binary_expression "uVar3 + 3" identifier + number_literal) )))) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar2 = uVar2 + 4;" (assignment_expression "uVar2 = uVar2 + 4" identifier = (binary_expression "uVar2 + 4" identifier + number_literal)) ;) (expression_statement "lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;" (assignment_expression "lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4" identifier = (binary_expression "(ulong)((uVar3 + 3 & 7) == 7) + lVar4" (call_expression "(ulong)((uVar3 + 3 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar3 + 3 & 7) == 7)" ( (binary_expression "(uVar3 + 3 & 7) == 7" (parenthesized_expression "(uVar3 + 3 & 7)" ( (binary_expression "uVar3 + 3 & 7" (binary_expression "uVar3 + 3" identifier + number_literal) & number_literal) )) == number_literal) ))) + identifier)) ;) }) while (parenthesized_expression "(uVar5 != uVar2)" ( (binary_expression "uVar5 != uVar2" identifier != identifier) )) ;) })) })) (labeled_statement "LAB_0017a4d2:\n  *outlen = uVar5;" statement_identifier : (expression_statement "*outlen = uVar5;" (assignment_expression "*outlen = uVar5" (pointer_expression "*outlen" * identifier) = identifier) ;)) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "undefined8 der_decode_bit_string(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)\n\n{\n  byte bVar1;\n  ulong uVar2;\n  uint uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  bool bVar7;\n  \n  if (param_1 == (byte *)0x0) {\n                    \n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }\n  if (param_3 == (undefined1 *)0x0) {\n                    \n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }\n  if (param_4 == (ulong *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }\n  if (param_2 < 4) {\n    return 0x10;\n  }\n  if ((*param_1 & 0x1f) != 3) {\n    return 7;\n  }\n  bVar1 = param_1[1];\n  uVar5 = (ulong)bVar1;\n  lVar6 = 2;\n  if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }\n  if (uVar5 == 0) {\n    return 7;\n  }\n  if (param_2 < uVar5 + lVar6) {\n    return 7;\n  }\n  uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);\n  if (*param_4 < uVar5) {\n    *param_4 = uVar5;\n    return 6;\n  }\n  if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }\nLAB_0017a4d2:\n  *param_4 = uVar5;\n  return 0;\n}\n\n" (function_definition "undefined8 der_decode_bit_string(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)\n\n{\n  byte bVar1;\n  ulong uVar2;\n  uint uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  bool bVar7;\n  \n  if (param_1 == (byte *)0x0) {\n                    \n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }\n  if (param_3 == (undefined1 *)0x0) {\n                    \n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }\n  if (param_4 == (ulong *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }\n  if (param_2 < 4) {\n    return 0x10;\n  }\n  if ((*param_1 & 0x1f) != 3) {\n    return 7;\n  }\n  bVar1 = param_1[1];\n  uVar5 = (ulong)bVar1;\n  lVar6 = 2;\n  if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }\n  if (uVar5 == 0) {\n    return 7;\n  }\n  if (param_2 < uVar5 + lVar6) {\n    return 7;\n  }\n  uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);\n  if (*param_4 < uVar5) {\n    *param_4 = uVar5;\n    return 6;\n  }\n  if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }\nLAB_0017a4d2:\n  *param_4 = uVar5;\n  return 0;\n}" type_identifier (function_declarator "der_decode_bit_string(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)" identifier (parameter_list "(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "undefined1 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "ulong *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  ulong uVar2;\n  uint uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  bool bVar7;\n  \n  if (param_1 == (byte *)0x0) {\n                    \n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }\n  if (param_3 == (undefined1 *)0x0) {\n                    \n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }\n  if (param_4 == (ulong *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }\n  if (param_2 < 4) {\n    return 0x10;\n  }\n  if ((*param_1 & 0x1f) != 3) {\n    return 7;\n  }\n  bVar1 = param_1[1];\n  uVar5 = (ulong)bVar1;\n  lVar6 = 2;\n  if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }\n  if (uVar5 == 0) {\n    return 7;\n  }\n  if (param_2 < uVar5 + lVar6) {\n    return 7;\n  }\n  uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);\n  if (*param_4 < uVar5) {\n    *param_4 = uVar5;\n    return 6;\n  }\n  if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }\nLAB_0017a4d2:\n  *param_4 = uVar5;\n  return 0;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "bool bVar7;" primitive_type identifier ;) (if_statement "if (param_1 == (byte *)0x0) {\n                    \n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }" if (parenthesized_expression "(param_1 == (byte *)0x0)" ( (binary_expression "param_1 == (byte *)0x0" identifier == (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }" { (expression_statement "crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);" (call_expression "crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20)" identifier (argument_list "("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20)" ( (string_literal ""in != NULL"" " string_content ") , (string_literal ""src/pk/asn1/der/bit/der_decode_bit_string.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_3 == (undefined1 *)0x0) {\n                    \n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }" if (parenthesized_expression "(param_3 == (undefined1 *)0x0)" ( (binary_expression "param_3 == (undefined1 *)0x0" identifier == (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }" { (expression_statement "crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);" (call_expression "crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21)" identifier (argument_list "("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21)" ( (string_literal ""out != NULL"" " string_content ") , (string_literal ""src/pk/asn1/der/bit/der_decode_bit_string.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_4 == (ulong *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }" if (parenthesized_expression "(param_4 == (ulong *)0x0)" ( (binary_expression "param_4 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }" { (expression_statement "crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);" (call_expression "crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22)" identifier (argument_list "("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22)" ( (string_literal ""outlen != NULL"" " string_content ") , (string_literal ""src/pk/asn1/der/bit/der_decode_bit_string.c"" " string_content ") , number_literal ))) ;) })) (if_statement "if (param_2 < 4) {\n    return 0x10;\n  }" if (parenthesized_expression "(param_2 < 4)" ( (binary_expression "param_2 < 4" identifier < number_literal) )) (compound_statement "{\n    return 0x10;\n  }" { (return_statement "return 0x10;" return number_literal ;) })) (if_statement "if ((*param_1 & 0x1f) != 3) {\n    return 7;\n  }" if (parenthesized_expression "((*param_1 & 0x1f) != 3)" ( (binary_expression "(*param_1 & 0x1f) != 3" (parenthesized_expression "(*param_1 & 0x1f)" ( (binary_expression "*param_1 & 0x1f" (pointer_expression "*param_1" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n    return 7;\n  }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "bVar1 = param_1[1];" (assignment_expression "bVar1 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "uVar5 = (ulong)bVar1;" (assignment_expression "uVar5 = (ulong)bVar1" identifier = (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "lVar6 = 2;" (assignment_expression "lVar6 = 2" identifier = number_literal) ;) (if_statement "if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }" { (expression_statement "uVar2 = (ulong)(bVar1 & 0x7f);" (assignment_expression "uVar2 = (ulong)(bVar1 & 0x7f)" identifier = (call_expression "(ulong)(bVar1 & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar1 & 0x7f)" ( (binary_expression "bVar1 & 0x7f" identifier & number_literal) )))) ;) (if_statement "if (1 < uVar2 - 1) {\n      return 7;\n    }" if (parenthesized_expression "(1 < uVar2 - 1)" ( (binary_expression "1 < uVar2 - 1" number_literal < (binary_expression "uVar2 - 1" identifier - number_literal)) )) (compound_statement "{\n      return 7;\n    }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "uVar5 = (ulong)param_1[2];" (assignment_expression "uVar5 = (ulong)param_1[2]" identifier = (cast_expression "(ulong)param_1[2]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (if_statement "if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }" if (parenthesized_expression "(uVar2 != 1)" ( (binary_expression "uVar2 != 1" identifier != number_literal) )) (compound_statement "{\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }" { (expression_statement "uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);" (assignment_expression "uVar5 = (ulong)CONCAT11(param_1[2],param_1[3])" identifier = (cast_expression "(ulong)CONCAT11(param_1[2],param_1[3])" ( (type_descriptor "ulong" type_identifier) ) (call_expression "CONCAT11(param_1[2],param_1[3])" identifier (argument_list "(param_1[2],param_1[3])" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (subscript_expression "param_1[3]" identifier [ number_literal ]) ))))) ;) })) (expression_statement "lVar6 = uVar2 + 2;" (assignment_expression "lVar6 = uVar2 + 2" identifier = (binary_expression "uVar2 + 2" identifier + number_literal)) ;) })) (if_statement "if (uVar5 == 0) {\n    return 7;\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    return 7;\n  }" { (return_statement "return 7;" return number_literal ;) })) (if_statement "if (param_2 < uVar5 + lVar6) {\n    return 7;\n  }" if (parenthesized_expression "(param_2 < uVar5 + lVar6)" ( (binary_expression "param_2 < uVar5 + lVar6" identifier < (binary_expression "uVar5 + lVar6" identifier + identifier)) )) (compound_statement "{\n    return 7;\n  }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);" (assignment_expression "uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7)" identifier = (binary_expression "(uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7)" (parenthesized_expression "(uVar5 * 8 + -8)" ( (binary_expression "uVar5 * 8 + -8" (binary_expression "uVar5 * 8" identifier * number_literal) + number_literal) )) - (call_expression "(ulong)(param_1[lVar6] & 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[lVar6] & 7)" ( (binary_expression "param_1[lVar6] & 7" (subscript_expression "param_1[lVar6]" identifier [ identifier ]) & number_literal) ))))) ;) (if_statement "if (*param_4 < uVar5) {\n    *param_4 = uVar5;\n    return 6;\n  }" if (parenthesized_expression "(*param_4 < uVar5)" ( (binary_expression "*param_4 < uVar5" (pointer_expression "*param_4" * identifier) < identifier) )) (compound_statement "{\n    *param_4 = uVar5;\n    return 6;\n  }" { (expression_statement "*param_4 = uVar5;" (assignment_expression "*param_4 = uVar5" (pointer_expression "*param_4" * identifier) = identifier) ;) (return_statement "return 6;" return number_literal ;) })) (if_statement "if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }" { (expression_statement "lVar4 = lVar6 + 1;" (assignment_expression "lVar4 = lVar6 + 1" identifier = (binary_expression "lVar6 + 1" identifier + number_literal)) ;) (expression_statement "*param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);" (assignment_expression "*param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7)" (pointer_expression "*param_3" * identifier) = (cast_expression "(char)((int)(uint)param_1[lVar6 + 1] >> 7)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((int)(uint)param_1[lVar6 + 1] >> 7)" ( (binary_expression "(int)(uint)param_1[lVar6 + 1] >> 7" (cast_expression "(int)(uint)param_1[lVar6 + 1]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6 + 1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6 + 1]" identifier [ (binary_expression "lVar6 + 1" identifier + number_literal) ]))) >> number_literal) )))) ;) (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" identifier = number_literal) ;) (if_statement "if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }" if (parenthesized_expression "(1 < uVar5)" ( (binary_expression "1 < uVar5" number_literal < identifier) )) (compound_statement "{\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }" { (expression_statement "uVar3 = (int)uVar5 - 1U & 3;" (assignment_expression "uVar3 = (int)uVar5 - 1U & 3" identifier = (binary_expression "(int)uVar5 - 1U & 3" (binary_expression "(int)uVar5 - 1U" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal) & number_literal)) ;) (if_statement "if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }" { (if_statement "if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }" if (parenthesized_expression "(uVar3 != 1)" ( (binary_expression "uVar3 != 1" identifier != number_literal) )) (compound_statement "{\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }" { (if_statement "if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }" if (parenthesized_expression "(uVar3 != 2)" ( (binary_expression "uVar3 != 2" identifier != number_literal) )) (compound_statement "{\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }" { (expression_statement "uVar2 = 2;" (assignment_expression "uVar2 = 2" identifier = number_literal) ;) (expression_statement "param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;" (assignment_expression "param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1" (subscript_expression "param_3[1]" identifier [ number_literal ]) = (binary_expression "(byte)((int)(uint)param_1[lVar4] >> 6) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar4] >> 6)" ( (binary_expression "(int)(uint)param_1[lVar4] >> 6" (cast_expression "(int)(uint)param_1[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar4]" identifier [ identifier ]))) >> number_literal) ))) & number_literal)) ;) })) (expression_statement "bVar7 = uVar2 == 7;" (assignment_expression "bVar7 = uVar2 == 7" identifier = (binary_expression "uVar2 == 7" identifier == number_literal)) ;) (expression_statement "param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;" (assignment_expression "param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1" (subscript_expression "param_3[uVar2]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7))" ( (binary_expression "(int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)" (cast_expression "(int)(uint)param_1[lVar6 + 1]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6 + 1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6 + 1]" identifier [ (binary_expression "lVar6 + 1" identifier + number_literal) ]))) >> (parenthesized_expression "(~(byte)uVar2 & 7)" ( (binary_expression "~(byte)uVar2 & 7" (unary_expression "~(byte)uVar2" ~ (cast_expression "(byte)uVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) (expression_statement "lVar4 = lVar6 + 1 + (ulong)bVar7;" (assignment_expression "lVar4 = lVar6 + 1 + (ulong)bVar7" identifier = (binary_expression "lVar6 + 1 + (ulong)bVar7" (binary_expression "lVar6 + 1" identifier + number_literal) + (cast_expression "(ulong)bVar7" ( (type_descriptor "ulong" type_identifier) ) identifier))) ;) })) (expression_statement "bVar7 = uVar2 == 7;" (assignment_expression "bVar7 = uVar2 == 7" identifier = (binary_expression "uVar2 == 7" identifier == number_literal)) ;) (expression_statement "param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;" (assignment_expression "param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1" (subscript_expression "param_3[uVar2]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7))" ( (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)" (cast_expression "(int)(uint)param_1[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar2 & 7)" ( (binary_expression "~(byte)uVar2 & 7" (unary_expression "~(byte)uVar2" ~ (cast_expression "(byte)uVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) (expression_statement "lVar4 = lVar4 + (ulong)bVar7;" (assignment_expression "lVar4 = lVar4 + (ulong)bVar7" identifier = (binary_expression "lVar4 + (ulong)bVar7" identifier + (cast_expression "(ulong)bVar7" ( (type_descriptor "ulong" type_identifier) ) identifier))) ;) (if_statement "if (uVar5 == uVar2) goto LAB_0017a4d2;" if (parenthesized_expression "(uVar5 == uVar2)" ( (binary_expression "uVar5 == uVar2" identifier == identifier) )) (goto_statement "goto LAB_0017a4d2;" goto statement_identifier ;)) })) (do_statement "do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);" do (compound_statement "{\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      }" { (expression_statement "uVar3 = (uint)uVar2;" (assignment_expression "uVar3 = (uint)uVar2" identifier = (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;" (assignment_expression "param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1" (subscript_expression "param_3[uVar2]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7))" ( (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)" (cast_expression "(int)(uint)param_1[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar2 & 7)" ( (binary_expression "~(byte)uVar2 & 7" (unary_expression "~(byte)uVar2" ~ (cast_expression "(byte)uVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;" (assignment_expression "lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4" identifier = (binary_expression "(ulong)((uVar3 & 7) == 7) + lVar4" (call_expression "(ulong)((uVar3 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar3 & 7) == 7)" ( (binary_expression "(uVar3 & 7) == 7" (parenthesized_expression "(uVar3 & 7)" ( (binary_expression "uVar3 & 7" identifier & number_literal) )) == number_literal) ))) + identifier)) ;) (expression_statement "param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;" (assignment_expression "param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1" (subscript_expression "param_3[uVar2 + 1]" identifier [ (binary_expression "uVar2 + 1" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7))" ( (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)" (cast_expression "(int)(uint)param_1[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)(uVar3 + 1) & 7)" ( (binary_expression "~(byte)(uVar3 + 1) & 7" (unary_expression "~(byte)(uVar3 + 1)" ~ (call_expression "(byte)(uVar3 + 1)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) )))) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);" (assignment_expression "lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7)" identifier = (binary_expression "lVar4 + (ulong)((uVar3 + 1 & 7) == 7)" identifier + (call_expression "(ulong)((uVar3 + 1 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar3 + 1 & 7) == 7)" ( (binary_expression "(uVar3 + 1 & 7) == 7" (parenthesized_expression "(uVar3 + 1 & 7)" ( (binary_expression "uVar3 + 1 & 7" (binary_expression "uVar3 + 1" identifier + number_literal) & number_literal) )) == number_literal) ))))) ;) (expression_statement "param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;" (assignment_expression "param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1" (subscript_expression "param_3[uVar2 + 2]" identifier [ (binary_expression "uVar2 + 2" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7))" ( (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)" (cast_expression "(int)(uint)param_1[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)(uVar3 + 2) & 7)" ( (binary_expression "~(byte)(uVar3 + 2) & 7" (unary_expression "~(byte)(uVar3 + 2)" ~ (call_expression "(byte)(uVar3 + 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar3 + 2)" ( (binary_expression "uVar3 + 2" identifier + number_literal) )))) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);" (assignment_expression "lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7)" identifier = (binary_expression "lVar4 + (ulong)((uVar3 + 2 & 7) == 7)" identifier + (call_expression "(ulong)((uVar3 + 2 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar3 + 2 & 7) == 7)" ( (binary_expression "(uVar3 + 2 & 7) == 7" (parenthesized_expression "(uVar3 + 2 & 7)" ( (binary_expression "uVar3 + 2 & 7" (binary_expression "uVar3 + 2" identifier + number_literal) & number_literal) )) == number_literal) ))))) ;) (expression_statement "param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;" (assignment_expression "param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1" (subscript_expression "param_3[uVar2 + 3]" identifier [ (binary_expression "uVar2 + 3" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7))" ( (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)" (cast_expression "(int)(uint)param_1[lVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar4]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar4]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)(uVar3 + 3) & 7)" ( (binary_expression "~(byte)(uVar3 + 3) & 7" (unary_expression "~(byte)(uVar3 + 3)" ~ (call_expression "(byte)(uVar3 + 3)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(uVar3 + 3)" ( (binary_expression "uVar3 + 3" identifier + number_literal) )))) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar2 = uVar2 + 4;" (assignment_expression "uVar2 = uVar2 + 4" identifier = (binary_expression "uVar2 + 4" identifier + number_literal)) ;) (expression_statement "lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;" (assignment_expression "lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4" identifier = (binary_expression "(ulong)((uVar3 + 3 & 7) == 7) + lVar4" (call_expression "(ulong)((uVar3 + 3 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar3 + 3 & 7) == 7)" ( (binary_expression "(uVar3 + 3 & 7) == 7" (parenthesized_expression "(uVar3 + 3 & 7)" ( (binary_expression "uVar3 + 3 & 7" (binary_expression "uVar3 + 3" identifier + number_literal) & number_literal) )) == number_literal) ))) + identifier)) ;) }) while (parenthesized_expression "(uVar5 != uVar2)" ( (binary_expression "uVar5 != uVar2" identifier != identifier) )) ;) })) })) (labeled_statement "LAB_0017a4d2:\n  *param_4 = uVar5;" statement_identifier : (expression_statement "*param_4 = uVar5;" (assignment_expression "*param_4 = uVar5" (pointer_expression "*param_4" * identifier) = identifier) ;)) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) != LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT - LIT)) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + IDENT)) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) + LIT) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ IDENT ]) & LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]))) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - LIT) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ]))) >> LIT) ))) & LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]))) >> (parenthesized_expression ( (binary_expression (unary_expression ~ (cast_expression ( (type_descriptor TYPE) ) IDENT)) & LIT) ))) ))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ]))) >> (parenthesized_expression ( (binary_expression (unary_expression ~ (cast_expression ( (type_descriptor TYPE) ) IDENT)) & LIT) ))) ))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) })) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ]))) >> (parenthesized_expression ( (binary_expression (unary_expression ~ (cast_expression ( (type_descriptor TYPE) ) IDENT)) & LIT) ))) ))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ))) + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ]))) >> (parenthesized_expression ( (binary_expression (unary_expression ~ (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) )))) & LIT) ))) ))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) & LIT) )) == LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ]))) >> (parenthesized_expression ( (binary_expression (unary_expression ~ (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) )))) & LIT) ))) ))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) & LIT) )) == LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ]))) >> (parenthesized_expression ( (binary_expression (unary_expression ~ (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) )))) & LIT) ))) ))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) & LIT) )) == LIT) ))) + IDENT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;)) (return_statement return LIT ;) })))
(function_definition "undefined8 der_decode_bit_string(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)\n\n{\n  byte bVar1;\n  ulong uVar2;\n  uint uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  bool bVar7;\n  \n  if (param_1 == (byte *)0x0) {\n                    \n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }\n  if (param_3 == (undefined1 *)0x0) {\n                    \n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }\n  if (param_4 == (ulong *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }\n  if (param_2 < 4) {\n    return 0x10;\n  }\n  if ((*param_1 & 0x1f) != 3) {\n    return 7;\n  }\n  bVar1 = param_1[1];\n  uVar5 = (ulong)bVar1;\n  lVar6 = 2;\n  if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }\n  if (uVar5 == 0) {\n    return 7;\n  }\n  if (param_2 < uVar5 + lVar6) {\n    return 7;\n  }\n  uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);\n  if (*param_4 < uVar5) {\n    *param_4 = uVar5;\n    return 6;\n  }\n  if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }\nLAB_0017a4d2:\n  *param_4 = uVar5;\n  return 0;\n}" (type_identifier "undefined8") (function_declarator "der_decode_bit_string(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)" (identifier "der_decode_bit_string") (parameter_list "(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)" (( "(") (parameter_declaration "byte *param_1" (type_identifier "byte") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "ulong param_2" (type_identifier "ulong") (identifier "param_2")) (, ",") (parameter_declaration "undefined1 *param_3" (type_identifier "undefined1") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "ulong *param_4" (type_identifier "ulong") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  byte bVar1;\n  ulong uVar2;\n  uint uVar3;\n  long lVar4;\n  ulong uVar5;\n  long lVar6;\n  bool bVar7;\n  \n  if (param_1 == (byte *)0x0) {\n                    \n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }\n  if (param_3 == (undefined1 *)0x0) {\n                    \n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }\n  if (param_4 == (ulong *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }\n  if (param_2 < 4) {\n    return 0x10;\n  }\n  if ((*param_1 & 0x1f) != 3) {\n    return 7;\n  }\n  bVar1 = param_1[1];\n  uVar5 = (ulong)bVar1;\n  lVar6 = 2;\n  if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }\n  if (uVar5 == 0) {\n    return 7;\n  }\n  if (param_2 < uVar5 + lVar6) {\n    return 7;\n  }\n  uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);\n  if (*param_4 < uVar5) {\n    *param_4 = uVar5;\n    return 6;\n  }\n  if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }\nLAB_0017a4d2:\n  *param_4 = uVar5;\n  return 0;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "bool bVar7;" (primitive_type "bool") (identifier "bVar7") (; ";")) (if_statement "if (param_1 == (byte *)0x0) {\n                    \n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }" (if "if") (parenthesized_expression "(param_1 == (byte *)0x0)" (( "(") (binary_expression "param_1 == (byte *)0x0" (identifier "param_1") (== "==") (cast_expression "(byte *)0x0" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);\n  }" ({ "{") (expression_statement "crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);" (call_expression "crypt_argchk("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20)" (identifier "crypt_argchk") (argument_list "("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20)" (( "(") (string_literal ""in != NULL"" (" """) (string_content "in != NULL") (" """)) (, ",") (string_literal ""src/pk/asn1/der/bit/der_decode_bit_string.c"" (" """) (string_content "src/pk/asn1/der/bit/der_decode_bit_string.c") (" """)) (, ",") (number_literal "0x20") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_3 == (undefined1 *)0x0) {\n                    \n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }" (if "if") (parenthesized_expression "(param_3 == (undefined1 *)0x0)" (( "(") (binary_expression "param_3 == (undefined1 *)0x0" (identifier "param_3") (== "==") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n  }" ({ "{") (expression_statement "crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);" (call_expression "crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21)" (identifier "crypt_argchk") (argument_list "("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21)" (( "(") (string_literal ""out != NULL"" (" """) (string_content "out != NULL") (" """)) (, ",") (string_literal ""src/pk/asn1/der/bit/der_decode_bit_string.c"" (" """) (string_content "src/pk/asn1/der/bit/der_decode_bit_string.c") (" """)) (, ",") (number_literal "0x21") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_4 == (ulong *)0x0) {\n                    \n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }" (if "if") (parenthesized_expression "(param_4 == (ulong *)0x0)" (( "(") (binary_expression "param_4 == (ulong *)0x0" (identifier "param_4") (== "==") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n  }" ({ "{") (expression_statement "crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);" (call_expression "crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22)" (identifier "crypt_argchk") (argument_list "("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22)" (( "(") (string_literal ""outlen != NULL"" (" """) (string_content "outlen != NULL") (" """)) (, ",") (string_literal ""src/pk/asn1/der/bit/der_decode_bit_string.c"" (" """) (string_content "src/pk/asn1/der/bit/der_decode_bit_string.c") (" """)) (, ",") (number_literal "0x22") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_2 < 4) {\n    return 0x10;\n  }" (if "if") (parenthesized_expression "(param_2 < 4)" (( "(") (binary_expression "param_2 < 4" (identifier "param_2") (< "<") (number_literal "4")) () ")")) (compound_statement "{\n    return 0x10;\n  }" ({ "{") (return_statement "return 0x10;" (return "return") (number_literal "0x10") (; ";")) (} "}"))) (if_statement "if ((*param_1 & 0x1f) != 3) {\n    return 7;\n  }" (if "if") (parenthesized_expression "((*param_1 & 0x1f) != 3)" (( "(") (binary_expression "(*param_1 & 0x1f) != 3" (parenthesized_expression "(*param_1 & 0x1f)" (( "(") (binary_expression "*param_1 & 0x1f" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "0x1f")) () ")")) (!= "!=") (number_literal "3")) () ")")) (compound_statement "{\n    return 7;\n  }" ({ "{") (return_statement "return 7;" (return "return") (number_literal "7") (; ";")) (} "}"))) (expression_statement "bVar1 = param_1[1];" (assignment_expression "bVar1 = param_1[1]" (identifier "bVar1") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar5 = (ulong)bVar1;" (assignment_expression "uVar5 = (ulong)bVar1" (identifier "uVar5") (= "=") (cast_expression "(ulong)bVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar1"))) (; ";")) (expression_statement "lVar6 = 2;" (assignment_expression "lVar6 = 2" (identifier "lVar6") (= "=") (number_literal "2")) (; ";")) (if_statement "if ((char)bVar1 < '\0') {\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }" (if "if") (parenthesized_expression "((char)bVar1 < '\0')" (( "(") (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar1")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    uVar2 = (ulong)(bVar1 & 0x7f);\n    if (1 < uVar2 - 1) {\n      return 7;\n    }\n    uVar5 = (ulong)param_1[2];\n    if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }\n    lVar6 = uVar2 + 2;\n  }" ({ "{") (expression_statement "uVar2 = (ulong)(bVar1 & 0x7f);" (assignment_expression "uVar2 = (ulong)(bVar1 & 0x7f)" (identifier "uVar2") (= "=") (call_expression "(ulong)(bVar1 & 0x7f)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(bVar1 & 0x7f)" (( "(") (binary_expression "bVar1 & 0x7f" (identifier "bVar1") (& "&") (number_literal "0x7f")) () ")")))) (; ";")) (if_statement "if (1 < uVar2 - 1) {\n      return 7;\n    }" (if "if") (parenthesized_expression "(1 < uVar2 - 1)" (( "(") (binary_expression "1 < uVar2 - 1" (number_literal "1") (< "<") (binary_expression "uVar2 - 1" (identifier "uVar2") (- "-") (number_literal "1"))) () ")")) (compound_statement "{\n      return 7;\n    }" ({ "{") (return_statement "return 7;" (return "return") (number_literal "7") (; ";")) (} "}"))) (expression_statement "uVar5 = (ulong)param_1[2];" (assignment_expression "uVar5 = (ulong)param_1[2]" (identifier "uVar5") (= "=") (cast_expression "(ulong)param_1[2]" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (if_statement "if (uVar2 != 1) {\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }" (if "if") (parenthesized_expression "(uVar2 != 1)" (( "(") (binary_expression "uVar2 != 1" (identifier "uVar2") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);\n    }" ({ "{") (expression_statement "uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);" (assignment_expression "uVar5 = (ulong)CONCAT11(param_1[2],param_1[3])" (identifier "uVar5") (= "=") (cast_expression "(ulong)CONCAT11(param_1[2],param_1[3])" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (call_expression "CONCAT11(param_1[2],param_1[3])" (identifier "CONCAT11") (argument_list "(param_1[2],param_1[3])" (( "(") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (, ",") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) () ")"))))) (; ";")) (} "}"))) (expression_statement "lVar6 = uVar2 + 2;" (assignment_expression "lVar6 = uVar2 + 2" (identifier "lVar6") (= "=") (binary_expression "uVar2 + 2" (identifier "uVar2") (+ "+") (number_literal "2"))) (; ";")) (} "}"))) (if_statement "if (uVar5 == 0) {\n    return 7;\n  }" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 7;\n  }" ({ "{") (return_statement "return 7;" (return "return") (number_literal "7") (; ";")) (} "}"))) (if_statement "if (param_2 < uVar5 + lVar6) {\n    return 7;\n  }" (if "if") (parenthesized_expression "(param_2 < uVar5 + lVar6)" (( "(") (binary_expression "param_2 < uVar5 + lVar6" (identifier "param_2") (< "<") (binary_expression "uVar5 + lVar6" (identifier "uVar5") (+ "+") (identifier "lVar6"))) () ")")) (compound_statement "{\n    return 7;\n  }" ({ "{") (return_statement "return 7;" (return "return") (number_literal "7") (; ";")) (} "}"))) (expression_statement "uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);" (assignment_expression "uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7)" (identifier "uVar5") (= "=") (binary_expression "(uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7)" (parenthesized_expression "(uVar5 * 8 + -8)" (( "(") (binary_expression "uVar5 * 8 + -8" (binary_expression "uVar5 * 8" (identifier "uVar5") (* "*") (number_literal "8")) (+ "+") (number_literal "-8")) () ")")) (- "-") (call_expression "(ulong)(param_1[lVar6] & 7)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_1[lVar6] & 7)" (( "(") (binary_expression "param_1[lVar6] & 7" (subscript_expression "param_1[lVar6]" (identifier "param_1") ([ "[") (identifier "lVar6") (] "]")) (& "&") (number_literal "7")) () ")"))))) (; ";")) (if_statement "if (*param_4 < uVar5) {\n    *param_4 = uVar5;\n    return 6;\n  }" (if "if") (parenthesized_expression "(*param_4 < uVar5)" (( "(") (binary_expression "*param_4 < uVar5" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (< "<") (identifier "uVar5")) () ")")) (compound_statement "{\n    *param_4 = uVar5;\n    return 6;\n  }" ({ "{") (expression_statement "*param_4 = uVar5;" (assignment_expression "*param_4 = uVar5" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "uVar5")) (; ";")) (return_statement "return 6;" (return "return") (number_literal "6") (; ";")) (} "}"))) (if_statement "if (uVar5 != 0) {\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }" (if "if") (parenthesized_expression "(uVar5 != 0)" (( "(") (binary_expression "uVar5 != 0" (identifier "uVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    lVar4 = lVar6 + 1;\n    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);\n    uVar2 = 1;\n    if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }\n  }" ({ "{") (expression_statement "lVar4 = lVar6 + 1;" (assignment_expression "lVar4 = lVar6 + 1" (identifier "lVar4") (= "=") (binary_expression "lVar6 + 1" (identifier "lVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);" (assignment_expression "*param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7)" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (cast_expression "(char)((int)(uint)param_1[lVar6 + 1] >> 7)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((int)(uint)param_1[lVar6 + 1] >> 7)" (( "(") (binary_expression "(int)(uint)param_1[lVar6 + 1] >> 7" (cast_expression "(int)(uint)param_1[lVar6 + 1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar6 + 1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar6 + 1]" (identifier "param_1") ([ "[") (binary_expression "lVar6 + 1" (identifier "lVar6") (+ "+") (number_literal "1")) (] "]")))) (>> ">>") (number_literal "7")) () ")")))) (; ";")) (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" (identifier "uVar2") (= "=") (number_literal "1")) (; ";")) (if_statement "if (1 < uVar5) {\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }" (if "if") (parenthesized_expression "(1 < uVar5)" (( "(") (binary_expression "1 < uVar5" (number_literal "1") (< "<") (identifier "uVar5")) () ")")) (compound_statement "{\n      uVar3 = (int)uVar5 - 1U & 3;\n      if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }\n      do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);\n    }" ({ "{") (expression_statement "uVar3 = (int)uVar5 - 1U & 3;" (assignment_expression "uVar3 = (int)uVar5 - 1U & 3" (identifier "uVar3") (= "=") (binary_expression "(int)uVar5 - 1U & 3" (binary_expression "(int)uVar5 - 1U" (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5")) (- "-") (number_literal "1U")) (& "&") (number_literal "3"))) (; ";")) (if_statement "if (uVar3 != 0) {\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }" (if "if") (parenthesized_expression "(uVar3 != 0)" (( "(") (binary_expression "uVar3 != 0" (identifier "uVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }\n        bVar7 = uVar2 == 7;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        uVar2 = uVar2 + 1;\n        lVar4 = lVar4 + (ulong)bVar7;\n        if (uVar5 == uVar2) goto LAB_0017a4d2;\n      }" ({ "{") (if_statement "if (uVar3 != 1) {\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }" (if "if") (parenthesized_expression "(uVar3 != 1)" (( "(") (binary_expression "uVar3 != 1" (identifier "uVar3") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n          if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }\n          bVar7 = uVar2 == 7;\n          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;\n          uVar2 = uVar2 + 1;\n          lVar4 = lVar6 + 1 + (ulong)bVar7;\n        }" ({ "{") (if_statement "if (uVar3 != 2) {\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }" (if "if") (parenthesized_expression "(uVar3 != 2)" (( "(") (binary_expression "uVar3 != 2" (identifier "uVar3") (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n            uVar2 = 2;\n            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;\n          }" ({ "{") (expression_statement "uVar2 = 2;" (assignment_expression "uVar2 = 2" (identifier "uVar2") (= "=") (number_literal "2")) (; ";")) (expression_statement "param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;" (assignment_expression "param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1" (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar4] >> 6) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> 6)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar4] >> 6)" (( "(") (binary_expression "(int)(uint)param_1[lVar4] >> 6" (cast_expression "(int)(uint)param_1[lVar4]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar4]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar4]" (identifier "param_1") ([ "[") (identifier "lVar4") (] "]")))) (>> ">>") (number_literal "6")) () ")"))) (& "&") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "bVar7 = uVar2 == 7;" (assignment_expression "bVar7 = uVar2 == 7" (identifier "bVar7") (= "=") (binary_expression "uVar2 == 7" (identifier "uVar2") (== "==") (number_literal "7"))) (; ";")) (expression_statement "param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;" (assignment_expression "param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1" (subscript_expression "param_3[uVar2]" (identifier "param_3") ([ "[") (identifier "uVar2") (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7))" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7))" (( "(") (binary_expression "(int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)" (cast_expression "(int)(uint)param_1[lVar6 + 1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar6 + 1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar6 + 1]" (identifier "param_1") ([ "[") (binary_expression "lVar6 + 1" (identifier "lVar6") (+ "+") (number_literal "1")) (] "]")))) (>> ">>") (parenthesized_expression "(~(byte)uVar2 & 7)" (( "(") (binary_expression "~(byte)uVar2 & 7" (unary_expression "~(byte)uVar2" (~ "~") (cast_expression "(byte)uVar2" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar2"))) (& "&") (number_literal "7")) () ")"))) () ")"))) (& "&") (number_literal "1"))) (; ";")) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" (identifier "uVar2") (= "=") (binary_expression "uVar2 + 1" (identifier "uVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "lVar4 = lVar6 + 1 + (ulong)bVar7;" (assignment_expression "lVar4 = lVar6 + 1 + (ulong)bVar7" (identifier "lVar4") (= "=") (binary_expression "lVar6 + 1 + (ulong)bVar7" (binary_expression "lVar6 + 1" (identifier "lVar6") (+ "+") (number_literal "1")) (+ "+") (cast_expression "(ulong)bVar7" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar7")))) (; ";")) (} "}"))) (expression_statement "bVar7 = uVar2 == 7;" (assignment_expression "bVar7 = uVar2 == 7" (identifier "bVar7") (= "=") (binary_expression "uVar2 == 7" (identifier "uVar2") (== "==") (number_literal "7"))) (; ";")) (expression_statement "param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;" (assignment_expression "param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1" (subscript_expression "param_3[uVar2]" (identifier "param_3") ([ "[") (identifier "uVar2") (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7))" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7))" (( "(") (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)" (cast_expression "(int)(uint)param_1[lVar4]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar4]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar4]" (identifier "param_1") ([ "[") (identifier "lVar4") (] "]")))) (>> ">>") (parenthesized_expression "(~(byte)uVar2 & 7)" (( "(") (binary_expression "~(byte)uVar2 & 7" (unary_expression "~(byte)uVar2" (~ "~") (cast_expression "(byte)uVar2" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar2"))) (& "&") (number_literal "7")) () ")"))) () ")"))) (& "&") (number_literal "1"))) (; ";")) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" (identifier "uVar2") (= "=") (binary_expression "uVar2 + 1" (identifier "uVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "lVar4 = lVar4 + (ulong)bVar7;" (assignment_expression "lVar4 = lVar4 + (ulong)bVar7" (identifier "lVar4") (= "=") (binary_expression "lVar4 + (ulong)bVar7" (identifier "lVar4") (+ "+") (cast_expression "(ulong)bVar7" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar7")))) (; ";")) (if_statement "if (uVar5 == uVar2) goto LAB_0017a4d2;" (if "if") (parenthesized_expression "(uVar5 == uVar2)" (( "(") (binary_expression "uVar5 == uVar2" (identifier "uVar5") (== "==") (identifier "uVar2")) () ")")) (goto_statement "goto LAB_0017a4d2;" (goto "goto") (statement_identifier "LAB_0017a4d2") (; ";"))) (} "}"))) (do_statement "do {\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      } while (uVar5 != uVar2);" (do "do") (compound_statement "{\n        uVar3 = (uint)uVar2;\n        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;\n        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;\n        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);\n        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;\n        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);\n        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;\n        uVar2 = uVar2 + 4;\n        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;\n      }" ({ "{") (expression_statement "uVar3 = (uint)uVar2;" (assignment_expression "uVar3 = (uint)uVar2" (identifier "uVar3") (= "=") (cast_expression "(uint)uVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar2"))) (; ";")) (expression_statement "param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;" (assignment_expression "param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1" (subscript_expression "param_3[uVar2]" (identifier "param_3") ([ "[") (identifier "uVar2") (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7))" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7))" (( "(") (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)" (cast_expression "(int)(uint)param_1[lVar4]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar4]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar4]" (identifier "param_1") ([ "[") (identifier "lVar4") (] "]")))) (>> ">>") (parenthesized_expression "(~(byte)uVar2 & 7)" (( "(") (binary_expression "~(byte)uVar2 & 7" (unary_expression "~(byte)uVar2" (~ "~") (cast_expression "(byte)uVar2" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar2"))) (& "&") (number_literal "7")) () ")"))) () ")"))) (& "&") (number_literal "1"))) (; ";")) (expression_statement "lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;" (assignment_expression "lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4" (identifier "lVar4") (= "=") (binary_expression "(ulong)((uVar3 & 7) == 7) + lVar4" (call_expression "(ulong)((uVar3 & 7) == 7)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uVar3 & 7) == 7)" (( "(") (binary_expression "(uVar3 & 7) == 7" (parenthesized_expression "(uVar3 & 7)" (( "(") (binary_expression "uVar3 & 7" (identifier "uVar3") (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "7")) () ")"))) (+ "+") (identifier "lVar4"))) (; ";")) (expression_statement "param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;" (assignment_expression "param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1" (subscript_expression "param_3[uVar2 + 1]" (identifier "param_3") ([ "[") (binary_expression "uVar2 + 1" (identifier "uVar2") (+ "+") (number_literal "1")) (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7))" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7))" (( "(") (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)" (cast_expression "(int)(uint)param_1[lVar4]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar4]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar4]" (identifier "param_1") ([ "[") (identifier "lVar4") (] "]")))) (>> ">>") (parenthesized_expression "(~(byte)(uVar3 + 1) & 7)" (( "(") (binary_expression "~(byte)(uVar3 + 1) & 7" (unary_expression "~(byte)(uVar3 + 1)" (~ "~") (call_expression "(byte)(uVar3 + 1)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(uVar3 + 1)" (( "(") (binary_expression "uVar3 + 1" (identifier "uVar3") (+ "+") (number_literal "1")) () ")")))) (& "&") (number_literal "7")) () ")"))) () ")"))) (& "&") (number_literal "1"))) (; ";")) (expression_statement "lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);" (assignment_expression "lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7)" (identifier "lVar4") (= "=") (binary_expression "lVar4 + (ulong)((uVar3 + 1 & 7) == 7)" (identifier "lVar4") (+ "+") (call_expression "(ulong)((uVar3 + 1 & 7) == 7)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uVar3 + 1 & 7) == 7)" (( "(") (binary_expression "(uVar3 + 1 & 7) == 7" (parenthesized_expression "(uVar3 + 1 & 7)" (( "(") (binary_expression "uVar3 + 1 & 7" (binary_expression "uVar3 + 1" (identifier "uVar3") (+ "+") (number_literal "1")) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "7")) () ")"))))) (; ";")) (expression_statement "param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;" (assignment_expression "param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1" (subscript_expression "param_3[uVar2 + 2]" (identifier "param_3") ([ "[") (binary_expression "uVar2 + 2" (identifier "uVar2") (+ "+") (number_literal "2")) (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7))" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7))" (( "(") (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)" (cast_expression "(int)(uint)param_1[lVar4]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar4]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar4]" (identifier "param_1") ([ "[") (identifier "lVar4") (] "]")))) (>> ">>") (parenthesized_expression "(~(byte)(uVar3 + 2) & 7)" (( "(") (binary_expression "~(byte)(uVar3 + 2) & 7" (unary_expression "~(byte)(uVar3 + 2)" (~ "~") (call_expression "(byte)(uVar3 + 2)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(uVar3 + 2)" (( "(") (binary_expression "uVar3 + 2" (identifier "uVar3") (+ "+") (number_literal "2")) () ")")))) (& "&") (number_literal "7")) () ")"))) () ")"))) (& "&") (number_literal "1"))) (; ";")) (expression_statement "lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);" (assignment_expression "lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7)" (identifier "lVar4") (= "=") (binary_expression "lVar4 + (ulong)((uVar3 + 2 & 7) == 7)" (identifier "lVar4") (+ "+") (call_expression "(ulong)((uVar3 + 2 & 7) == 7)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uVar3 + 2 & 7) == 7)" (( "(") (binary_expression "(uVar3 + 2 & 7) == 7" (parenthesized_expression "(uVar3 + 2 & 7)" (( "(") (binary_expression "uVar3 + 2 & 7" (binary_expression "uVar3 + 2" (identifier "uVar3") (+ "+") (number_literal "2")) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "7")) () ")"))))) (; ";")) (expression_statement "param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;" (assignment_expression "param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1" (subscript_expression "param_3[uVar2 + 3]" (identifier "param_3") ([ "[") (binary_expression "uVar2 + 3" (identifier "uVar2") (+ "+") (number_literal "3")) (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7))" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7))" (( "(") (binary_expression "(int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)" (cast_expression "(int)(uint)param_1[lVar4]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar4]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar4]" (identifier "param_1") ([ "[") (identifier "lVar4") (] "]")))) (>> ">>") (parenthesized_expression "(~(byte)(uVar3 + 3) & 7)" (( "(") (binary_expression "~(byte)(uVar3 + 3) & 7" (unary_expression "~(byte)(uVar3 + 3)" (~ "~") (call_expression "(byte)(uVar3 + 3)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(uVar3 + 3)" (( "(") (binary_expression "uVar3 + 3" (identifier "uVar3") (+ "+") (number_literal "3")) () ")")))) (& "&") (number_literal "7")) () ")"))) () ")"))) (& "&") (number_literal "1"))) (; ";")) (expression_statement "uVar2 = uVar2 + 4;" (assignment_expression "uVar2 = uVar2 + 4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + 4" (identifier "uVar2") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;" (assignment_expression "lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4" (identifier "lVar4") (= "=") (binary_expression "(ulong)((uVar3 + 3 & 7) == 7) + lVar4" (call_expression "(ulong)((uVar3 + 3 & 7) == 7)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uVar3 + 3 & 7) == 7)" (( "(") (binary_expression "(uVar3 + 3 & 7) == 7" (parenthesized_expression "(uVar3 + 3 & 7)" (( "(") (binary_expression "uVar3 + 3 & 7" (binary_expression "uVar3 + 3" (identifier "uVar3") (+ "+") (number_literal "3")) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "7")) () ")"))) (+ "+") (identifier "lVar4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar5 != uVar2)" (( "(") (binary_expression "uVar5 != uVar2" (identifier "uVar5") (!= "!=") (identifier "uVar2")) () ")")) (; ";")) (} "}"))) (} "}"))) (labeled_statement "LAB_0017a4d2:\n  *param_4 = uVar5;" (statement_identifier "LAB_0017a4d2") (: ":") (expression_statement "*param_4 = uVar5;" (assignment_expression "*param_4 = uVar5" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "uVar5")) (; ";"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

int function_1(type_1 *var_1,type_2 var_5,type_1 *var_3,type_2 *var_4)

{
  type_3 var_6;
  type_2 var_7;
  type_4 var_11;
  long var_12;
  type_2 var_9;
  long var_10;
  bool bVar7;
  
  if (var_1 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("in != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x20);
  }
  if (var_3 == (type_1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);
  }
  if (var_4 == (type_2 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);
  }
  if (var_5 < 4) {
    return 0x10;
  }
  if ((*var_1 & 0x1f) != 3) {
    return 7;
  }
  var_6 = var_1[1];
  var_9 = (type_2)var_6;
  var_10 = 2;
  if ((char)var_6 < '\0') {
    var_7 = (type_2)(var_6 & 0x7f);
    if (1 < var_7 - 1) {
      return 7;
    }
    var_9 = (type_2)var_1[2];
    if (var_7 != 1) {
      var_9 = (type_2)var_8(var_1[2],var_1[3]);
    }
    var_10 = var_7 + 2;
  }
  if (var_9 == 0) {
    return 7;
  }
  if (var_5 < var_9 + var_10) {
    return 7;
  }
  var_9 = (var_9 * 8 + -8) - (type_2)(var_1[var_10] & 7);
  if (*var_4 < var_9) {
    *var_4 = var_9;
    return 6;
  }
  if (var_9 != 0) {
    var_12 = var_10 + 1;
    *var_3 = (type_1)((int)(type_4)var_1[var_10 + 1] >> 7);
    var_7 = 1;
    if (1 < var_9) {
      var_11 = (int)var_9 - 1U & 3;
      if (var_11 != 0) {
        if (var_11 != 1) {
          if (var_11 != 2) {
            var_7 = 2;
            var_3[1] = (type_3)((int)(type_4)var_1[var_12] >> 6) & 1;
          }
          bVar7 = var_7 == 7;
          var_3[var_7] = (type_3)((int)(type_4)var_1[var_10 + 1] >> (~(type_3)var_7 & 7)) & 1;
          var_7 = var_7 + 1;
          var_12 = var_10 + 1 + (type_2)bVar7;
        }
        bVar7 = var_7 == 7;
        var_3[var_7] = (type_3)((int)(type_4)var_1[var_12] >> (~(type_3)var_7 & 7)) & 1;
        var_7 = var_7 + 1;
        var_12 = var_12 + (type_2)bVar7;
        if (var_9 == var_7) goto LAB_0017a4d2;
      }
      do {
        var_11 = (type_4)var_7;
        var_3[var_7] = (type_3)((int)(type_4)var_1[var_12] >> (~(type_3)var_7 & 7)) & 1;
        var_12 = (type_2)((var_11 & 7) == 7) + var_12;
        var_3[var_7 + 1] = (type_3)((int)(type_4)var_1[var_12] >> (~(type_3)(var_11 + 1) & 7)) & 1;
        var_12 = var_12 + (type_2)((var_11 + 1 & 7) == 7);
        var_3[var_7 + 2] = (type_3)((int)(type_4)var_1[var_12] >> (~(type_3)(var_11 + 2) & 7)) & 1;
        var_12 = var_12 + (type_2)((var_11 + 2 & 7) == 7);
        var_3[var_7 + 3] = (type_3)((int)(type_4)var_1[var_12] >> (~(type_3)(var_11 + 3) & 7)) & 1;
        var_7 = var_7 + 4;
        var_12 = (type_2)((var_11 + 3 & 7) == 7) + var_12;
      } while (var_9 != var_7);
    }
  }
LAB_0017a4d2:
  *var_4 = var_9;
  return 0;
}


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

undefined8 MASKED(byte *param_1,ulong param_2,undefined1 *param_3,ulong *param_4)

{
  byte bVar1;
  ulong uVar2;
  uint uVar3;
  long lVar4;
  ulong uVar5;
  long lVar6;
  bool bVar7;
  
  if (param_1 == (byte *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("in != NULL","src/pk/asn1/der/bit/MASKED.c",0x20);
  }
  if (param_3 == (undefined1 *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("out != NULL","src/pk/asn1/der/bit/MASKED.c",0x21);
  }
  if (param_4 == (ulong *)0x0) {
                    /* WARNING: Subroutine does not return */
    crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/MASKED.c",0x22);
  }
  if (param_2 < 4) {
    return 0x10;
  }
  if ((*param_1 & 0x1f) != 3) {
    return 7;
  }
  bVar1 = param_1[1];
  uVar5 = (ulong)bVar1;
  lVar6 = 2;
  if ((char)bVar1 < '\0') {
    uVar2 = (ulong)(bVar1 & 0x7f);
    if (1 < uVar2 - 1) {
      return 7;
    }
    uVar5 = (ulong)param_1[2];
    if (uVar2 != 1) {
      uVar5 = (ulong)CONCAT11(param_1[2],param_1[3]);
    }
    lVar6 = uVar2 + 2;
  }
  if (uVar5 == 0) {
    return 7;
  }
  if (param_2 < uVar5 + lVar6) {
    return 7;
  }
  uVar5 = (uVar5 * 8 + -8) - (ulong)(param_1[lVar6] & 7);
  if (*param_4 < uVar5) {
    *param_4 = uVar5;
    return 6;
  }
  if (uVar5 != 0) {
    lVar4 = lVar6 + 1;
    *param_3 = (char)((int)(uint)param_1[lVar6 + 1] >> 7);
    uVar2 = 1;
    if (1 < uVar5) {
      uVar3 = (int)uVar5 - 1U & 3;
      if (uVar3 != 0) {
        if (uVar3 != 1) {
          if (uVar3 != 2) {
            uVar2 = 2;
            param_3[1] = (byte)((int)(uint)param_1[lVar4] >> 6) & 1;
          }
          bVar7 = uVar2 == 7;
          param_3[uVar2] = (byte)((int)(uint)param_1[lVar6 + 1] >> (~(byte)uVar2 & 7)) & 1;
          uVar2 = uVar2 + 1;
          lVar4 = lVar6 + 1 + (ulong)bVar7;
        }
        bVar7 = uVar2 == 7;
        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;
        uVar2 = uVar2 + 1;
        lVar4 = lVar4 + (ulong)bVar7;
        if (uVar5 == uVar2) goto LAB_0017a4d2;
      }
      do {
        uVar3 = (uint)uVar2;
        param_3[uVar2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)uVar2 & 7)) & 1;
        lVar4 = (ulong)((uVar3 & 7) == 7) + lVar4;
        param_3[uVar2 + 1] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 1) & 7)) & 1;
        lVar4 = lVar4 + (ulong)((uVar3 + 1 & 7) == 7);
        param_3[uVar2 + 2] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 2) & 7)) & 1;
        lVar4 = lVar4 + (ulong)((uVar3 + 2 & 7) == 7);
        param_3[uVar2 + 3] = (byte)((int)(uint)param_1[lVar4] >> (~(byte)(uVar3 + 3) & 7)) & 1;
        uVar2 = uVar2 + 4;
        lVar4 = (ulong)((uVar3 + 3 & 7) == 7) + lVar4;
      } while (uVar5 != uVar2);
    }
  }
LAB_0017a4d2:
  *param_4 = uVar5;
  return 0;
}

