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

{
  byte bVar1;
  int iVar2;
  long lVar3;
  ulong uVar4;
  uint uVar5;
  long lVar6;
  ulong uVar7;
  uint uVar8;
  long lVar9;
  
  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) {
    if (outlen == (ulong *)0x0) {
                    /* WARNING: Subroutine does not return */
      crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);
    }
    iVar2 = 0x10;
    if ((3 < inlen) && (iVar2 = 7, (*in & 0x1f) == 3)) {
      bVar1 = in[1];
      uVar7 = (ulong)bVar1;
      lVar9 = 2;
      if ((char)bVar1 < '\0') {
        uVar4 = (ulong)(bVar1 & 0x7f);
        if (1 < uVar4 - 1) {
          return 7;
        }
        uVar7 = (ulong)in[2];
        if (uVar4 != 1) {
          uVar7 = (ulong)CONCAT11(in[2],in[3]);
        }
        lVar9 = uVar4 + 2;
      }
      if (uVar7 == 0) {
        iVar2 = 7;
      }
      else {
        iVar2 = 7;
        if (uVar7 + lVar9 <= inlen) {
          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);
          if (uVar7 <= *outlen) {
            if (uVar7 != 0) {
              lVar6 = lVar9 + 1;
              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);
              lVar3 = 0;
              uVar5 = (int)uVar7 - 1U & 3;
              if (uVar5 != 0) {
                lVar3 = 1;
                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;
                lVar6 = lVar9 + 1;
                if (uVar5 != 1) {
                  if (uVar5 != 2) {
                    lVar3 = 2;
                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;
                  }
                  lVar3 = lVar3 + 1;
                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;
                  lVar6 = lVar6 + (ulong)(lVar3 == 7);
                }
              }
              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {
                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;
                uVar5 = (int)lVar3 + 2;
                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;
                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;
                uVar8 = (int)lVar3 + 3;
                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);
                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;
                lVar3 = lVar3 + 4;
                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);
                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;
                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;
              }
            }
            *outlen = uVar7;
            return 0;
          }
          *outlen = uVar7;
          iVar2 = 6;
        }
      }
    }
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);
}



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

{
  byte bVar1;
  undefined8 uVar2;
  long lVar3;
  ulong uVar4;
  uint uVar5;
  long lVar6;
  ulong uVar7;
  uint uVar8;
  long lVar9;
  
  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) {
    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);
    }
    uVar2 = 0x10;
    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {
      bVar1 = param_1[1];
      uVar7 = (ulong)bVar1;
      lVar9 = 2;
      if ((char)bVar1 < '\0') {
        uVar4 = (ulong)(bVar1 & 0x7f);
        if (1 < uVar4 - 1) {
          return 7;
        }
        uVar7 = (ulong)param_1[2];
        if (uVar4 != 1) {
          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);
        }
        lVar9 = uVar4 + 2;
      }
      if (uVar7 == 0) {
        uVar2 = 7;
      }
      else {
        uVar2 = 7;
        if (uVar7 + lVar9 <= param_2) {
          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);
          if (uVar7 <= *param_4) {
            if (uVar7 != 0) {
              lVar6 = lVar9 + 1;
              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);
              lVar3 = 0;
              uVar5 = (int)uVar7 - 1U & 3;
              if (uVar5 != 0) {
                lVar3 = 1;
                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;
                lVar6 = lVar9 + 1;
                if (uVar5 != 1) {
                  if (uVar5 != 2) {
                    lVar3 = 2;
                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;
                  }
                  lVar3 = lVar3 + 1;
                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;
                  lVar6 = lVar6 + (ulong)(lVar3 == 7);
                }
              }
              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {
                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;
                uVar5 = (int)lVar3 + 2;
                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;
                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;
                uVar8 = (int)lVar3 + 3;
                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);
                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;
                lVar3 = lVar3 + 4;
                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);
                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;
                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;
              }
            }
            *param_4 = uVar7;
            return 0;
          }
          *param_4 = uVar7;
          uVar2 = 6;
        }
      }
    }
    return uVar2;
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);
}


SUB RSP,0x8
TEST RDI,RDI
JZ 0x0016df7a
TEST RDX,RDX
JZ 0x0016df62
MOV R9,RCX
TEST RCX,RCX
JZ 0x0016df4a
MOV EAX,0x10
CMP RSI,0x3
JBE 0x0016de38
MOVZX ECX,byte ptr [RDI]
MOV EAX,0x7
AND ECX,0x1f
CMP CL,0x3
JNZ 0x0016de38
MOVZX R8D,byte ptr [RDI + 0x1]
MOV R11D,0x2
MOV RCX,R8
TEST R8B,R8B
JS 0x0016de40
TEST R8,R8
JZ 0x0016df40
LEA RCX,[R8 + R11*0x1]
MOV EAX,0x7
CMP RCX,RSI
JA 0x0016de38
MOVZX ESI,byte ptr [RDI + R11*0x1]
LEA R10,[-0x8 + R8*0x8]
AND ESI,0x7
SUB R10,RSI
CMP qword ptr [R9],R10
JC 0x0016de30
TEST R10,R10
JZ 0x0016df35
MOVZX EAX,byte ptr [RDI + R11*0x1 + 0x1]
LEA RSI,[R10 + -0x1]
LEA R8,[R11 + 0x1]
SAR EAX,0x7
MOV byte ptr [RDX],AL
XOR EAX,EAX
AND ESI,0x3
JZ 0x0016df28
MOVZX R8D,byte ptr [RDI + R8*0x1]
MOV EAX,0x1
SAR R8D,0x6
AND R8D,0x1
MOV byte ptr [RDX + RAX*0x1],R8B
LEA R8,[R11 + 0x1]
CMP RSI,0x1
JZ 0x0016df28
CMP RSI,0x2
JZ 0x0016ddfa
MOVZX R11D,byte ptr [RDI + R8*0x1]
MOV EAX,0x2
SAR R11D,0x5
AND R11D,0x1
MOV byte ptr [RDX + RAX*0x1],R11B
ADD RAX,0x1
MOVZX ESI,byte ptr [RDI + R8*0x1]
MOV ECX,EAX
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
MOVZX ECX,SIL
ADD R8,RCX
JMP 0x0016df28
MOV qword ptr [R9],R10
MOV EAX,0x6
ADD RSP,0x8
RET
AND ECX,0x7f
LEA R10,[RCX + -0x1]
CMP R10,0x1
JA 0x0016de38
MOVZX R8D,byte ptr [RDI + 0x2]
TEST R10,R10
JZ 0x0016de62
MOVZX EAX,byte ptr [RDI + 0x3]
SHL R8,0x8
OR R8,RAX
LEA R11,[RCX + 0x2]
JMP 0x0016dd5c
MOV ECX,ESI
MOVZX R11D,byte ptr [RDI + R8*0x1]
AND ESI,0x7
NOT ECX
AND ECX,0x7
SAR R11D,CL
AND R11D,0x1
CMP RSI,0x7
SETZ SIL
MOV byte ptr [RDX + RAX*0x1 + 0x1],R11B
LEA R11,[RAX + 0x2]
MOVZX ESI,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 + 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 RSI,R8
MOV ECX,EAX
XOR R8D,R8D
MOVZX R11D,byte ptr [RDI + RSI*0x1]
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
SETZ R8B
ADD R8,RSI
LEA RSI,[RAX + 0x1]
CMP R10,RSI
JNZ 0x0016de70
MOV qword ptr [R9],R10
XOR EAX,EAX
ADD RSP,0x8
RET
MOV EAX,0x7
JMP 0x0016de38
MOV EDX,0x22
LEA RSI,[0x1c2be8]
LEA RDI,[0x1ae804]
CALL 0x00114270
MOV EDX,0x21
LEA RSI,[0x1c2be8]
LEA RDI,[0x1a87a1]
CALL 0x00114270
MOV EDX,0x20
LEA RSI,[0x1c2be8]
LEA RDI,[0x1a8790]
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  undefined8 uVar2;\n  long lVar3;\n  ulong uVar4;\n  uint uVar5;\n  long lVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\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    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    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\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  undefined8 uVar2;\n  long lVar3;\n  ulong uVar4;\n  uint uVar5;\n  long lVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\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    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    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\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  undefined8 uVar2;\n  long lVar3;\n  ulong uVar4;\n  uint uVar5;\n  long lVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\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    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    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) 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    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    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\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    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    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\n  }" { (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 ))) ;) })) (expression_statement "uVar2 = 0x10;" (assignment_expression "uVar2 = 0x10" identifier = number_literal) ;) (if_statement "if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }" if (parenthesized_expression "((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3))" ( (binary_expression "(3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)" (parenthesized_expression "(3 < param_2)" ( (binary_expression "3 < param_2" number_literal < identifier) )) && (parenthesized_expression "(uVar2 = 7, (*param_1 & 0x1f) == 3)" ( (comma_expression "uVar2 = 7, (*param_1 & 0x1f) == 3" (assignment_expression "uVar2 = 7" identifier = number_literal) , (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      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }" { (expression_statement "bVar1 = param_1[1];" (assignment_expression "bVar1 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "uVar7 = (ulong)bVar1;" (assignment_expression "uVar7 = (ulong)bVar1" identifier = (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "lVar9 = 2;" (assignment_expression "lVar9 = 2" identifier = number_literal) ;) (if_statement "if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 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        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }" { (expression_statement "uVar4 = (ulong)(bVar1 & 0x7f);" (assignment_expression "uVar4 = (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 < uVar4 - 1) {\n          return 7;\n        }" if (parenthesized_expression "(1 < uVar4 - 1)" ( (binary_expression "1 < uVar4 - 1" number_literal < (binary_expression "uVar4 - 1" identifier - number_literal)) )) (compound_statement "{\n          return 7;\n        }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "uVar7 = (ulong)param_1[2];" (assignment_expression "uVar7 = (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 (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }" if (parenthesized_expression "(uVar4 != 1)" ( (binary_expression "uVar4 != 1" identifier != number_literal) )) (compound_statement "{\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }" { (expression_statement "uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);" (assignment_expression "uVar7 = (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 "lVar9 = uVar4 + 2;" (assignment_expression "lVar9 = uVar4 + 2" identifier = (binary_expression "uVar4 + 2" identifier + number_literal)) ;) })) (if_statement "if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar2 = 7;\n      }" { (expression_statement "uVar2 = 7;" (assignment_expression "uVar2 = 7" identifier = number_literal) ;) }) (else_clause "else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }" else (compound_statement "{\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }" { (expression_statement "uVar2 = 7;" (assignment_expression "uVar2 = 7" identifier = number_literal) ;) (if_statement "if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }" if (parenthesized_expression "(uVar7 + lVar9 <= param_2)" ( (binary_expression "uVar7 + lVar9 <= param_2" (binary_expression "uVar7 + lVar9" identifier + identifier) <= identifier) )) (compound_statement "{\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }" { (expression_statement "uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);" (assignment_expression "uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7)" identifier = (binary_expression "(uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7)" (parenthesized_expression "(uVar7 * 8 + -8)" ( (binary_expression "uVar7 * 8 + -8" (binary_expression "uVar7 * 8" identifier * number_literal) + number_literal) )) - (call_expression "(ulong)(param_1[lVar9] & 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[lVar9] & 7)" ( (binary_expression "param_1[lVar9] & 7" (subscript_expression "param_1[lVar9]" identifier [ identifier ]) & number_literal) ))))) ;) (if_statement "if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }" if (parenthesized_expression "(uVar7 <= *param_4)" ( (binary_expression "uVar7 <= *param_4" identifier <= (pointer_expression "*param_4" * identifier)) )) (compound_statement "{\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }" { (if_statement "if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }" if (parenthesized_expression "(uVar7 != 0)" ( (binary_expression "uVar7 != 0" identifier != number_literal) )) (compound_statement "{\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }" { (expression_statement "lVar6 = lVar9 + 1;" (assignment_expression "lVar6 = lVar9 + 1" identifier = (binary_expression "lVar9 + 1" identifier + number_literal)) ;) (expression_statement "*param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);" (assignment_expression "*param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7)" (pointer_expression "*param_3" * identifier) = (cast_expression "(char)((int)(uint)param_1[lVar9 + 1] >> 7)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((int)(uint)param_1[lVar9 + 1] >> 7)" ( (binary_expression "(int)(uint)param_1[lVar9 + 1] >> 7" (cast_expression "(int)(uint)param_1[lVar9 + 1]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar9 + 1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar9 + 1]" identifier [ (binary_expression "lVar9 + 1" identifier + number_literal) ]))) >> number_literal) )))) ;) (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = (int)uVar7 - 1U & 3;" (assignment_expression "uVar5 = (int)uVar7 - 1U & 3" identifier = (binary_expression "(int)uVar7 - 1U & 3" (binary_expression "(int)uVar7 - 1U" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal) & number_literal)) ;) (if_statement "if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }" { (expression_statement "lVar3 = 1;" (assignment_expression "lVar3 = 1" identifier = number_literal) ;) (expression_statement "param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;" (assignment_expression "param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1" (subscript_expression "param_3[1]" identifier [ number_literal ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> 6) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> 6)" ( (binary_expression "(int)(uint)param_1[lVar6] >> 6" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> number_literal) ))) & number_literal)) ;) (expression_statement "lVar6 = lVar9 + 1;" (assignment_expression "lVar6 = lVar9 + 1" identifier = (binary_expression "lVar9 + 1" identifier + number_literal)) ;) (if_statement "if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }" if (parenthesized_expression "(uVar5 != 1)" ( (binary_expression "uVar5 != 1" identifier != number_literal) )) (compound_statement "{\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }" { (if_statement "if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }" if (parenthesized_expression "(uVar5 != 2)" ( (binary_expression "uVar5 != 2" identifier != number_literal) )) (compound_statement "{\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }" { (expression_statement "lVar3 = 2;" (assignment_expression "lVar3 = 2" identifier = number_literal) ;) (expression_statement "param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;" (assignment_expression "param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1" (subscript_expression "param_3[2]" identifier [ number_literal ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> 5) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> 5)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> 5)" ( (binary_expression "(int)(uint)param_1[lVar6] >> 5" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> number_literal) ))) & number_literal)) ;) })) (expression_statement "lVar3 = lVar3 + 1;" (assignment_expression "lVar3 = lVar3 + 1" identifier = (binary_expression "lVar3 + 1" identifier + number_literal)) ;) (expression_statement "param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;" (assignment_expression "param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1" (subscript_expression "param_3[lVar3]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7))" ( (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)lVar3 & 7)" ( (binary_expression "~(byte)lVar3 & 7" (unary_expression "~(byte)lVar3" ~ (cast_expression "(byte)lVar3" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar6 = lVar6 + (ulong)(lVar3 == 7);" (assignment_expression "lVar6 = lVar6 + (ulong)(lVar3 == 7)" identifier = (binary_expression "lVar6 + (ulong)(lVar3 == 7)" identifier + (call_expression "(ulong)(lVar3 == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(lVar3 == 7)" ( (binary_expression "lVar3 == 7" identifier == number_literal) ))))) ;) })) })) (while_statement "while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }" while (parenthesized_expression "(uVar4 = lVar3 + 1, uVar7 != uVar4)" ( (comma_expression "uVar4 = lVar3 + 1, uVar7 != uVar4" (assignment_expression "uVar4 = lVar3 + 1" identifier = (binary_expression "lVar3 + 1" identifier + number_literal)) , (binary_expression "uVar7 != uVar4" identifier != identifier)) )) (compound_statement "{\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }" { (expression_statement "param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;" (assignment_expression "param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1" (subscript_expression "param_3[lVar3 + 1]" identifier [ (binary_expression "lVar3 + 1" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7))" ( (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar4 & 7)" ( (binary_expression "~(byte)uVar4 & 7" (unary_expression "~(byte)uVar4" ~ (cast_expression "(byte)uVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar5 = (int)lVar3 + 2;" (assignment_expression "uVar5 = (int)lVar3 + 2" identifier = (binary_expression "(int)lVar3 + 2" (cast_expression "(int)lVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;" (assignment_expression "lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6" identifier = (binary_expression "(ulong)(((uint)uVar4 & 7) == 7) + lVar6" (call_expression "(ulong)(((uint)uVar4 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(((uint)uVar4 & 7) == 7)" ( (binary_expression "((uint)uVar4 & 7) == 7" (parenthesized_expression "((uint)uVar4 & 7)" ( (binary_expression "(uint)uVar4 & 7" (cast_expression "(uint)uVar4" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) + identifier)) ;) (expression_statement "param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;" (assignment_expression "param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1" (subscript_expression "param_3[lVar3 + 2]" identifier [ (binary_expression "lVar3 + 2" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7))" ( (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar5 & 7)" ( (binary_expression "~(byte)uVar5 & 7" (unary_expression "~(byte)uVar5" ~ (cast_expression "(byte)uVar5" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar8 = (int)lVar3 + 3;" (assignment_expression "uVar8 = (int)lVar3 + 3" identifier = (binary_expression "(int)lVar3 + 3" (cast_expression "(int)lVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);" (assignment_expression "lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7)" identifier = (binary_expression "lVar6 + (ulong)((uVar5 & 7) == 7)" identifier + (call_expression "(ulong)((uVar5 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar5 & 7) == 7)" ( (binary_expression "(uVar5 & 7) == 7" (parenthesized_expression "(uVar5 & 7)" ( (binary_expression "uVar5 & 7" identifier & number_literal) )) == number_literal) ))))) ;) (expression_statement "param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;" (assignment_expression "param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1" (subscript_expression "param_3[lVar3 + 3]" identifier [ (binary_expression "lVar3 + 3" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7))" ( (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar8 & 7)" ( (binary_expression "~(byte)uVar8 & 7" (unary_expression "~(byte)uVar8" ~ (cast_expression "(byte)uVar8" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar3 = lVar3 + 4;" (assignment_expression "lVar3 = lVar3 + 4" identifier = (binary_expression "lVar3 + 4" identifier + number_literal)) ;) (expression_statement "lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);" (assignment_expression "lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7)" identifier = (binary_expression "lVar6 + (ulong)((uVar8 & 7) == 7)" identifier + (call_expression "(ulong)((uVar8 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar8 & 7) == 7)" ( (binary_expression "(uVar8 & 7) == 7" (parenthesized_expression "(uVar8 & 7)" ( (binary_expression "uVar8 & 7" identifier & number_literal) )) == number_literal) ))))) ;) (expression_statement "param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;" (assignment_expression "param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1" (subscript_expression "param_3[lVar3]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7))" ( (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)lVar3 & 7)" ( (binary_expression "~(byte)lVar3 & 7" (unary_expression "~(byte)lVar3" ~ (cast_expression "(byte)lVar3" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;" (assignment_expression "lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6" identifier = (binary_expression "(ulong)(((uint)lVar3 & 7) == 7) + lVar6" (call_expression "(ulong)(((uint)lVar3 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(((uint)lVar3 & 7) == 7)" ( (binary_expression "((uint)lVar3 & 7) == 7" (parenthesized_expression "((uint)lVar3 & 7)" ( (binary_expression "(uint)lVar3 & 7" (cast_expression "(uint)lVar3" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) + identifier)) ;) })) })) (expression_statement "*param_4 = uVar7;" (assignment_expression "*param_4 = uVar7" (pointer_expression "*param_4" * identifier) = identifier) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "*param_4 = uVar7;" (assignment_expression "*param_4 = uVar7" (pointer_expression "*param_4" * identifier) = identifier) ;) (expression_statement "uVar2 = 6;" (assignment_expression "uVar2 = 6" identifier = number_literal) ;) })) }))) })) (return_statement "return uVar2;" return identifier ;) })) 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 ))) ;) })))
(translation_unit "int der_decode_bit_string(uchar *in,ulong inlen,uchar *out,ulong *outlen)\n\n{\n  byte bVar1;\n  int iVar2;\n  long lVar3;\n  ulong uVar4;\n  uint uVar5;\n  long lVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\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    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    iVar2 = 0x10;\n    if ((3 < inlen) && (iVar2 = 7, (*in & 0x1f) == 3)) {\n      bVar1 = in[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)in[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(in[2],in[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        iVar2 = 7;\n      }\n      else {\n        iVar2 = 7;\n        if (uVar7 + lVar9 <= inlen) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);\n          if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }\n          *outlen = uVar7;\n          iVar2 = 6;\n        }\n      }\n    }\n    return iVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n}\n\n" (function_definition "int der_decode_bit_string(uchar *in,ulong inlen,uchar *out,ulong *outlen)\n\n{\n  byte bVar1;\n  int iVar2;\n  long lVar3;\n  ulong uVar4;\n  uint uVar5;\n  long lVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\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    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    iVar2 = 0x10;\n    if ((3 < inlen) && (iVar2 = 7, (*in & 0x1f) == 3)) {\n      bVar1 = in[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)in[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(in[2],in[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        iVar2 = 7;\n      }\n      else {\n        iVar2 = 7;\n        if (uVar7 + lVar9 <= inlen) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);\n          if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }\n          *outlen = uVar7;\n          iVar2 = 6;\n        }\n      }\n    }\n    return iVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\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  int iVar2;\n  long lVar3;\n  ulong uVar4;\n  uint uVar5;\n  long lVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\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    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    iVar2 = 0x10;\n    if ((3 < inlen) && (iVar2 = 7, (*in & 0x1f) == 3)) {\n      bVar1 = in[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)in[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(in[2],in[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        iVar2 = 7;\n      }\n      else {\n        iVar2 = 7;\n        if (uVar7 + lVar9 <= inlen) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);\n          if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }\n          *outlen = uVar7;\n          iVar2 = 6;\n        }\n      }\n    }\n    return iVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) 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    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    iVar2 = 0x10;\n    if ((3 < inlen) && (iVar2 = 7, (*in & 0x1f) == 3)) {\n      bVar1 = in[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)in[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(in[2],in[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        iVar2 = 7;\n      }\n      else {\n        iVar2 = 7;\n        if (uVar7 + lVar9 <= inlen) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);\n          if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }\n          *outlen = uVar7;\n          iVar2 = 6;\n        }\n      }\n    }\n    return iVar2;\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    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    iVar2 = 0x10;\n    if ((3 < inlen) && (iVar2 = 7, (*in & 0x1f) == 3)) {\n      bVar1 = in[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)in[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(in[2],in[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        iVar2 = 7;\n      }\n      else {\n        iVar2 = 7;\n        if (uVar7 + lVar9 <= inlen) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);\n          if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }\n          *outlen = uVar7;\n          iVar2 = 6;\n        }\n      }\n    }\n    return iVar2;\n  }" { (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 ))) ;) })) (expression_statement "iVar2 = 0x10;" (assignment_expression "iVar2 = 0x10" identifier = number_literal) ;) (if_statement "if ((3 < inlen) && (iVar2 = 7, (*in & 0x1f) == 3)) {\n      bVar1 = in[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)in[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(in[2],in[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        iVar2 = 7;\n      }\n      else {\n        iVar2 = 7;\n        if (uVar7 + lVar9 <= inlen) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);\n          if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }\n          *outlen = uVar7;\n          iVar2 = 6;\n        }\n      }\n    }" if (parenthesized_expression "((3 < inlen) && (iVar2 = 7, (*in & 0x1f) == 3))" ( (binary_expression "(3 < inlen) && (iVar2 = 7, (*in & 0x1f) == 3)" (parenthesized_expression "(3 < inlen)" ( (binary_expression "3 < inlen" number_literal < identifier) )) && (parenthesized_expression "(iVar2 = 7, (*in & 0x1f) == 3)" ( (comma_expression "iVar2 = 7, (*in & 0x1f) == 3" (assignment_expression "iVar2 = 7" identifier = number_literal) , (binary_expression "(*in & 0x1f) == 3" (parenthesized_expression "(*in & 0x1f)" ( (binary_expression "*in & 0x1f" (pointer_expression "*in" * identifier) & number_literal) )) == number_literal)) ))) )) (compound_statement "{\n      bVar1 = in[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)in[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(in[2],in[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        iVar2 = 7;\n      }\n      else {\n        iVar2 = 7;\n        if (uVar7 + lVar9 <= inlen) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);\n          if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }\n          *outlen = uVar7;\n          iVar2 = 6;\n        }\n      }\n    }" { (expression_statement "bVar1 = in[1];" (assignment_expression "bVar1 = in[1]" identifier = (subscript_expression "in[1]" identifier [ number_literal ])) ;) (expression_statement "uVar7 = (ulong)bVar1;" (assignment_expression "uVar7 = (ulong)bVar1" identifier = (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "lVar9 = 2;" (assignment_expression "lVar9 = 2" identifier = number_literal) ;) (if_statement "if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)in[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(in[2],in[3]);\n        }\n        lVar9 = uVar4 + 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        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)in[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(in[2],in[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }" { (expression_statement "uVar4 = (ulong)(bVar1 & 0x7f);" (assignment_expression "uVar4 = (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 < uVar4 - 1) {\n          return 7;\n        }" if (parenthesized_expression "(1 < uVar4 - 1)" ( (binary_expression "1 < uVar4 - 1" number_literal < (binary_expression "uVar4 - 1" identifier - number_literal)) )) (compound_statement "{\n          return 7;\n        }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "uVar7 = (ulong)in[2];" (assignment_expression "uVar7 = (ulong)in[2]" identifier = (cast_expression "(ulong)in[2]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "in[2]" identifier [ number_literal ]))) ;) (if_statement "if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(in[2],in[3]);\n        }" if (parenthesized_expression "(uVar4 != 1)" ( (binary_expression "uVar4 != 1" identifier != number_literal) )) (compound_statement "{\n          uVar7 = (ulong)CONCAT11(in[2],in[3]);\n        }" { (expression_statement "uVar7 = (ulong)CONCAT11(in[2],in[3]);" (assignment_expression "uVar7 = (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 "lVar9 = uVar4 + 2;" (assignment_expression "lVar9 = uVar4 + 2" identifier = (binary_expression "uVar4 + 2" identifier + number_literal)) ;) })) (if_statement "if (uVar7 == 0) {\n        iVar2 = 7;\n      }\n      else {\n        iVar2 = 7;\n        if (uVar7 + lVar9 <= inlen) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);\n          if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }\n          *outlen = uVar7;\n          iVar2 = 6;\n        }\n      }" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar2 = 7;\n      }" { (expression_statement "iVar2 = 7;" (assignment_expression "iVar2 = 7" identifier = number_literal) ;) }) (else_clause "else {\n        iVar2 = 7;\n        if (uVar7 + lVar9 <= inlen) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);\n          if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }\n          *outlen = uVar7;\n          iVar2 = 6;\n        }\n      }" else (compound_statement "{\n        iVar2 = 7;\n        if (uVar7 + lVar9 <= inlen) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);\n          if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }\n          *outlen = uVar7;\n          iVar2 = 6;\n        }\n      }" { (expression_statement "iVar2 = 7;" (assignment_expression "iVar2 = 7" identifier = number_literal) ;) (if_statement "if (uVar7 + lVar9 <= inlen) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);\n          if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }\n          *outlen = uVar7;\n          iVar2 = 6;\n        }" if (parenthesized_expression "(uVar7 + lVar9 <= inlen)" ( (binary_expression "uVar7 + lVar9 <= inlen" (binary_expression "uVar7 + lVar9" identifier + identifier) <= identifier) )) (compound_statement "{\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);\n          if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }\n          *outlen = uVar7;\n          iVar2 = 6;\n        }" { (expression_statement "uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7);" (assignment_expression "uVar7 = (uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7)" identifier = (binary_expression "(uVar7 * 8 + -8) - (ulong)(in[lVar9] & 7)" (parenthesized_expression "(uVar7 * 8 + -8)" ( (binary_expression "uVar7 * 8 + -8" (binary_expression "uVar7 * 8" identifier * number_literal) + number_literal) )) - (call_expression "(ulong)(in[lVar9] & 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(in[lVar9] & 7)" ( (binary_expression "in[lVar9] & 7" (subscript_expression "in[lVar9]" identifier [ identifier ]) & number_literal) ))))) ;) (if_statement "if (uVar7 <= *outlen) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }" if (parenthesized_expression "(uVar7 <= *outlen)" ( (binary_expression "uVar7 <= *outlen" identifier <= (pointer_expression "*outlen" * identifier)) )) (compound_statement "{\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *outlen = uVar7;\n            return 0;\n          }" { (if_statement "if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }" if (parenthesized_expression "(uVar7 != 0)" ( (binary_expression "uVar7 != 0" identifier != number_literal) )) (compound_statement "{\n              lVar6 = lVar9 + 1;\n              *out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }" { (expression_statement "lVar6 = lVar9 + 1;" (assignment_expression "lVar6 = lVar9 + 1" identifier = (binary_expression "lVar9 + 1" identifier + number_literal)) ;) (expression_statement "*out = (uchar)((int)(uint)in[lVar9 + 1] >> 7);" (assignment_expression "*out = (uchar)((int)(uint)in[lVar9 + 1] >> 7)" (pointer_expression "*out" * identifier) = (call_expression "(uchar)((int)(uint)in[lVar9 + 1] >> 7)" (parenthesized_expression "(uchar)" ( identifier )) (argument_list "((int)(uint)in[lVar9 + 1] >> 7)" ( (binary_expression "(int)(uint)in[lVar9 + 1] >> 7" (cast_expression "(int)(uint)in[lVar9 + 1]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar9 + 1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar9 + 1]" identifier [ (binary_expression "lVar9 + 1" identifier + number_literal) ]))) >> number_literal) )))) ;) (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = (int)uVar7 - 1U & 3;" (assignment_expression "uVar5 = (int)uVar7 - 1U & 3" identifier = (binary_expression "(int)uVar7 - 1U & 3" (binary_expression "(int)uVar7 - 1U" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal) & number_literal)) ;) (if_statement "if (uVar5 != 0) {\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n                lVar3 = 1;\n                out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }" { (expression_statement "lVar3 = 1;" (assignment_expression "lVar3 = 1" identifier = number_literal) ;) (expression_statement "out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1;" (assignment_expression "out[1] = (byte)((int)(uint)in[lVar6] >> 6) & 1" (subscript_expression "out[1]" identifier [ number_literal ]) = (binary_expression "(byte)((int)(uint)in[lVar6] >> 6) & 1" (call_expression "(byte)((int)(uint)in[lVar6] >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar6] >> 6)" ( (binary_expression "(int)(uint)in[lVar6] >> 6" (cast_expression "(int)(uint)in[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar6]" identifier [ identifier ]))) >> number_literal) ))) & number_literal)) ;) (expression_statement "lVar6 = lVar9 + 1;" (assignment_expression "lVar6 = lVar9 + 1" identifier = (binary_expression "lVar9 + 1" identifier + number_literal)) ;) (if_statement "if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }" if (parenthesized_expression "(uVar5 != 1)" ( (binary_expression "uVar5 != 1" identifier != number_literal) )) (compound_statement "{\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }" { (if_statement "if (uVar5 != 2) {\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }" if (parenthesized_expression "(uVar5 != 2)" ( (binary_expression "uVar5 != 2" identifier != number_literal) )) (compound_statement "{\n                    lVar3 = 2;\n                    out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;\n                  }" { (expression_statement "lVar3 = 2;" (assignment_expression "lVar3 = 2" identifier = number_literal) ;) (expression_statement "out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1;" (assignment_expression "out[2] = (byte)((int)(uint)in[lVar6] >> 5) & 1" (subscript_expression "out[2]" identifier [ number_literal ]) = (binary_expression "(byte)((int)(uint)in[lVar6] >> 5) & 1" (call_expression "(byte)((int)(uint)in[lVar6] >> 5)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar6] >> 5)" ( (binary_expression "(int)(uint)in[lVar6] >> 5" (cast_expression "(int)(uint)in[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar6]" identifier [ identifier ]))) >> number_literal) ))) & number_literal)) ;) })) (expression_statement "lVar3 = lVar3 + 1;" (assignment_expression "lVar3 = lVar3 + 1" identifier = (binary_expression "lVar3 + 1" identifier + number_literal)) ;) (expression_statement "out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;" (assignment_expression "out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1" (subscript_expression "out[lVar3]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1" (call_expression "(byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7))" ( (binary_expression "(int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)" (cast_expression "(int)(uint)in[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)lVar3 & 7)" ( (binary_expression "~(byte)lVar3 & 7" (unary_expression "~(byte)lVar3" ~ (cast_expression "(byte)lVar3" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar6 = lVar6 + (ulong)(lVar3 == 7);" (assignment_expression "lVar6 = lVar6 + (ulong)(lVar3 == 7)" identifier = (binary_expression "lVar6 + (ulong)(lVar3 == 7)" identifier + (call_expression "(ulong)(lVar3 == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(lVar3 == 7)" ( (binary_expression "lVar3 == 7" identifier == number_literal) ))))) ;) })) })) (while_statement "while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }" while (parenthesized_expression "(uVar4 = lVar3 + 1, uVar7 != uVar4)" ( (comma_expression "uVar4 = lVar3 + 1, uVar7 != uVar4" (assignment_expression "uVar4 = lVar3 + 1" identifier = (binary_expression "lVar3 + 1" identifier + number_literal)) , (binary_expression "uVar7 != uVar4" identifier != identifier)) )) (compound_statement "{\n                out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }" { (expression_statement "out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1;" (assignment_expression "out[lVar3 + 1] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1" (subscript_expression "out[lVar3 + 1]" identifier [ (binary_expression "lVar3 + 1" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)) & 1" (call_expression "(byte)((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar6] >> (~(byte)uVar4 & 7))" ( (binary_expression "(int)(uint)in[lVar6] >> (~(byte)uVar4 & 7)" (cast_expression "(int)(uint)in[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar4 & 7)" ( (binary_expression "~(byte)uVar4 & 7" (unary_expression "~(byte)uVar4" ~ (cast_expression "(byte)uVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar5 = (int)lVar3 + 2;" (assignment_expression "uVar5 = (int)lVar3 + 2" identifier = (binary_expression "(int)lVar3 + 2" (cast_expression "(int)lVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;" (assignment_expression "lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6" identifier = (binary_expression "(ulong)(((uint)uVar4 & 7) == 7) + lVar6" (call_expression "(ulong)(((uint)uVar4 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(((uint)uVar4 & 7) == 7)" ( (binary_expression "((uint)uVar4 & 7) == 7" (parenthesized_expression "((uint)uVar4 & 7)" ( (binary_expression "(uint)uVar4 & 7" (cast_expression "(uint)uVar4" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) + identifier)) ;) (expression_statement "out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1;" (assignment_expression "out[lVar3 + 2] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1" (subscript_expression "out[lVar3 + 2]" identifier [ (binary_expression "lVar3 + 2" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)) & 1" (call_expression "(byte)((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar6] >> (~(byte)uVar5 & 7))" ( (binary_expression "(int)(uint)in[lVar6] >> (~(byte)uVar5 & 7)" (cast_expression "(int)(uint)in[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar5 & 7)" ( (binary_expression "~(byte)uVar5 & 7" (unary_expression "~(byte)uVar5" ~ (cast_expression "(byte)uVar5" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar8 = (int)lVar3 + 3;" (assignment_expression "uVar8 = (int)lVar3 + 3" identifier = (binary_expression "(int)lVar3 + 3" (cast_expression "(int)lVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);" (assignment_expression "lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7)" identifier = (binary_expression "lVar6 + (ulong)((uVar5 & 7) == 7)" identifier + (call_expression "(ulong)((uVar5 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar5 & 7) == 7)" ( (binary_expression "(uVar5 & 7) == 7" (parenthesized_expression "(uVar5 & 7)" ( (binary_expression "uVar5 & 7" identifier & number_literal) )) == number_literal) ))))) ;) (expression_statement "out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1;" (assignment_expression "out[lVar3 + 3] = (byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1" (subscript_expression "out[lVar3 + 3]" identifier [ (binary_expression "lVar3 + 3" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)) & 1" (call_expression "(byte)((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar6] >> (~(byte)uVar8 & 7))" ( (binary_expression "(int)(uint)in[lVar6] >> (~(byte)uVar8 & 7)" (cast_expression "(int)(uint)in[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar8 & 7)" ( (binary_expression "~(byte)uVar8 & 7" (unary_expression "~(byte)uVar8" ~ (cast_expression "(byte)uVar8" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar3 = lVar3 + 4;" (assignment_expression "lVar3 = lVar3 + 4" identifier = (binary_expression "lVar3 + 4" identifier + number_literal)) ;) (expression_statement "lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);" (assignment_expression "lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7)" identifier = (binary_expression "lVar6 + (ulong)((uVar8 & 7) == 7)" identifier + (call_expression "(ulong)((uVar8 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar8 & 7) == 7)" ( (binary_expression "(uVar8 & 7) == 7" (parenthesized_expression "(uVar8 & 7)" ( (binary_expression "uVar8 & 7" identifier & number_literal) )) == number_literal) ))))) ;) (expression_statement "out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1;" (assignment_expression "out[lVar3] = (byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1" (subscript_expression "out[lVar3]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)) & 1" (call_expression "(byte)((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)in[lVar6] >> (~(byte)lVar3 & 7))" ( (binary_expression "(int)(uint)in[lVar6] >> (~(byte)lVar3 & 7)" (cast_expression "(int)(uint)in[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)in[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "in[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)lVar3 & 7)" ( (binary_expression "~(byte)lVar3 & 7" (unary_expression "~(byte)lVar3" ~ (cast_expression "(byte)lVar3" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;" (assignment_expression "lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6" identifier = (binary_expression "(ulong)(((uint)lVar3 & 7) == 7) + lVar6" (call_expression "(ulong)(((uint)lVar3 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(((uint)lVar3 & 7) == 7)" ( (binary_expression "((uint)lVar3 & 7) == 7" (parenthesized_expression "((uint)lVar3 & 7)" ( (binary_expression "(uint)lVar3 & 7" (cast_expression "(uint)lVar3" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) + identifier)) ;) })) })) (expression_statement "*outlen = uVar7;" (assignment_expression "*outlen = uVar7" (pointer_expression "*outlen" * identifier) = identifier) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "*outlen = uVar7;" (assignment_expression "*outlen = uVar7" (pointer_expression "*outlen" * identifier) = identifier) ;) (expression_statement "iVar2 = 6;" (assignment_expression "iVar2 = 6" identifier = number_literal) ;) })) }))) })) (return_statement "return iVar2;" return identifier ;) })) 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 ))) ;) })))
(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  undefined8 uVar2;\n  long lVar3;\n  ulong uVar4;\n  uint uVar5;\n  long lVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\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    if (param_4 == (ulong *)0x0) {\n                    \n      crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n    }\n    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\n  }\n                    \n  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\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  undefined8 uVar2;\n  long lVar3;\n  ulong uVar4;\n  uint uVar5;\n  long lVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\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    if (param_4 == (ulong *)0x0) {\n                    \n      crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n    }\n    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\n  }\n                    \n  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\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  undefined8 uVar2;\n  long lVar3;\n  ulong uVar4;\n  uint uVar5;\n  long lVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\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    if (param_4 == (ulong *)0x0) {\n                    \n      crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n    }\n    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\n  }\n                    \n  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) 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    if (param_4 == (ulong *)0x0) {\n                    \n      crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n    }\n    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\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    if (param_4 == (ulong *)0x0) {\n                    \n      crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n    }\n    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\n  }" { (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 ))) ;) })) (expression_statement "uVar2 = 0x10;" (assignment_expression "uVar2 = 0x10" identifier = number_literal) ;) (if_statement "if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }" if (parenthesized_expression "((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3))" ( (binary_expression "(3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)" (parenthesized_expression "(3 < param_2)" ( (binary_expression "3 < param_2" number_literal < identifier) )) && (parenthesized_expression "(uVar2 = 7, (*param_1 & 0x1f) == 3)" ( (comma_expression "uVar2 = 7, (*param_1 & 0x1f) == 3" (assignment_expression "uVar2 = 7" identifier = number_literal) , (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      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }" { (expression_statement "bVar1 = param_1[1];" (assignment_expression "bVar1 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "uVar7 = (ulong)bVar1;" (assignment_expression "uVar7 = (ulong)bVar1" identifier = (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "lVar9 = 2;" (assignment_expression "lVar9 = 2" identifier = number_literal) ;) (if_statement "if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 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        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }" { (expression_statement "uVar4 = (ulong)(bVar1 & 0x7f);" (assignment_expression "uVar4 = (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 < uVar4 - 1) {\n          return 7;\n        }" if (parenthesized_expression "(1 < uVar4 - 1)" ( (binary_expression "1 < uVar4 - 1" number_literal < (binary_expression "uVar4 - 1" identifier - number_literal)) )) (compound_statement "{\n          return 7;\n        }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "uVar7 = (ulong)param_1[2];" (assignment_expression "uVar7 = (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 (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }" if (parenthesized_expression "(uVar4 != 1)" ( (binary_expression "uVar4 != 1" identifier != number_literal) )) (compound_statement "{\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }" { (expression_statement "uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);" (assignment_expression "uVar7 = (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 "lVar9 = uVar4 + 2;" (assignment_expression "lVar9 = uVar4 + 2" identifier = (binary_expression "uVar4 + 2" identifier + number_literal)) ;) })) (if_statement "if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar2 = 7;\n      }" { (expression_statement "uVar2 = 7;" (assignment_expression "uVar2 = 7" identifier = number_literal) ;) }) (else_clause "else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }" else (compound_statement "{\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }" { (expression_statement "uVar2 = 7;" (assignment_expression "uVar2 = 7" identifier = number_literal) ;) (if_statement "if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }" if (parenthesized_expression "(uVar7 + lVar9 <= param_2)" ( (binary_expression "uVar7 + lVar9 <= param_2" (binary_expression "uVar7 + lVar9" identifier + identifier) <= identifier) )) (compound_statement "{\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }" { (expression_statement "uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);" (assignment_expression "uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7)" identifier = (binary_expression "(uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7)" (parenthesized_expression "(uVar7 * 8 + -8)" ( (binary_expression "uVar7 * 8 + -8" (binary_expression "uVar7 * 8" identifier * number_literal) + number_literal) )) - (call_expression "(ulong)(param_1[lVar9] & 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[lVar9] & 7)" ( (binary_expression "param_1[lVar9] & 7" (subscript_expression "param_1[lVar9]" identifier [ identifier ]) & number_literal) ))))) ;) (if_statement "if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }" if (parenthesized_expression "(uVar7 <= *param_4)" ( (binary_expression "uVar7 <= *param_4" identifier <= (pointer_expression "*param_4" * identifier)) )) (compound_statement "{\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }" { (if_statement "if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }" if (parenthesized_expression "(uVar7 != 0)" ( (binary_expression "uVar7 != 0" identifier != number_literal) )) (compound_statement "{\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }" { (expression_statement "lVar6 = lVar9 + 1;" (assignment_expression "lVar6 = lVar9 + 1" identifier = (binary_expression "lVar9 + 1" identifier + number_literal)) ;) (expression_statement "*param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);" (assignment_expression "*param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7)" (pointer_expression "*param_3" * identifier) = (cast_expression "(char)((int)(uint)param_1[lVar9 + 1] >> 7)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((int)(uint)param_1[lVar9 + 1] >> 7)" ( (binary_expression "(int)(uint)param_1[lVar9 + 1] >> 7" (cast_expression "(int)(uint)param_1[lVar9 + 1]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar9 + 1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar9 + 1]" identifier [ (binary_expression "lVar9 + 1" identifier + number_literal) ]))) >> number_literal) )))) ;) (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = (int)uVar7 - 1U & 3;" (assignment_expression "uVar5 = (int)uVar7 - 1U & 3" identifier = (binary_expression "(int)uVar7 - 1U & 3" (binary_expression "(int)uVar7 - 1U" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal) & number_literal)) ;) (if_statement "if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }" { (expression_statement "lVar3 = 1;" (assignment_expression "lVar3 = 1" identifier = number_literal) ;) (expression_statement "param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;" (assignment_expression "param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1" (subscript_expression "param_3[1]" identifier [ number_literal ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> 6) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> 6)" ( (binary_expression "(int)(uint)param_1[lVar6] >> 6" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> number_literal) ))) & number_literal)) ;) (expression_statement "lVar6 = lVar9 + 1;" (assignment_expression "lVar6 = lVar9 + 1" identifier = (binary_expression "lVar9 + 1" identifier + number_literal)) ;) (if_statement "if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }" if (parenthesized_expression "(uVar5 != 1)" ( (binary_expression "uVar5 != 1" identifier != number_literal) )) (compound_statement "{\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }" { (if_statement "if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }" if (parenthesized_expression "(uVar5 != 2)" ( (binary_expression "uVar5 != 2" identifier != number_literal) )) (compound_statement "{\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }" { (expression_statement "lVar3 = 2;" (assignment_expression "lVar3 = 2" identifier = number_literal) ;) (expression_statement "param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;" (assignment_expression "param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1" (subscript_expression "param_3[2]" identifier [ number_literal ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> 5) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> 5)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> 5)" ( (binary_expression "(int)(uint)param_1[lVar6] >> 5" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> number_literal) ))) & number_literal)) ;) })) (expression_statement "lVar3 = lVar3 + 1;" (assignment_expression "lVar3 = lVar3 + 1" identifier = (binary_expression "lVar3 + 1" identifier + number_literal)) ;) (expression_statement "param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;" (assignment_expression "param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1" (subscript_expression "param_3[lVar3]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7))" ( (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)lVar3 & 7)" ( (binary_expression "~(byte)lVar3 & 7" (unary_expression "~(byte)lVar3" ~ (cast_expression "(byte)lVar3" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar6 = lVar6 + (ulong)(lVar3 == 7);" (assignment_expression "lVar6 = lVar6 + (ulong)(lVar3 == 7)" identifier = (binary_expression "lVar6 + (ulong)(lVar3 == 7)" identifier + (call_expression "(ulong)(lVar3 == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(lVar3 == 7)" ( (binary_expression "lVar3 == 7" identifier == number_literal) ))))) ;) })) })) (while_statement "while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }" while (parenthesized_expression "(uVar4 = lVar3 + 1, uVar7 != uVar4)" ( (comma_expression "uVar4 = lVar3 + 1, uVar7 != uVar4" (assignment_expression "uVar4 = lVar3 + 1" identifier = (binary_expression "lVar3 + 1" identifier + number_literal)) , (binary_expression "uVar7 != uVar4" identifier != identifier)) )) (compound_statement "{\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }" { (expression_statement "param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;" (assignment_expression "param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1" (subscript_expression "param_3[lVar3 + 1]" identifier [ (binary_expression "lVar3 + 1" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7))" ( (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar4 & 7)" ( (binary_expression "~(byte)uVar4 & 7" (unary_expression "~(byte)uVar4" ~ (cast_expression "(byte)uVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar5 = (int)lVar3 + 2;" (assignment_expression "uVar5 = (int)lVar3 + 2" identifier = (binary_expression "(int)lVar3 + 2" (cast_expression "(int)lVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;" (assignment_expression "lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6" identifier = (binary_expression "(ulong)(((uint)uVar4 & 7) == 7) + lVar6" (call_expression "(ulong)(((uint)uVar4 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(((uint)uVar4 & 7) == 7)" ( (binary_expression "((uint)uVar4 & 7) == 7" (parenthesized_expression "((uint)uVar4 & 7)" ( (binary_expression "(uint)uVar4 & 7" (cast_expression "(uint)uVar4" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) + identifier)) ;) (expression_statement "param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;" (assignment_expression "param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1" (subscript_expression "param_3[lVar3 + 2]" identifier [ (binary_expression "lVar3 + 2" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7))" ( (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar5 & 7)" ( (binary_expression "~(byte)uVar5 & 7" (unary_expression "~(byte)uVar5" ~ (cast_expression "(byte)uVar5" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "uVar8 = (int)lVar3 + 3;" (assignment_expression "uVar8 = (int)lVar3 + 3" identifier = (binary_expression "(int)lVar3 + 3" (cast_expression "(int)lVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);" (assignment_expression "lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7)" identifier = (binary_expression "lVar6 + (ulong)((uVar5 & 7) == 7)" identifier + (call_expression "(ulong)((uVar5 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar5 & 7) == 7)" ( (binary_expression "(uVar5 & 7) == 7" (parenthesized_expression "(uVar5 & 7)" ( (binary_expression "uVar5 & 7" identifier & number_literal) )) == number_literal) ))))) ;) (expression_statement "param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;" (assignment_expression "param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1" (subscript_expression "param_3[lVar3 + 3]" identifier [ (binary_expression "lVar3 + 3" identifier + number_literal) ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7))" ( (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)uVar8 & 7)" ( (binary_expression "~(byte)uVar8 & 7" (unary_expression "~(byte)uVar8" ~ (cast_expression "(byte)uVar8" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar3 = lVar3 + 4;" (assignment_expression "lVar3 = lVar3 + 4" identifier = (binary_expression "lVar3 + 4" identifier + number_literal)) ;) (expression_statement "lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);" (assignment_expression "lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7)" identifier = (binary_expression "lVar6 + (ulong)((uVar8 & 7) == 7)" identifier + (call_expression "(ulong)((uVar8 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar8 & 7) == 7)" ( (binary_expression "(uVar8 & 7) == 7" (parenthesized_expression "(uVar8 & 7)" ( (binary_expression "uVar8 & 7" identifier & number_literal) )) == number_literal) ))))) ;) (expression_statement "param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;" (assignment_expression "param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1" (subscript_expression "param_3[lVar3]" identifier [ identifier ]) = (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7))" ( (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)param_1[lVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[lVar6]" identifier [ identifier ]))) >> (parenthesized_expression "(~(byte)lVar3 & 7)" ( (binary_expression "~(byte)lVar3 & 7" (unary_expression "~(byte)lVar3" ~ (cast_expression "(byte)lVar3" ( (type_descriptor "byte" type_identifier) ) identifier)) & number_literal) ))) ))) & number_literal)) ;) (expression_statement "lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;" (assignment_expression "lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6" identifier = (binary_expression "(ulong)(((uint)lVar3 & 7) == 7) + lVar6" (call_expression "(ulong)(((uint)lVar3 & 7) == 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(((uint)lVar3 & 7) == 7)" ( (binary_expression "((uint)lVar3 & 7) == 7" (parenthesized_expression "((uint)lVar3 & 7)" ( (binary_expression "(uint)lVar3 & 7" (cast_expression "(uint)lVar3" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) + identifier)) ;) })) })) (expression_statement "*param_4 = uVar7;" (assignment_expression "*param_4 = uVar7" (pointer_expression "*param_4" * identifier) = identifier) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "*param_4 = uVar7;" (assignment_expression "*param_4 = uVar7" (pointer_expression "*param_4" * identifier) = identifier) ;) (expression_statement "uVar2 = 6;" (assignment_expression "uVar2 = 6" identifier = number_literal) ;) })) }))) })) (return_statement "return uVar2;" return identifier ;) })) (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 ))) ;) })))
(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 (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) 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 { (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 ))) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT)) ))) )) (compound_statement { (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 { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) <= IDENT) )) (compound_statement { (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 IDENT <= (pointer_expression * IDENT)) )) (compound_statement { (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) ;) (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 { (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)) ;) (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 [ IDENT ]))) >> (parenthesized_expression ( (binary_expression (unary_expression ~ (cast_expression ( (type_descriptor TYPE) ) IDENT)) & LIT) ))) ))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) ))))) ;) })) })) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression IDENT != IDENT)) )) (compound_statement { (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 ~ (cast_expression ( (type_descriptor TYPE) ) IDENT)) & LIT) ))) ))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) 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 ~ (cast_expression ( (type_descriptor TYPE) ) IDENT)) & LIT) ))) ))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & 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 ~ (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 + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == 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 (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) == LIT) ))) + IDENT)) ;) })) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) })) }))) })) (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , 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  undefined8 uVar2;\n  long lVar3;\n  ulong uVar4;\n  uint uVar5;\n  long lVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\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    if (param_4 == (ulong *)0x0) {\n                    \n      crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n    }\n    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\n  }\n                    \n  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\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  undefined8 uVar2;\n  long lVar3;\n  ulong uVar4;\n  uint uVar5;\n  long lVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\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    if (param_4 == (ulong *)0x0) {\n                    \n      crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n    }\n    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\n  }\n                    \n  crypt_argchk("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "undefined8 uVar2;" (type_identifier "undefined8") (identifier "uVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "ulong uVar7;" (type_identifier "ulong") (identifier "uVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (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    if (param_4 == (ulong *)0x0) {\n                    \n      crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n    }\n    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\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    if (param_4 == (ulong *)0x0) {\n                    \n      crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x22);\n    }\n    uVar2 = 0x10;\n    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }\n    return uVar2;\n  }" ({ "{") (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") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar2 = 0x10;" (assignment_expression "uVar2 = 0x10" (identifier "uVar2") (= "=") (number_literal "0x10")) (; ";")) (if_statement "if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {\n      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }" (if "if") (parenthesized_expression "((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3))" (( "(") (binary_expression "(3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)" (parenthesized_expression "(3 < param_2)" (( "(") (binary_expression "3 < param_2" (number_literal "3") (< "<") (identifier "param_2")) () ")")) (&& "&&") (parenthesized_expression "(uVar2 = 7, (*param_1 & 0x1f) == 3)" (( "(") (comma_expression "uVar2 = 7, (*param_1 & 0x1f) == 3" (assignment_expression "uVar2 = 7" (identifier "uVar2") (= "=") (number_literal "7")) (, ",") (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      bVar1 = param_1[1];\n      uVar7 = (ulong)bVar1;\n      lVar9 = 2;\n      if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }\n      if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }\n    }" ({ "{") (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 "uVar7 = (ulong)bVar1;" (assignment_expression "uVar7 = (ulong)bVar1" (identifier "uVar7") (= "=") (cast_expression "(ulong)bVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar1"))) (; ";")) (expression_statement "lVar9 = 2;" (assignment_expression "lVar9 = 2" (identifier "lVar9") (= "=") (number_literal "2")) (; ";")) (if_statement "if ((char)bVar1 < '\0') {\n        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 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        uVar4 = (ulong)(bVar1 & 0x7f);\n        if (1 < uVar4 - 1) {\n          return 7;\n        }\n        uVar7 = (ulong)param_1[2];\n        if (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }\n        lVar9 = uVar4 + 2;\n      }" ({ "{") (expression_statement "uVar4 = (ulong)(bVar1 & 0x7f);" (assignment_expression "uVar4 = (ulong)(bVar1 & 0x7f)" (identifier "uVar4") (= "=") (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 < uVar4 - 1) {\n          return 7;\n        }" (if "if") (parenthesized_expression "(1 < uVar4 - 1)" (( "(") (binary_expression "1 < uVar4 - 1" (number_literal "1") (< "<") (binary_expression "uVar4 - 1" (identifier "uVar4") (- "-") (number_literal "1"))) () ")")) (compound_statement "{\n          return 7;\n        }" ({ "{") (return_statement "return 7;" (return "return") (number_literal "7") (; ";")) (} "}"))) (expression_statement "uVar7 = (ulong)param_1[2];" (assignment_expression "uVar7 = (ulong)param_1[2]" (identifier "uVar7") (= "=") (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 (uVar4 != 1) {\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }" (if "if") (parenthesized_expression "(uVar4 != 1)" (( "(") (binary_expression "uVar4 != 1" (identifier "uVar4") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);\n        }" ({ "{") (expression_statement "uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);" (assignment_expression "uVar7 = (ulong)CONCAT11(param_1[2],param_1[3])" (identifier "uVar7") (= "=") (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 "lVar9 = uVar4 + 2;" (assignment_expression "lVar9 = uVar4 + 2" (identifier "lVar9") (= "=") (binary_expression "uVar4 + 2" (identifier "uVar4") (+ "+") (number_literal "2"))) (; ";")) (} "}"))) (if_statement "if (uVar7 == 0) {\n        uVar2 = 7;\n      }\n      else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }" (if "if") (parenthesized_expression "(uVar7 == 0)" (( "(") (binary_expression "uVar7 == 0" (identifier "uVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar2 = 7;\n      }" ({ "{") (expression_statement "uVar2 = 7;" (assignment_expression "uVar2 = 7" (identifier "uVar2") (= "=") (number_literal "7")) (; ";")) (} "}")) (else_clause "else {\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }" (else "else") (compound_statement "{\n        uVar2 = 7;\n        if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }\n      }" ({ "{") (expression_statement "uVar2 = 7;" (assignment_expression "uVar2 = 7" (identifier "uVar2") (= "=") (number_literal "7")) (; ";")) (if_statement "if (uVar7 + lVar9 <= param_2) {\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }" (if "if") (parenthesized_expression "(uVar7 + lVar9 <= param_2)" (( "(") (binary_expression "uVar7 + lVar9 <= param_2" (binary_expression "uVar7 + lVar9" (identifier "uVar7") (+ "+") (identifier "lVar9")) (<= "<=") (identifier "param_2")) () ")")) (compound_statement "{\n          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);\n          if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }\n          *param_4 = uVar7;\n          uVar2 = 6;\n        }" ({ "{") (expression_statement "uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);" (assignment_expression "uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7)" (identifier "uVar7") (= "=") (binary_expression "(uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7)" (parenthesized_expression "(uVar7 * 8 + -8)" (( "(") (binary_expression "uVar7 * 8 + -8" (binary_expression "uVar7 * 8" (identifier "uVar7") (* "*") (number_literal "8")) (+ "+") (number_literal "-8")) () ")")) (- "-") (call_expression "(ulong)(param_1[lVar9] & 7)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_1[lVar9] & 7)" (( "(") (binary_expression "param_1[lVar9] & 7" (subscript_expression "param_1[lVar9]" (identifier "param_1") ([ "[") (identifier "lVar9") (] "]")) (& "&") (number_literal "7")) () ")"))))) (; ";")) (if_statement "if (uVar7 <= *param_4) {\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }" (if "if") (parenthesized_expression "(uVar7 <= *param_4)" (( "(") (binary_expression "uVar7 <= *param_4" (identifier "uVar7") (<= "<=") (pointer_expression "*param_4" (* "*") (identifier "param_4"))) () ")")) (compound_statement "{\n            if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }\n            *param_4 = uVar7;\n            return 0;\n          }" ({ "{") (if_statement "if (uVar7 != 0) {\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }" (if "if") (parenthesized_expression "(uVar7 != 0)" (( "(") (binary_expression "uVar7 != 0" (identifier "uVar7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n              lVar6 = lVar9 + 1;\n              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);\n              lVar3 = 0;\n              uVar5 = (int)uVar7 - 1U & 3;\n              if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }\n              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }\n            }" ({ "{") (expression_statement "lVar6 = lVar9 + 1;" (assignment_expression "lVar6 = lVar9 + 1" (identifier "lVar6") (= "=") (binary_expression "lVar9 + 1" (identifier "lVar9") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);" (assignment_expression "*param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7)" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (cast_expression "(char)((int)(uint)param_1[lVar9 + 1] >> 7)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((int)(uint)param_1[lVar9 + 1] >> 7)" (( "(") (binary_expression "(int)(uint)param_1[lVar9 + 1] >> 7" (cast_expression "(int)(uint)param_1[lVar9 + 1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar9 + 1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar9 + 1]" (identifier "param_1") ([ "[") (binary_expression "lVar9 + 1" (identifier "lVar9") (+ "+") (number_literal "1")) (] "]")))) (>> ">>") (number_literal "7")) () ")")))) (; ";")) (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" (identifier "lVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar5 = (int)uVar7 - 1U & 3;" (assignment_expression "uVar5 = (int)uVar7 - 1U & 3" (identifier "uVar5") (= "=") (binary_expression "(int)uVar7 - 1U & 3" (binary_expression "(int)uVar7 - 1U" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (- "-") (number_literal "1U")) (& "&") (number_literal "3"))) (; ";")) (if_statement "if (uVar5 != 0) {\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }" (if "if") (parenthesized_expression "(uVar5 != 0)" (( "(") (binary_expression "uVar5 != 0" (identifier "uVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                lVar3 = 1;\n                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;\n                lVar6 = lVar9 + 1;\n                if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }\n              }" ({ "{") (expression_statement "lVar3 = 1;" (assignment_expression "lVar3 = 1" (identifier "lVar3") (= "=") (number_literal "1")) (; ";")) (expression_statement "param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;" (assignment_expression "param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1" (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar6] >> 6) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> 6)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar6] >> 6)" (( "(") (binary_expression "(int)(uint)param_1[lVar6] >> 6" (cast_expression "(int)(uint)param_1[lVar6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar6]" (identifier "param_1") ([ "[") (identifier "lVar6") (] "]")))) (>> ">>") (number_literal "6")) () ")"))) (& "&") (number_literal "1"))) (; ";")) (expression_statement "lVar6 = lVar9 + 1;" (assignment_expression "lVar6 = lVar9 + 1" (identifier "lVar6") (= "=") (binary_expression "lVar9 + 1" (identifier "lVar9") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (uVar5 != 1) {\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }" (if "if") (parenthesized_expression "(uVar5 != 1)" (( "(") (binary_expression "uVar5 != 1" (identifier "uVar5") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n                  if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }\n                  lVar3 = lVar3 + 1;\n                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                  lVar6 = lVar6 + (ulong)(lVar3 == 7);\n                }" ({ "{") (if_statement "if (uVar5 != 2) {\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }" (if "if") (parenthesized_expression "(uVar5 != 2)" (( "(") (binary_expression "uVar5 != 2" (identifier "uVar5") (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n                    lVar3 = 2;\n                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;\n                  }" ({ "{") (expression_statement "lVar3 = 2;" (assignment_expression "lVar3 = 2" (identifier "lVar3") (= "=") (number_literal "2")) (; ";")) (expression_statement "param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;" (assignment_expression "param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1" (subscript_expression "param_3[2]" (identifier "param_3") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar6] >> 5) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> 5)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar6] >> 5)" (( "(") (binary_expression "(int)(uint)param_1[lVar6] >> 5" (cast_expression "(int)(uint)param_1[lVar6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar6]" (identifier "param_1") ([ "[") (identifier "lVar6") (] "]")))) (>> ">>") (number_literal "5")) () ")"))) (& "&") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "lVar3 = lVar3 + 1;" (assignment_expression "lVar3 = lVar3 + 1" (identifier "lVar3") (= "=") (binary_expression "lVar3 + 1" (identifier "lVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;" (assignment_expression "param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1" (subscript_expression "param_3[lVar3]" (identifier "param_3") ([ "[") (identifier "lVar3") (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7))" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7))" (( "(") (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar6]" (identifier "param_1") ([ "[") (identifier "lVar6") (] "]")))) (>> ">>") (parenthesized_expression "(~(byte)lVar3 & 7)" (( "(") (binary_expression "~(byte)lVar3 & 7" (unary_expression "~(byte)lVar3" (~ "~") (cast_expression "(byte)lVar3" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "lVar3"))) (& "&") (number_literal "7")) () ")"))) () ")"))) (& "&") (number_literal "1"))) (; ";")) (expression_statement "lVar6 = lVar6 + (ulong)(lVar3 == 7);" (assignment_expression "lVar6 = lVar6 + (ulong)(lVar3 == 7)" (identifier "lVar6") (= "=") (binary_expression "lVar6 + (ulong)(lVar3 == 7)" (identifier "lVar6") (+ "+") (call_expression "(ulong)(lVar3 == 7)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(lVar3 == 7)" (( "(") (binary_expression "lVar3 == 7" (identifier "lVar3") (== "==") (number_literal "7")) () ")"))))) (; ";")) (} "}"))) (} "}"))) (while_statement "while (uVar4 = lVar3 + 1, uVar7 != uVar4) {\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }" (while "while") (parenthesized_expression "(uVar4 = lVar3 + 1, uVar7 != uVar4)" (( "(") (comma_expression "uVar4 = lVar3 + 1, uVar7 != uVar4" (assignment_expression "uVar4 = lVar3 + 1" (identifier "uVar4") (= "=") (binary_expression "lVar3 + 1" (identifier "lVar3") (+ "+") (number_literal "1"))) (, ",") (binary_expression "uVar7 != uVar4" (identifier "uVar7") (!= "!=") (identifier "uVar4"))) () ")")) (compound_statement "{\n                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;\n                uVar5 = (int)lVar3 + 2;\n                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;\n                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;\n                uVar8 = (int)lVar3 + 3;\n                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);\n                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;\n                lVar3 = lVar3 + 4;\n                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);\n                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;\n                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;\n              }" ({ "{") (expression_statement "param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;" (assignment_expression "param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1" (subscript_expression "param_3[lVar3 + 1]" (identifier "param_3") ([ "[") (binary_expression "lVar3 + 1" (identifier "lVar3") (+ "+") (number_literal "1")) (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7))" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7))" (( "(") (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar6]" (identifier "param_1") ([ "[") (identifier "lVar6") (] "]")))) (>> ">>") (parenthesized_expression "(~(byte)uVar4 & 7)" (( "(") (binary_expression "~(byte)uVar4 & 7" (unary_expression "~(byte)uVar4" (~ "~") (cast_expression "(byte)uVar4" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar4"))) (& "&") (number_literal "7")) () ")"))) () ")"))) (& "&") (number_literal "1"))) (; ";")) (expression_statement "uVar5 = (int)lVar3 + 2;" (assignment_expression "uVar5 = (int)lVar3 + 2" (identifier "uVar5") (= "=") (binary_expression "(int)lVar3 + 2" (cast_expression "(int)lVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar3")) (+ "+") (number_literal "2"))) (; ";")) (expression_statement "lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;" (assignment_expression "lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6" (identifier "lVar6") (= "=") (binary_expression "(ulong)(((uint)uVar4 & 7) == 7) + lVar6" (call_expression "(ulong)(((uint)uVar4 & 7) == 7)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(((uint)uVar4 & 7) == 7)" (( "(") (binary_expression "((uint)uVar4 & 7) == 7" (parenthesized_expression "((uint)uVar4 & 7)" (( "(") (binary_expression "(uint)uVar4 & 7" (cast_expression "(uint)uVar4" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar4")) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "7")) () ")"))) (+ "+") (identifier "lVar6"))) (; ";")) (expression_statement "param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;" (assignment_expression "param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1" (subscript_expression "param_3[lVar3 + 2]" (identifier "param_3") ([ "[") (binary_expression "lVar3 + 2" (identifier "lVar3") (+ "+") (number_literal "2")) (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7))" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7))" (( "(") (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar6]" (identifier "param_1") ([ "[") (identifier "lVar6") (] "]")))) (>> ">>") (parenthesized_expression "(~(byte)uVar5 & 7)" (( "(") (binary_expression "~(byte)uVar5 & 7" (unary_expression "~(byte)uVar5" (~ "~") (cast_expression "(byte)uVar5" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar5"))) (& "&") (number_literal "7")) () ")"))) () ")"))) (& "&") (number_literal "1"))) (; ";")) (expression_statement "uVar8 = (int)lVar3 + 3;" (assignment_expression "uVar8 = (int)lVar3 + 3" (identifier "uVar8") (= "=") (binary_expression "(int)lVar3 + 3" (cast_expression "(int)lVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar3")) (+ "+") (number_literal "3"))) (; ";")) (expression_statement "lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);" (assignment_expression "lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7)" (identifier "lVar6") (= "=") (binary_expression "lVar6 + (ulong)((uVar5 & 7) == 7)" (identifier "lVar6") (+ "+") (call_expression "(ulong)((uVar5 & 7) == 7)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uVar5 & 7) == 7)" (( "(") (binary_expression "(uVar5 & 7) == 7" (parenthesized_expression "(uVar5 & 7)" (( "(") (binary_expression "uVar5 & 7" (identifier "uVar5") (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "7")) () ")"))))) (; ";")) (expression_statement "param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;" (assignment_expression "param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1" (subscript_expression "param_3[lVar3 + 3]" (identifier "param_3") ([ "[") (binary_expression "lVar3 + 3" (identifier "lVar3") (+ "+") (number_literal "3")) (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7))" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7))" (( "(") (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar6]" (identifier "param_1") ([ "[") (identifier "lVar6") (] "]")))) (>> ">>") (parenthesized_expression "(~(byte)uVar8 & 7)" (( "(") (binary_expression "~(byte)uVar8 & 7" (unary_expression "~(byte)uVar8" (~ "~") (cast_expression "(byte)uVar8" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar8"))) (& "&") (number_literal "7")) () ")"))) () ")"))) (& "&") (number_literal "1"))) (; ";")) (expression_statement "lVar3 = lVar3 + 4;" (assignment_expression "lVar3 = lVar3 + 4" (identifier "lVar3") (= "=") (binary_expression "lVar3 + 4" (identifier "lVar3") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);" (assignment_expression "lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7)" (identifier "lVar6") (= "=") (binary_expression "lVar6 + (ulong)((uVar8 & 7) == 7)" (identifier "lVar6") (+ "+") (call_expression "(ulong)((uVar8 & 7) == 7)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uVar8 & 7) == 7)" (( "(") (binary_expression "(uVar8 & 7) == 7" (parenthesized_expression "(uVar8 & 7)" (( "(") (binary_expression "uVar8 & 7" (identifier "uVar8") (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "7")) () ")"))))) (; ";")) (expression_statement "param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;" (assignment_expression "param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1" (subscript_expression "param_3[lVar3]" (identifier "param_3") ([ "[") (identifier "lVar3") (] "]")) (= "=") (binary_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1" (call_expression "(byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7))" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7))" (( "(") (binary_expression "(int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)" (cast_expression "(int)(uint)param_1[lVar6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)param_1[lVar6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[lVar6]" (identifier "param_1") ([ "[") (identifier "lVar6") (] "]")))) (>> ">>") (parenthesized_expression "(~(byte)lVar3 & 7)" (( "(") (binary_expression "~(byte)lVar3 & 7" (unary_expression "~(byte)lVar3" (~ "~") (cast_expression "(byte)lVar3" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "lVar3"))) (& "&") (number_literal "7")) () ")"))) () ")"))) (& "&") (number_literal "1"))) (; ";")) (expression_statement "lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;" (assignment_expression "lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6" (identifier "lVar6") (= "=") (binary_expression "(ulong)(((uint)lVar3 & 7) == 7) + lVar6" (call_expression "(ulong)(((uint)lVar3 & 7) == 7)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(((uint)lVar3 & 7) == 7)" (( "(") (binary_expression "((uint)lVar3 & 7) == 7" (parenthesized_expression "((uint)lVar3 & 7)" (( "(") (binary_expression "(uint)lVar3 & 7" (cast_expression "(uint)lVar3" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar3")) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "7")) () ")"))) (+ "+") (identifier "lVar6"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "*param_4 = uVar7;" (assignment_expression "*param_4 = uVar7" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "uVar7")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "*param_4 = uVar7;" (assignment_expression "*param_4 = uVar7" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "uVar2 = 6;" (assignment_expression "uVar2 = 6" (identifier "uVar2") (= "=") (number_literal "6")) (; ";")) (} "}"))) (} "}")))) (} "}"))) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}"))) (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") () ")"))) (; ";")) (} "}")))

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

{
  type_3 var_6;
  int iVar2;
  long var_12;
  type_2 var_7;
  type_4 var_11;
  long var_13;
  type_2 var_9;
  type_4 var_14;
  long var_10;
  
  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) {
    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);
    }
    iVar2 = 0x10;
    if ((3 < var_5) && (iVar2 = 7, (*var_1 & 0x1f) == 3)) {
      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) {
        iVar2 = 7;
      }
      else {
        iVar2 = 7;
        if (var_9 + var_10 <= var_5) {
          var_9 = (var_9 * 8 + -8) - (type_2)(var_1[var_10] & 7);
          if (var_9 <= *var_4) {
            if (var_9 != 0) {
              var_13 = var_10 + 1;
              *var_3 = (type_1)((int)(type_4)var_1[var_10 + 1] >> 7);
              var_12 = 0;
              var_11 = (int)var_9 - 1U & 3;
              if (var_11 != 0) {
                var_12 = 1;
                var_3[1] = (type_3)((int)(type_4)var_1[var_13] >> 6) & 1;
                var_13 = var_10 + 1;
                if (var_11 != 1) {
                  if (var_11 != 2) {
                    var_12 = 2;
                    var_3[2] = (type_3)((int)(type_4)var_1[var_13] >> 5) & 1;
                  }
                  var_12 = var_12 + 1;
                  var_3[var_12] = (type_3)((int)(type_4)var_1[var_13] >> (~(type_3)var_12 & 7)) & 1;
                  var_13 = var_13 + (type_2)(var_12 == 7);
                }
              }
              while (var_7 = var_12 + 1, var_9 != var_7) {
                var_3[var_12 + 1] = (type_3)((int)(type_4)var_1[var_13] >> (~(type_3)var_7 & 7)) & 1;
                var_11 = (int)var_12 + 2;
                var_13 = (type_2)(((type_4)var_7 & 7) == 7) + var_13;
                var_3[var_12 + 2] = (type_3)((int)(type_4)var_1[var_13] >> (~(type_3)var_11 & 7)) & 1;
                var_14 = (int)var_12 + 3;
                var_13 = var_13 + (type_2)((var_11 & 7) == 7);
                var_3[var_12 + 3] = (type_3)((int)(type_4)var_1[var_13] >> (~(type_3)var_14 & 7)) & 1;
                var_12 = var_12 + 4;
                var_13 = var_13 + (type_2)((var_14 & 7) == 7);
                var_3[var_12] = (type_3)((int)(type_4)var_1[var_13] >> (~(type_3)var_12 & 7)) & 1;
                var_13 = (type_2)(((type_4)var_12 & 7) == 7) + var_13;
              }
            }
            *var_4 = var_9;
            return 0;
          }
          *var_4 = var_9;
          iVar2 = 6;
        }
      }
    }
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  var_2("out != NULL","src/pk/asn1/der/bit/der_decode_bit_string.c",0x21);
}


(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: (sized_type_specifier) 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: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) 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 (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)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) right: (number_literal)))))) consequence: (compound_statement (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 (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (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: (identifier) right: (pointer_expression argument: (identifier)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (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))) (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 (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)))) (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: (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: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))))))) (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (identifier) right: (identifier)))) body: (compound_statement (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: (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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (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: (cast_expression type: (type_descriptor type: (type_identifier)) value: (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: (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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) 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: (identifier) 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: (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: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) 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: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) right: (identifier)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (return_statement (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))))))) (return_statement (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal)))))))

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

{
  byte bVar1;
  undefined8 uVar2;
  long lVar3;
  ulong uVar4;
  uint uVar5;
  long lVar6;
  ulong uVar7;
  uint uVar8;
  long lVar9;
  
  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) {
    if (param_4 == (ulong *)0x0) {
                    /* WARNING: Subroutine does not return */
      crypt_argchk("outlen != NULL","src/pk/asn1/der/bit/MASKED.c",0x22);
    }
    uVar2 = 0x10;
    if ((3 < param_2) && (uVar2 = 7, (*param_1 & 0x1f) == 3)) {
      bVar1 = param_1[1];
      uVar7 = (ulong)bVar1;
      lVar9 = 2;
      if ((char)bVar1 < '\0') {
        uVar4 = (ulong)(bVar1 & 0x7f);
        if (1 < uVar4 - 1) {
          return 7;
        }
        uVar7 = (ulong)param_1[2];
        if (uVar4 != 1) {
          uVar7 = (ulong)CONCAT11(param_1[2],param_1[3]);
        }
        lVar9 = uVar4 + 2;
      }
      if (uVar7 == 0) {
        uVar2 = 7;
      }
      else {
        uVar2 = 7;
        if (uVar7 + lVar9 <= param_2) {
          uVar7 = (uVar7 * 8 + -8) - (ulong)(param_1[lVar9] & 7);
          if (uVar7 <= *param_4) {
            if (uVar7 != 0) {
              lVar6 = lVar9 + 1;
              *param_3 = (char)((int)(uint)param_1[lVar9 + 1] >> 7);
              lVar3 = 0;
              uVar5 = (int)uVar7 - 1U & 3;
              if (uVar5 != 0) {
                lVar3 = 1;
                param_3[1] = (byte)((int)(uint)param_1[lVar6] >> 6) & 1;
                lVar6 = lVar9 + 1;
                if (uVar5 != 1) {
                  if (uVar5 != 2) {
                    lVar3 = 2;
                    param_3[2] = (byte)((int)(uint)param_1[lVar6] >> 5) & 1;
                  }
                  lVar3 = lVar3 + 1;
                  param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;
                  lVar6 = lVar6 + (ulong)(lVar3 == 7);
                }
              }
              while (uVar4 = lVar3 + 1, uVar7 != uVar4) {
                param_3[lVar3 + 1] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar4 & 7)) & 1;
                uVar5 = (int)lVar3 + 2;
                lVar6 = (ulong)(((uint)uVar4 & 7) == 7) + lVar6;
                param_3[lVar3 + 2] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar5 & 7)) & 1;
                uVar8 = (int)lVar3 + 3;
                lVar6 = lVar6 + (ulong)((uVar5 & 7) == 7);
                param_3[lVar3 + 3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)uVar8 & 7)) & 1;
                lVar3 = lVar3 + 4;
                lVar6 = lVar6 + (ulong)((uVar8 & 7) == 7);
                param_3[lVar3] = (byte)((int)(uint)param_1[lVar6] >> (~(byte)lVar3 & 7)) & 1;
                lVar6 = (ulong)(((uint)lVar3 & 7) == 7) + lVar6;
              }
            }
            *param_4 = uVar7;
            return 0;
          }
          *param_4 = uVar7;
          uVar2 = 6;
        }
      }
    }
    return uVar2;
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("out != NULL","src/pk/asn1/der/bit/MASKED.c",0x21);
}

