#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */
typedef struct TYPE_12__ TYPE_3__;
typedef struct TYPE_11__ TYPE_2__;
typedef struct TYPE_10__ TYPE_1__;

/* Type definitions */
struct TYPE_12__ {
  scalar_t__ type;
  int length;
  unsigned char const *data;
};
struct TYPE_11__ {
  scalar_t__ type;
  int length;
  unsigned char const *data;
};
struct TYPE_10__ {
  int length;
  unsigned char *data;
};
typedef int /*<<< orphan*/ BIO;
typedef TYPE_1__ ASN1_OCTET_STRING;
typedef int /*<<< orphan*/ ASN1_OBJECT;
typedef TYPE_2__ ASN1_INTEGER;
typedef TYPE_3__ ASN1_ENUMERATED;

/* Variables and functions */
int /*<<< orphan*/ ASN1_ENUMERATED_free(TYPE_3__ *);
int /*<<< orphan*/ ASN1_INTEGER_free(TYPE_2__ *);
int /*<<< orphan*/ ASN1_OBJECT_free(int /*<<< orphan*/ *);
int /*<<< orphan*/ ASN1_OCTET_STRING_free(TYPE_1__ *);
int ASN1_get_object(unsigned char const **, long *, int *, int *, long);
scalar_t__ BIO_dump_indent(int /*<<< orphan*/ *, char const *, long, int);
scalar_t__ BIO_printf(int /*<<< orphan*/ *, char *, unsigned char const, ...);
scalar_t__ BIO_write(int /*<<< orphan*/ *, char const *, int);
int V_ASN1_BMPSTRING;
int V_ASN1_BOOLEAN;
int V_ASN1_CONSTRUCTED;
int V_ASN1_ENUMERATED;
int V_ASN1_EOC;
int V_ASN1_GENERALIZEDTIME;
int V_ASN1_IA5STRING;
int V_ASN1_INTEGER;
scalar_t__ V_ASN1_NEG_ENUMERATED;
scalar_t__ V_ASN1_NEG_INTEGER;
int V_ASN1_NUMERICSTRING;
int V_ASN1_OBJECT;
int V_ASN1_OCTET_STRING;
int V_ASN1_PRINTABLESTRING;
int V_ASN1_T61STRING;
int V_ASN1_UTCTIME;
int V_ASN1_UTF8STRING;
int V_ASN1_VISIBLESTRING;
int /*<<< orphan*/ asn1_print_info(int /*<<< orphan*/ *, int, int, int, int);
int d2i_ASN1_BOOLEAN(int /*<<< orphan*/ *, unsigned char const **, long);
TYPE_3__ *d2i_ASN1_ENUMERATED(int /*<<< orphan*/ *, unsigned char const **,
                              long);
TYPE_2__ *d2i_ASN1_INTEGER(int /*<<< orphan*/ *, unsigned char const **, long);
int /*<<< orphan*/ *d2i_ASN1_OBJECT(int /*<<< orphan*/ **,
                                    unsigned char const **, long);
TYPE_1__ *d2i_ASN1_OCTET_STRING(int /*<<< orphan*/ *, unsigned char const **,
                                long);
int /*<<< orphan*/ i2a_ASN1_OBJECT(int /*<<< orphan*/ *, int /*<<< orphan*/ *);
int asn1_parse2(BIO *bp, const unsigned char **pp, long length, int offset,
                int depth, int indent, int dump) {
  const unsigned char *p, *ep, *tot, *op, *opp;
  long len;
  int tag, xclass, ret = 0;
  int nl, hl, j, r;
  ASN1_OBJECT *o = NULL;
  ASN1_OCTET_STRING *os = NULL;
  int dump_indent;
  dump_indent = 6;
  p = *pp;
  tot = p + length;
  op = p - 1;
  while ((p < tot) && (op < p)) {
    op = p;
    j = ASN1_get_object(&p, &len, &tag, &xclass, length);
    if (j & 0x80) {
      if (BIO_write(bp, "Error in encoding\n", 18) <= 0)
        goto end;
      ret = 0;
      goto end;
    }
    hl = (p - op);
    length -= hl;
    if (BIO_printf(bp, "%5ld:", (long)offset + (long)(op - *pp)) <= 0)
      goto end;
    if (j != (V_ASN1_CONSTRUCTED | 1)) {
      if (BIO_printf(bp, "d=%-2d hl=%ld l=%4ld ", depth, (long)hl, len) <= 0)
        goto end;
    } else {
      if (BIO_printf(bp, "d=%-2d hl=%ld l=inf  ", depth, (long)hl) <= 0)
        goto end;
    }
    if (!asn1_print_info(bp, tag, xclass, j, (indent) ? depth : 0))
      goto end;
    if (j & V_ASN1_CONSTRUCTED) {
      ep = p + len;
      if (BIO_write(bp, "\n", 1) <= 0)
        goto end;
      if (len > length) {
        BIO_printf(bp, "length is greater than %ld\n", length);
        ret = 0;
        goto end;
      }
      if ((j == 0x21) && (len == 0)) {
        for (;;) {
          r = asn1_parse2(bp, &p, (long)(tot - p), offset + (p - *pp),
                          depth + 1, indent, dump);
          if (r == 0) {
            ret = 0;
            goto end;
          }
          if ((r == 2) || (p >= tot))
            break;
        }
      } else
        while (p < ep) {
          r = asn1_parse2(bp, &p, (long)len, offset + (p - *pp), depth + 1,
                          indent, dump);
          if (r == 0) {
            ret = 0;
            goto end;
          }
        }
    } else if (xclass != 0) {
      p += len;
      if (BIO_write(bp, "\n", 1) <= 0)
        goto end;
    } else {
      nl = 0;
      if ((tag == V_ASN1_PRINTABLESTRING) || (tag == V_ASN1_T61STRING) ||
          (tag == V_ASN1_IA5STRING) || (tag == V_ASN1_VISIBLESTRING) ||
          (tag == V_ASN1_NUMERICSTRING) || (tag == V_ASN1_UTF8STRING) ||
          (tag == V_ASN1_UTCTIME) || (tag == V_ASN1_GENERALIZEDTIME)) {
        if (BIO_write(bp, ":", 1) <= 0)
          goto end;
        if ((len > 0) && BIO_write(bp, (const char *)p, (int)len) != (int)len)
          goto end;
      } else if (tag == V_ASN1_OBJECT) {
        opp = op;
        if (d2i_ASN1_OBJECT(&o, &opp, len + hl) != NULL) {
          if (BIO_write(bp, ":", 1) <= 0)
            goto end;
          i2a_ASN1_OBJECT(bp, o);
        } else {
          if (BIO_write(bp, ":BAD OBJECT", 11) <= 0)
            goto end;
        }
      } else if (tag == V_ASN1_BOOLEAN) {
        int ii;
        opp = op;
        ii = d2i_ASN1_BOOLEAN(NULL, &opp, len + hl);
        if (ii < 0) {
          if (BIO_write(bp, "Bad boolean\n", 12) <= 0)
            goto end;
        }
        BIO_printf(bp, ":%d", ii);
      } else if (tag == V_ASN1_BMPSTRING) {
      } else if (tag == V_ASN1_OCTET_STRING) {
        int i, printable = 1;
        opp = op;
        os = d2i_ASN1_OCTET_STRING(NULL, &opp, len + hl);
        if (os != NULL && os->length > 0) {
          opp = os->data;
          for (i = 0; i < os->length; i++) {
            if (((opp[i] < ' ') && (opp[i] != '\n') && (opp[i] != '\r') &&
                 (opp[i] != '\t')) ||
                (opp[i] > '~')) {
              printable = 0;
              break;
            }
          }
          if (printable) {
            if (BIO_write(bp, ":", 1) <= 0)
              goto end;
            if (BIO_write(bp, (const char *)opp, os->length) <= 0)
              goto end;
          } else if (!dump) {
            if (BIO_write(bp, "[HEX DUMP]:", 11) <= 0)
              goto end;
            for (i = 0; i < os->length; i++) {
              if (BIO_printf(bp, "%02X", opp[i]) <= 0)
                goto end;
            }
          } else {
            if (!nl) {
              if (BIO_write(bp, "\n", 1) <= 0)
                goto end;
            }
            if (BIO_dump_indent(
                    bp, (const char *)opp,
                    ((dump == -1 || dump > os->length) ? os->length : dump),
                    dump_indent) <= 0)
              goto end;
            nl = 1;
          }
        }
        ASN1_OCTET_STRING_free(os);
        os = NULL;
      } else if (tag == V_ASN1_INTEGER) {
        ASN1_INTEGER *bs;
        int i;
        opp = op;
        bs = d2i_ASN1_INTEGER(NULL, &opp, len + hl);
        if (bs != NULL) {
          if (BIO_write(bp, ":", 1) <= 0)
            goto end;
          if (bs->type == V_ASN1_NEG_INTEGER)
            if (BIO_write(bp, "-", 1) <= 0)
              goto end;
          for (i = 0; i < bs->length; i++) {
            if (BIO_printf(bp, "%02X", bs->data[i]) <= 0)
              goto end;
          }
          if (bs->length == 0) {
            if (BIO_write(bp, "00", 2) <= 0)
              goto end;
          }
        } else {
          if (BIO_write(bp, "BAD INTEGER", 11) <= 0)
            goto end;
        }
        ASN1_INTEGER_free(bs);
      } else if (tag == V_ASN1_ENUMERATED) {
        ASN1_ENUMERATED *bs;
        int i;
        opp = op;
        bs = d2i_ASN1_ENUMERATED(NULL, &opp, len + hl);
        if (bs != NULL) {
          if (BIO_write(bp, ":", 1) <= 0)
            goto end;
          if (bs->type == V_ASN1_NEG_ENUMERATED)
            if (BIO_write(bp, "-", 1) <= 0)
              goto end;
          for (i = 0; i < bs->length; i++) {
            if (BIO_printf(bp, "%02X", bs->data[i]) <= 0)
              goto end;
          }
          if (bs->length == 0) {
            if (BIO_write(bp, "00", 2) <= 0)
              goto end;
          }
        } else {
          if (BIO_write(bp, "BAD ENUMERATED", 14) <= 0)
            goto end;
        }
        ASN1_ENUMERATED_free(bs);
      } else if (len > 0 && dump) {
        if (!nl) {
          if (BIO_write(bp, "\n", 1) <= 0)
            goto end;
        }
        if (BIO_dump_indent(bp, (const char *)p,
                            ((dump == -1 || dump > len) ? len : dump),
                            dump_indent) <= 0)
          goto end;
        nl = 1;
      }
      if (!nl) {
        if (BIO_write(bp, "\n", 1) <= 0)
          goto end;
      }
      p += len;
      if ((tag == V_ASN1_EOC) && (xclass == 0)) {
        ret = 2;
        goto end;
      }
    }
    length -= len;
  }
  ret = 1;
end:
  if (o != NULL)
    ASN1_OBJECT_free(o);
  ASN1_OCTET_STRING_free(os);
  *pp = p;
  return (ret);
}


x86 assembly (clang, -O0):
<asn1_parse2>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
movl   $0x0,-0x64(%rbp)
movq   $0x0,-0x80(%rbp)
movq   $0x0,-0x88(%rbp)
movl   $0x6,-0x8c(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x48(%rbp)
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x40(%rbp),%rcx
mov    %al,-0xb5(%rbp)
jae    1293 <asn1_parse2+0x93>
mov    -0x48(%rbp),%rax
cmp    -0x30(%rbp),%rax
setb   %al
mov    %al,-0xb5(%rbp)
mov    -0xb5(%rbp),%al
test   $0x1,%al
jne    12a6 <asn1_parse2+0xa6>
jmp    1ffb <asn1_parse2+0xdfb>
mov    -0x30(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x18(%rbp),%r8
lea    -0x30(%rbp),%rdi
lea    -0x58(%rbp),%rsi
lea    -0x5c(%rbp),%rdx
lea    -0x60(%rbp),%rcx
call   10c0 <ASN1_get_object@plt>
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
and    $0x80,%eax
cmp    $0x0,%eax
je     130b <asn1_parse2+0x10b>
mov    -0x8(%rbp),%rdi
lea    0x1d1a(%rip),%rsi
mov    $0x12,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     12ff <asn1_parse2+0xff>
jmp    2002 <asn1_parse2+0xe02>
movl   $0x0,-0x64(%rbp)
jmp    2002 <asn1_parse2+0xe02>
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x6c(%rbp)
movslq -0x6c(%rbp),%rcx
mov    -0x18(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%rdi
movslq -0x1c(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    -0x10(%rbp),%rdx
mov    (%rdx),%rdx
sub    %rdx,%rcx
add    %rcx,%rax
lea    0x1ccb(%rip),%rsi
movzbl %al,%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
cmp    $0x0,%rax
jg     1361 <asn1_parse2+0x161>
jmp    2002 <asn1_parse2+0xe02>
mov    -0x70(%rbp),%eax
mov    0x3c05(%rip),%rcx
mov    (%rcx),%ecx
or     $0x1,%ecx
cmp    %ecx,%eax
je     13ac <asn1_parse2+0x1ac>
mov    -0x8(%rbp),%rdi
mov    -0x20(%rbp),%eax
movslq -0x6c(%rbp),%rcx
mov    -0x58(%rbp),%r8
lea    0x1c8b(%rip),%rsi
movzbl %al,%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
cmp    $0x0,%rax
jg     13a7 <asn1_parse2+0x1a7>
jmp    2002 <asn1_parse2+0xe02>
jmp    13dc <asn1_parse2+0x1dc>
mov    -0x8(%rbp),%rdi
mov    -0x20(%rbp),%eax
movslq -0x6c(%rbp),%rcx
lea    0x1c71(%rip),%rsi
movzbl %al,%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
cmp    $0x0,%rax
jg     13d7 <asn1_parse2+0x1d7>
jmp    2002 <asn1_parse2+0xe02>
jmp    13dc <asn1_parse2+0x1dc>
mov    -0x8(%rbp),%rax
mov    %rax,-0xd0(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0xc4(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0xc0(%rbp)
mov    -0x70(%rbp),%eax
mov    %eax,-0xbc(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     141a <asn1_parse2+0x21a>
mov    -0x20(%rbp),%eax
mov    %eax,-0xd4(%rbp)
jmp    1427 <asn1_parse2+0x227>
xor    %eax,%eax
mov    %eax,-0xd4(%rbp)
jmp    1427 <asn1_parse2+0x227>
mov    -0xbc(%rbp),%ecx
mov    -0xc0(%rbp),%edx
mov    -0xc4(%rbp),%esi
mov    -0xd0(%rbp),%rdi
mov    -0xd4(%rbp),%r8d
call   1100 <asn1_print_info@plt>
cmp    $0x0,%eax
jne    145a <asn1_parse2+0x25a>
jmp    2002 <asn1_parse2+0xe02>
mov    -0x70(%rbp),%eax
mov    0x3b0c(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     15e2 <asn1_parse2+0x3e2>
mov    -0x30(%rbp),%rax
add    -0x58(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x8(%rbp),%rdi
lea    0x1bd9(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     149f <asn1_parse2+0x29f>
jmp    2002 <asn1_parse2+0xe02>
mov    -0x58(%rbp),%rax
cmp    -0x18(%rbp),%rax
jle    14d2 <asn1_parse2+0x2d2>
mov    -0x8(%rbp),%rdi
mov    -0x18(%rbp),%rax
lea    0x1b89(%rip),%rsi
movzbl %al,%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
movl   $0x0,-0x64(%rbp)
jmp    2002 <asn1_parse2+0xe02>
cmpl   $0x21,-0x70(%rbp)
jne    156d <asn1_parse2+0x36d>
cmpq   $0x0,-0x58(%rbp)
jne    156d <asn1_parse2+0x36d>
jmp    14ec <asn1_parse2+0x2ec>
mov    -0x8(%rbp),%rdi
mov    -0x40(%rbp),%rdx
mov    -0x30(%rbp),%rax
sub    %rax,%rdx
movslq -0x1c(%rbp),%rax
mov    -0x30(%rbp),%rcx
mov    -0x10(%rbp),%rsi
mov    (%rsi),%rsi
sub    %rsi,%rcx
add    %rcx,%rax
mov    %eax,%ecx
mov    -0x20(%rbp),%r8d
add    $0x1,%r8d
mov    -0x24(%rbp),%r9d
mov    0x10(%rbp),%eax
lea    -0x30(%rbp),%rsi
mov    %eax,(%rsp)
call   1070 <asn1_parse2@plt>
mov    %eax,-0x74(%rbp)
cmpl   $0x0,-0x74(%rbp)
jne    1546 <asn1_parse2+0x346>
movl   $0x0,-0x64(%rbp)
jmp    2002 <asn1_parse2+0xe02>
cmpl   $0x2,-0x74(%rbp)
je     155e <asn1_parse2+0x35e>
mov    -0x30(%rbp),%rax
cmp    -0x40(%rbp),%rax
jb     1563 <asn1_parse2+0x363>
jmp    1568 <asn1_parse2+0x368>
jmp    14ec <asn1_parse2+0x2ec>
jmp    15dd <asn1_parse2+0x3dd>
jmp    1572 <asn1_parse2+0x372>
mov    -0x30(%rbp),%rax
cmp    -0x38(%rbp),%rax
jae    15d8 <asn1_parse2+0x3d8>
mov    -0x8(%rbp),%rdi
mov    -0x58(%rbp),%rdx
movslq -0x1c(%rbp),%rax
mov    -0x30(%rbp),%rcx
mov    -0x10(%rbp),%rsi
mov    (%rsi),%rsi
sub    %rsi,%rcx
add    %rcx,%rax
mov    %eax,%ecx
mov    -0x20(%rbp),%r8d
add    $0x1,%r8d
mov    -0x24(%rbp),%r9d
mov    0x10(%rbp),%eax
lea    -0x30(%rbp),%rsi
mov    %eax,(%rsp)
call   1070 <asn1_parse2@plt>
mov    %eax,-0x74(%rbp)
cmpl   $0x0,-0x74(%rbp)
jne    15d3 <asn1_parse2+0x3d3>
movl   $0x0,-0x64(%rbp)
jmp    2002 <asn1_parse2+0xe02>
jmp    1572 <asn1_parse2+0x372>
jmp    15dd <asn1_parse2+0x3dd>
jmp    1fe7 <asn1_parse2+0xde7>
cmpl   $0x0,-0x60(%rbp)
je     1621 <asn1_parse2+0x421>
mov    -0x58(%rbp),%rax
add    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%rdi
lea    0x1a5c(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     161c <asn1_parse2+0x41c>
jmp    2002 <asn1_parse2+0xe02>
jmp    1fe2 <asn1_parse2+0xde2>
movl   $0x0,-0x68(%rbp)
mov    -0x5c(%rbp),%eax
mov    0x394e(%rip),%rcx
cmp    (%rcx),%eax
je     16b8 <asn1_parse2+0x4b8>
mov    -0x5c(%rbp),%eax
mov    0x3954(%rip),%rcx
cmp    (%rcx),%eax
je     16b8 <asn1_parse2+0x4b8>
mov    -0x5c(%rbp),%eax
mov    0x3932(%rip),%rcx
cmp    (%rcx),%eax
je     16b8 <asn1_parse2+0x4b8>
mov    -0x5c(%rbp),%eax
mov    0x3968(%rip),%rcx
cmp    (%rcx),%eax
je     16b8 <asn1_parse2+0x4b8>
mov    -0x5c(%rbp),%eax
mov    0x396e(%rip),%rcx
cmp    (%rcx),%eax
je     16b8 <asn1_parse2+0x4b8>
mov    -0x5c(%rbp),%eax
mov    0x3934(%rip),%rcx
cmp    (%rcx),%eax
je     16b8 <asn1_parse2+0x4b8>
mov    -0x5c(%rbp),%eax
mov    0x38c2(%rip),%rcx
cmp    (%rcx),%eax
je     16b8 <asn1_parse2+0x4b8>
mov    -0x5c(%rbp),%eax
mov    0x3908(%rip),%rcx
cmp    (%rcx),%eax
jne    1714 <asn1_parse2+0x514>
mov    -0x8(%rbp),%rdi
lea    0x19c5(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     16dc <asn1_parse2+0x4dc>
jmp    2002 <asn1_parse2+0xe02>
cmpq   $0x0,-0x58(%rbp)
jle    170f <asn1_parse2+0x50f>
mov    -0x8(%rbp),%rdi
mov    -0x30(%rbp),%rsi
mov    -0x58(%rbp),%rax
mov    %eax,%edx
call   1120 <BIO_write@plt>
mov    -0x58(%rbp),%rcx
movslq %ecx,%rcx
cmp    %rcx,%rax
je     170f <asn1_parse2+0x50f>
jmp    2002 <asn1_parse2+0xe02>
jmp    1f76 <asn1_parse2+0xd76>
mov    -0x5c(%rbp),%eax
mov    0x38aa(%rip),%rcx
cmp    (%rcx),%eax
jne    17b4 <asn1_parse2+0x5b4>
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rdx
movslq -0x6c(%rbp),%rax
add    %rax,%rdx
lea    -0x80(%rbp),%rdi
lea    -0x50(%rbp),%rsi
call   1080 <d2i_ASN1_OBJECT@plt>
cmp    $0x0,%rax
je     1786 <asn1_parse2+0x586>
mov    -0x8(%rbp),%rdi
lea    0x192d(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1774 <asn1_parse2+0x574>
jmp    2002 <asn1_parse2+0xe02>
mov    -0x8(%rbp),%rdi
mov    -0x80(%rbp),%rsi
call   1030 <i2a_ASN1_OBJECT@plt>
jmp    17af <asn1_parse2+0x5af>
mov    -0x8(%rbp),%rdi
lea    0x18d0(%rip),%rsi
mov    $0xb,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     17aa <asn1_parse2+0x5aa>
jmp    2002 <asn1_parse2+0xe02>
jmp    17af <asn1_parse2+0x5af>
jmp    1f71 <asn1_parse2+0xd71>
mov    -0x5c(%rbp),%eax
mov    0x37d2(%rip),%rcx
cmp    (%rcx),%eax
jne    1842 <asn1_parse2+0x642>
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rdx
movslq -0x6c(%rbp),%rax
add    %rax,%rdx
xor    %eax,%eax
mov    %eax,%edi
lea    -0x50(%rbp),%rsi
call   10f0 <d2i_ASN1_BOOLEAN@plt>
mov    %eax,-0x90(%rbp)
cmpl   $0x0,-0x90(%rbp)
jge    1822 <asn1_parse2+0x622>
mov    -0x8(%rbp),%rdi
lea    0x1869(%rip),%rsi
mov    $0xc,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     181d <asn1_parse2+0x61d>
jmp    2002 <asn1_parse2+0xe02>
jmp    1822 <asn1_parse2+0x622>
mov    -0x8(%rbp),%rdi
mov    -0x90(%rbp),%eax
lea    0x1847(%rip),%rsi
movzbl %al,%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
jmp    1f6c <asn1_parse2+0xd6c>
mov    -0x5c(%rbp),%eax
mov    0x370c(%rip),%rcx
cmp    (%rcx),%eax
jne    1859 <asn1_parse2+0x659>
jmp    1f67 <asn1_parse2+0xd67>
mov    -0x5c(%rbp),%eax
mov    0x3705(%rip),%rcx
cmp    (%rcx),%eax
jne    1b5e <asn1_parse2+0x95e>
movl   $0x1,-0x98(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rdx
movslq -0x6c(%rbp),%rax
add    %rax,%rdx
xor    %eax,%eax
mov    %eax,%edi
lea    -0x50(%rbp),%rsi
call   1040 <d2i_ASN1_OCTET_STRING@plt>
mov    %rax,-0x88(%rbp)
cmpq   $0x0,-0x88(%rbp)
je     1b42 <asn1_parse2+0x942>
mov    -0x88(%rbp),%rax
cmpl   $0x0,(%rax)
jle    1b42 <asn1_parse2+0x942>
mov    -0x88(%rbp),%rax
mov    0x8(%rax),%rax
mov    %rax,-0x50(%rbp)
movl   $0x0,-0x94(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x88(%rbp),%rcx
cmp    (%rcx),%eax
jge    1988 <asn1_parse2+0x788>
mov    -0x50(%rbp),%rax
movslq -0x94(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jge    1948 <asn1_parse2+0x748>
mov    -0x50(%rbp),%rax
movslq -0x94(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     1948 <asn1_parse2+0x748>
mov    -0x50(%rbp),%rax
movslq -0x94(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
je     1948 <asn1_parse2+0x748>
mov    -0x50(%rbp),%rax
movslq -0x94(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
jne    1960 <asn1_parse2+0x760>
mov    -0x50(%rbp),%rax
movslq -0x94(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7e,%eax
jle    196f <asn1_parse2+0x76f>
movl   $0x0,-0x98(%rbp)
jmp    1988 <asn1_parse2+0x788>
jmp    1974 <asn1_parse2+0x774>
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    18d3 <asn1_parse2+0x6d3>
cmpl   $0x0,-0x98(%rbp)
je     19e3 <asn1_parse2+0x7e3>
mov    -0x8(%rbp),%rdi
lea    0x16e8(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     19b9 <asn1_parse2+0x7b9>
jmp    2002 <asn1_parse2+0xe02>
mov    -0x8(%rbp),%rdi
mov    -0x50(%rbp),%rsi
mov    -0x88(%rbp),%rax
mov    (%rax),%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     19de <asn1_parse2+0x7de>
jmp    2002 <asn1_parse2+0xe02>
jmp    1b3d <asn1_parse2+0x93d>
cmpl   $0x0,0x10(%rbp)
jne    1a7e <asn1_parse2+0x87e>
mov    -0x8(%rbp),%rdi
lea    0x1686(%rip),%rsi
mov    $0xb,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1a11 <asn1_parse2+0x811>
jmp    2002 <asn1_parse2+0xe02>
movl   $0x0,-0x94(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x88(%rbp),%rcx
cmp    (%rcx),%eax
jge    1a79 <asn1_parse2+0x879>
mov    -0x8(%rbp),%rdi
mov    -0x50(%rbp),%rax
movslq -0x94(%rbp),%rcx
lea    0x1644(%rip),%rsi
movzbl (%rax,%rcx,1),%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
cmp    $0x0,%rax
jg     1a60 <asn1_parse2+0x860>
jmp    2002 <asn1_parse2+0xe02>
jmp    1a65 <asn1_parse2+0x865>
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    1a1b <asn1_parse2+0x81b>
jmp    1b38 <asn1_parse2+0x938>
cmpl   $0x0,-0x68(%rbp)
jne    1ab1 <asn1_parse2+0x8b1>
mov    -0x8(%rbp),%rdi
lea    0x15cc(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1aac <asn1_parse2+0x8ac>
jmp    2002 <asn1_parse2+0xe02>
jmp    1ab1 <asn1_parse2+0x8b1>
mov    -0x8(%rbp),%rax
mov    %rax,-0xe8(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,-0xe0(%rbp)
cmpl   $0xffffffff,0x10(%rbp)
je     1ae3 <asn1_parse2+0x8e3>
mov    0x10(%rbp),%eax
mov    -0x88(%rbp),%rcx
cmp    (%rcx),%eax
jle    1af7 <asn1_parse2+0x8f7>
mov    -0x88(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xec(%rbp)
jmp    1b00 <asn1_parse2+0x900>
mov    0x10(%rbp),%eax
mov    %eax,-0xec(%rbp)
mov    -0xe0(%rbp),%rsi
mov    -0xe8(%rbp),%rdi
mov    -0xec(%rbp),%eax
movslq %eax,%rdx
mov    -0x8c(%rbp),%ecx
call   10d0 <BIO_dump_indent@plt>
cmp    $0x0,%rax
jg     1b31 <asn1_parse2+0x931>
jmp    2002 <asn1_parse2+0xe02>
movl   $0x1,-0x68(%rbp)
jmp    1b3d <asn1_parse2+0x93d>
jmp    1b42 <asn1_parse2+0x942>
mov    -0x88(%rbp),%rdi
call   1050 <ASN1_OCTET_STRING_free@plt>
movq   $0x0,-0x88(%rbp)
jmp    1f62 <asn1_parse2+0xd62>
mov    -0x5c(%rbp),%eax
mov    0x3448(%rip),%rcx
cmp    (%rcx),%eax
jne    1cf5 <asn1_parse2+0xaf5>
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rdx
movslq -0x6c(%rbp),%rax
add    %rax,%rdx
xor    %eax,%eax
mov    %eax,%edi
lea    -0x50(%rbp),%rsi
call   10b0 <d2i_ASN1_INTEGER@plt>
mov    %rax,-0xa0(%rbp)
cmpq   $0x0,-0xa0(%rbp)
je     1cbb <asn1_parse2+0xabb>
mov    -0x8(%rbp),%rdi
lea    0x14d8(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1bc9 <asn1_parse2+0x9c9>
jmp    2002 <asn1_parse2+0xe02>
mov    -0xa0(%rbp),%rax
mov    (%rax),%rax
mov    0x339e(%rip),%rcx
cmp    (%rcx),%rax
jne    1c0c <asn1_parse2+0xa0c>
mov    -0x8(%rbp),%rdi
lea    0x14a1(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1c07 <asn1_parse2+0xa07>
jmp    2002 <asn1_parse2+0xe02>
jmp    1c0c <asn1_parse2+0xa0c>
movl   $0x0,-0xa4(%rbp)
mov    -0xa4(%rbp),%eax
mov    -0xa0(%rbp),%rcx
cmp    0x8(%rcx),%eax
jge    1c7c <asn1_parse2+0xa7c>
mov    -0x8(%rbp),%rdi
mov    -0xa0(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0xa4(%rbp),%rcx
lea    0x1441(%rip),%rsi
movzbl (%rax,%rcx,1),%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
cmp    $0x0,%rax
jg     1c63 <asn1_parse2+0xa63>
jmp    2002 <asn1_parse2+0xe02>
jmp    1c68 <asn1_parse2+0xa68>
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    1c16 <asn1_parse2+0xa16>
mov    -0xa0(%rbp),%rax
cmpl   $0x0,0x8(%rax)
jne    1cb6 <asn1_parse2+0xab6>
mov    -0x8(%rbp),%rdi
lea    0x13f9(%rip),%rsi
mov    $0x2,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1cb1 <asn1_parse2+0xab1>
jmp    2002 <asn1_parse2+0xe02>
jmp    1cb6 <asn1_parse2+0xab6>
jmp    1ce4 <asn1_parse2+0xae4>
mov    -0x8(%rbp),%rdi
lea    0x13ce(%rip),%rsi
mov    $0xb,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1cdf <asn1_parse2+0xadf>
jmp    2002 <asn1_parse2+0xe02>
jmp    1ce4 <asn1_parse2+0xae4>
mov    -0xa0(%rbp),%rdi
call   1110 <ASN1_INTEGER_free@plt>
jmp    1f5d <asn1_parse2+0xd5d>
mov    -0x5c(%rbp),%eax
mov    0x32a1(%rip),%rcx
cmp    (%rcx),%eax
jne    1e8c <asn1_parse2+0xc8c>
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rdx
movslq -0x6c(%rbp),%rax
add    %rax,%rdx
xor    %eax,%eax
mov    %eax,%edi
lea    -0x50(%rbp),%rsi
call   1090 <d2i_ASN1_ENUMERATED@plt>
mov    %rax,-0xb0(%rbp)
cmpq   $0x0,-0xb0(%rbp)
je     1e52 <asn1_parse2+0xc52>
mov    -0x8(%rbp),%rdi
lea    0x1341(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1d60 <asn1_parse2+0xb60>
jmp    2002 <asn1_parse2+0xe02>
mov    -0xb0(%rbp),%rax
mov    (%rax),%rax
mov    0x3267(%rip),%rcx
cmp    (%rcx),%rax
jne    1da3 <asn1_parse2+0xba3>
mov    -0x8(%rbp),%rdi
lea    0x130a(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1d9e <asn1_parse2+0xb9e>
jmp    2002 <asn1_parse2+0xe02>
jmp    1da3 <asn1_parse2+0xba3>
movl   $0x0,-0xb4(%rbp)
mov    -0xb4(%rbp),%eax
mov    -0xb0(%rbp),%rcx
cmp    0x8(%rcx),%eax
jge    1e13 <asn1_parse2+0xc13>
mov    -0x8(%rbp),%rdi
mov    -0xb0(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0xb4(%rbp),%rcx
lea    0x12aa(%rip),%rsi
movzbl (%rax,%rcx,1),%edx
mov    $0x0,%al
call   1060 <BIO_printf@plt>
cmp    $0x0,%rax
jg     1dfa <asn1_parse2+0xbfa>
jmp    2002 <asn1_parse2+0xe02>
jmp    1dff <asn1_parse2+0xbff>
mov    -0xb4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb4(%rbp)
jmp    1dad <asn1_parse2+0xbad>
mov    -0xb0(%rbp),%rax
cmpl   $0x0,0x8(%rax)
jne    1e4d <asn1_parse2+0xc4d>
mov    -0x8(%rbp),%rdi
lea    0x1262(%rip),%rsi
mov    $0x2,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1e48 <asn1_parse2+0xc48>
jmp    2002 <asn1_parse2+0xe02>
jmp    1e4d <asn1_parse2+0xc4d>
jmp    1e7b <asn1_parse2+0xc7b>
mov    -0x8(%rbp),%rdi
lea    0x1243(%rip),%rsi
mov    $0xe,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1e76 <asn1_parse2+0xc76>
jmp    2002 <asn1_parse2+0xe02>
jmp    1e7b <asn1_parse2+0xc7b>
mov    -0xb0(%rbp),%rdi
call   10a0 <ASN1_ENUMERATED_free@plt>
jmp    1f58 <asn1_parse2+0xd58>
cmpq   $0x0,-0x58(%rbp)
jle    1f53 <asn1_parse2+0xd53>
cmpl   $0x0,0x10(%rbp)
je     1f53 <asn1_parse2+0xd53>
cmpl   $0x0,-0x68(%rbp)
jne    1ed4 <asn1_parse2+0xcd4>
mov    -0x8(%rbp),%rdi
lea    0x11a9(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1ecf <asn1_parse2+0xccf>
jmp    2002 <asn1_parse2+0xe02>
jmp    1ed4 <asn1_parse2+0xcd4>
mov    -0x8(%rbp),%rax
mov    %rax,-0x100(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0xf8(%rbp)
cmpl   $0xffffffff,0x10(%rbp)
je     1f02 <asn1_parse2+0xd02>
movslq 0x10(%rbp),%rax
cmp    -0x58(%rbp),%rax
jle    1f12 <asn1_parse2+0xd12>
mov    -0x58(%rbp),%rax
mov    %rax,-0x108(%rbp)
jmp    1f1d <asn1_parse2+0xd1d>
movslq 0x10(%rbp),%rax
mov    %rax,-0x108(%rbp)
mov    -0xf8(%rbp),%rsi
mov    -0x100(%rbp),%rdi
mov    -0x108(%rbp),%rdx
mov    -0x8c(%rbp),%ecx
call   10d0 <BIO_dump_indent@plt>
cmp    $0x0,%rax
jg     1f4c <asn1_parse2+0xd4c>
jmp    2002 <asn1_parse2+0xe02>
movl   $0x1,-0x68(%rbp)
jmp    1f58 <asn1_parse2+0xd58>
jmp    1f5d <asn1_parse2+0xd5d>
jmp    1f62 <asn1_parse2+0xd62>
jmp    1f67 <asn1_parse2+0xd67>
jmp    1f6c <asn1_parse2+0xd6c>
jmp    1f71 <asn1_parse2+0xd71>
jmp    1f76 <asn1_parse2+0xd76>
cmpl   $0x0,-0x68(%rbp)
jne    1fa9 <asn1_parse2+0xda9>
mov    -0x8(%rbp),%rdi
lea    0x10d4(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
cmp    $0x0,%rax
jg     1fa4 <asn1_parse2+0xda4>
jmp    2002 <asn1_parse2+0xe02>
jmp    1fa9 <asn1_parse2+0xda9>
mov    -0x58(%rbp),%rax
add    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x5c(%rbp),%eax
mov    0x3039(%rip),%rcx
cmp    (%rcx),%eax
jne    1fdd <asn1_parse2+0xddd>
cmpl   $0x0,-0x60(%rbp)
jne    1fdd <asn1_parse2+0xddd>
movl   $0x2,-0x64(%rbp)
jmp    2002 <asn1_parse2+0xe02>
jmp    1fe2 <asn1_parse2+0xde2>
jmp    1fe7 <asn1_parse2+0xde7>
mov    -0x58(%rbp),%rcx
mov    -0x18(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x18(%rbp)
jmp    126c <asn1_parse2+0x6c>
movl   $0x1,-0x64(%rbp)
cmpq   $0x0,-0x80(%rbp)
je     2016 <asn1_parse2+0xe16>
mov    -0x80(%rbp),%rdi
call   10e0 <ASN1_OBJECT_free@plt>
mov    -0x88(%rbp),%rdi
call   1050 <ASN1_OCTET_STRING_free@plt>
mov    -0x30(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x64(%rbp),%eax
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<asn1_parse2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %rsi,%r12
movq   $0x0,0x60(%rsp)
mov    (%rsi),%rax
mov    %rax,0x20(%rsp)
test   %rdx,%rdx
jle    1b77 <asn1_parse2+0x977>
mov    %rdx,%r14
mov    %rdi,%r10
mov    %rax,0x40(%rsp)
add    %rdx,%rax
mov    %rax,0x58(%rsp)
mov    %ecx,0x48(%rsp)
mov    %ecx,%eax
mov    %rax,0x80(%rsp)
test   %r9d,%r9d
mov    %r8d,%eax
cmove  %r9d,%eax
mov    %eax,0x70(%rsp)
mov    %r8d,0x74(%rsp)
add    $0x1,%r8d
mov    %r8d,0x4c(%rsp)
movslq 0xc0(%rsp),%rax
mov    %rax,0x78(%rsp)
lea    0x20(%rsp),%rdi
lea    0x18(%rsp),%rsi
lea    0x3c(%rsp),%rdx
lea    0x38(%rsp),%rcx
xor    %eax,%eax
mov    %rax,0x10(%rsp)
mov    %r9d,0x6c(%rsp)
mov    %r10,0x30(%rsp)
mov    %r14,%r8
call   10c0 <ASN1_get_object@plt>
mov    %eax,%r13d
test   $0x80,%r13b
jne    1bd7 <asn1_parse2+0x9d7>
mov    0x20(%rsp),%ebp
mov    0x40(%rsp),%rbx
mov    0x80(%rsp),%rax
add    %ebx,%eax
sub    (%r12),%eax
movzbl %al,%edx
xor    %r15d,%r15d
mov    0x30(%rsp),%rdi
lea    0xd38(%rip),%rsi
xor    %eax,%eax
call   1060 <BIO_printf@plt>
test   %rax,%rax
jle    1b8d <asn1_parse2+0x98d>
mov    %r14,0x50(%rsp)
sub    %ebx,%ebp
movslq %ebp,%r14
mov    0x2c74(%rip),%rax
mov    (%rax),%eax
or     $0x1,%eax
movzbl 0x74(%rsp),%edx
cmp    %eax,%r13d
jne    1340 <asn1_parse2+0x140>
xor    %r15d,%r15d
mov    0x30(%rsp),%rbp
mov    %rbp,%rdi
lea    0xd12(%rip),%rsi
mov    %r14,%rcx
xor    %eax,%eax
call   1060 <BIO_printf@plt>
test   %rax,%rax
jg     136a <asn1_parse2+0x16a>
jmp    1b8d <asn1_parse2+0x98d>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    0x18(%rsp),%r8
xor    %r15d,%r15d
mov    0x30(%rsp),%rbp
mov    %rbp,%rdi
lea    0xcc2(%rip),%rsi
mov    %r14,%rcx
xor    %eax,%eax
call   1060 <BIO_printf@plt>
test   %rax,%rax
jle    1b8d <asn1_parse2+0x98d>
mov    0x3c(%rsp),%esi
mov    0x38(%rsp),%edx
mov    %rbp,%rdi
mov    %r13d,%ecx
mov    0x70(%rsp),%r8d
call   1100 <asn1_print_info@plt>
xor    %r15d,%r15d
test   %eax,%eax
je     1b8d <asn1_parse2+0x98d>
sub    %r14,0x50(%rsp)
mov    0x2bd7(%rip),%rax
test   %r13d,(%rax)
je     14d0 <asn1_parse2+0x2d0>
mov    0x20(%rsp),%r15
add    0x18(%rsp),%r15
mov    0x30(%rsp),%rdi
lea    0xca7(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
mov    0x18(%rsp),%rax
mov    0x50(%rsp),%rcx
cmp    %rcx,%rax
jg     1bf9 <asn1_parse2+0x9f9>
mov    %rcx,0x50(%rsp)
mov    %r12,%r14
cmp    $0x21,%r13d
mov    0x6c(%rsp),%r9d
mov    0x30(%rsp),%r10
mov    0x48(%rsp),%ebx
lea    0x20(%rsp),%rbp
mov    %r9d,%r13d
mov    %r10,%r12
jne    14b2 <asn1_parse2+0x2b2>
test   %rax,%rax
jne    14b2 <asn1_parse2+0x2b2>
mov    0x20(%rsp),%rcx
nopw   0x0(%rax,%rax,1)
mov    0x58(%rsp),%rdx
sub    %rcx,%rdx
sub    (%r14),%ecx
add    %ebx,%ecx
mov    0xc0(%rsp),%eax
mov    %eax,(%rsp)
mov    %r10,%rdi
mov    %rbp,%rsi
mov    0x4c(%rsp),%r8d
call   1070 <asn1_parse2@plt>
mov    %eax,%r15d
test   %eax,%eax
je     1b96 <asn1_parse2+0x996>
cmp    $0x2,%r15d
mov    0x48(%rsp),%ebx
lea    0x20(%rsp),%rbp
je     1810 <asn1_parse2+0x610>
mov    %r13d,%r9d
mov    %r12,%r10
mov    0x20(%rsp),%rcx
cmp    0x58(%rsp),%rcx
jb     1420 <asn1_parse2+0x220>
jmp    1810 <asn1_parse2+0x610>
nopl   0x0(%rax)
mov    0x18(%rsp),%rdx
sub    (%r14),%ecx
add    %ebx,%ecx
mov    0xc0(%rsp),%eax
mov    %eax,(%rsp)
mov    %r10,%rdi
mov    %rbp,%rsi
mov    0x4c(%rsp),%r8d
mov    %r13d,%r9d
call   1070 <asn1_parse2@plt>
mov    %r12,%r10
test   %eax,%eax
je     1b81 <asn1_parse2+0x981>
mov    0x20(%rsp),%rcx
cmp    %r15,%rcx
jb     1480 <asn1_parse2+0x280>
jmp    1810 <asn1_parse2+0x610>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmpl   $0x0,0x38(%rsp)
je     1508 <asn1_parse2+0x308>
mov    0x18(%rsp),%rax
add    %rax,0x20(%rsp)
mov    0x30(%rsp),%rdi
lea    0xb72(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
mov    %r12,%r14
jg     1810 <asn1_parse2+0x610>
jmp    1b81 <asn1_parse2+0x981>
mov    0x3c(%rsp),%eax
mov    0x2a6d(%rip),%rcx
cmp    (%rcx),%eax
je     15ec <asn1_parse2+0x3ec>
mov    0x2a76(%rip),%rcx
cmp    (%rcx),%eax
je     15ec <asn1_parse2+0x3ec>
mov    0x2a57(%rip),%rcx
cmp    (%rcx),%eax
je     15ec <asn1_parse2+0x3ec>
mov    0x2a90(%rip),%rcx
cmp    (%rcx),%eax
je     15ec <asn1_parse2+0x3ec>
mov    0x2a99(%rip),%rcx
cmp    (%rcx),%eax
je     15ec <asn1_parse2+0x3ec>
mov    0x2a62(%rip),%rcx
cmp    (%rcx),%eax
je     15ec <asn1_parse2+0x3ec>
mov    0x29f3(%rip),%rcx
cmp    (%rcx),%eax
je     15ec <asn1_parse2+0x3ec>
mov    0x2a40(%rip),%rcx
cmp    (%rcx),%eax
je     15ec <asn1_parse2+0x3ec>
mov    0x2a45(%rip),%rcx
cmp    (%rcx),%eax
mov    0x30(%rsp),%rdi
mov    %rdi,%r13
jne    163f <asn1_parse2+0x43f>
mov    0x40(%rsp),%rax
mov    %rax,0x28(%rsp)
add    0x18(%rsp),%r14
lea    0x60(%rsp),%rdi
lea    0x28(%rsp),%rsi
mov    %r14,%rdx
call   1080 <d2i_ASN1_OBJECT@plt>
mov    %r13,%rdi
test   %rax,%rax
je     17a3 <asn1_parse2+0x5a3>
lea    0xac1(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
mov    0x60(%rsp),%rsi
mov    %r13,%rdi
call   1030 <i2a_ASN1_OBJECT@plt>
jmp    16a1 <asn1_parse2+0x4a1>
mov    0x30(%rsp),%rdi
mov    %rdi,%rbp
lea    0xa8d(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
mov    0x18(%rsp),%rdx
test   %rdx,%rdx
mov    %rbp,%rdi
jle    17c0 <asn1_parse2+0x5c0>
mov    0x20(%rsp),%rsi
call   1120 <BIO_write@plt>
mov    %rbp,%rdi
movslq 0x18(%rsp),%rcx
cmp    %rcx,%rax
je     17c0 <asn1_parse2+0x5c0>
jmp    1bed <asn1_parse2+0x9ed>
mov    0x294a(%rip),%rcx
cmp    (%rcx),%eax
jne    16a9 <asn1_parse2+0x4a9>
mov    0x40(%rsp),%rax
mov    %rax,0x28(%rsp)
add    0x18(%rsp),%r14
xor    %edi,%edi
lea    0x28(%rsp),%rsi
mov    %r14,%rdx
call   10f0 <d2i_ASN1_BOOLEAN@plt>
mov    %eax,%r14d
test   %eax,%eax
jns    168c <asn1_parse2+0x48c>
mov    %r13,%rdi
lea    0x9f4(%rip),%rsi
mov    $0xc,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
movzbl %r14b,%edx
mov    %r13,%rdi
lea    0x9e0(%rip),%rsi
xor    %eax,%eax
call   1060 <BIO_printf@plt>
mov    %r13,%rdi
jmp    17c0 <asn1_parse2+0x5c0>
mov    0x28a8(%rip),%rcx
cmp    (%rcx),%eax
je     17c0 <asn1_parse2+0x5c0>
mov    0x28a9(%rip),%rcx
cmp    (%rcx),%eax
jne    185f <asn1_parse2+0x65f>
mov    0x40(%rsp),%rax
mov    %rax,0x28(%rsp)
add    0x18(%rsp),%r14
xor    %edi,%edi
lea    0x28(%rsp),%rsi
mov    %r14,%rdx
call   1040 <d2i_ASN1_OCTET_STRING@plt>
mov    %rax,%r14
test   %rax,%rax
je     1ac3 <asn1_parse2+0x8c3>
mov    (%r14),%esi
test   %esi,%esi
jle    1ac3 <asn1_parse2+0x8c3>
mov    0x8(%r14),%rcx
mov    %rcx,0x28(%rsp)
xor    %edx,%edx
mov    $0x2600,%ebp
mov    %r13,%rdi
jmp    1722 <asn1_parse2+0x522>
cmp    $0x7e,%al
ja     1737 <asn1_parse2+0x537>
add    $0x1,%rdx
cmp    %rdx,%rsi
je     1a8d <asn1_parse2+0x88d>
movzbl (%rcx,%rdx,1),%eax
cmp    $0x1f,%al
ja     1711 <asn1_parse2+0x511>
cmp    $0xd,%al
ja     1737 <asn1_parse2+0x537>
movzbl %al,%eax
bt     %rax,%rbp
jb     1715 <asn1_parse2+0x515>
cmpl   $0x0,0xc0(%rsp)
je     1b1e <asn1_parse2+0x91e>
lea    0x913(%rip),%rsi
mov    $0x1,%edx
mov    %rdi,%rbp
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1c26 <asn1_parse2+0xa26>
movslq (%r14),%rax
mov    0xc0(%rsp),%ecx
cmp    %ecx,%eax
mov    0x78(%rsp),%rdx
cmovl  %rax,%rdx
cmp    $0xffffffff,%ecx
mov    0x28(%rsp),%rsi
cmove  %rax,%rdx
mov    %rbp,%rdi
mov    $0x6,%ecx
call   10d0 <BIO_dump_indent@plt>
test   %rax,%rax
jle    1c26 <asn1_parse2+0xa26>
mov    %r14,%rdi
call   1050 <ASN1_OCTET_STRING_free@plt>
jmp    17da <asn1_parse2+0x5da>
lea    0x8b7(%rip),%rsi
mov    $0xb,%edx
call   1120 <BIO_write@plt>
mov    %r13,%rdi
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
lea    0x898(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
mov    %r12,%r14
mov    0x18(%rsp),%rax
add    %rax,0x20(%rsp)
mov    0x3c(%rsp),%eax
mov    0x2806(%rip),%rcx
cmp    (%rcx),%eax
jne    1810 <asn1_parse2+0x610>
cmpl   $0x0,0x38(%rsp)
je     1c1b <asn1_parse2+0xa1b>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    0x20(%rsp),%rax
mov    $0x1,%r15d
cmp    0x58(%rsp),%rax
jae    1b9d <asn1_parse2+0x99d>
mov    0x50(%rsp),%rbp
sub    0x18(%rsp),%rbp
cmp    %rax,0x40(%rsp)
mov    %rax,0x40(%rsp)
lea    0x20(%rsp),%rdi
lea    0x18(%rsp),%rsi
lea    0x3c(%rsp),%rdx
lea    0x38(%rsp),%rcx
mov    %r14,%r12
mov    %rbp,%r14
jb     129d <asn1_parse2+0x9d>
jmp    1ba0 <asn1_parse2+0x9a0>
mov    0x274a(%rip),%rcx
cmp    (%rcx),%eax
jne    193c <asn1_parse2+0x73c>
mov    0x40(%rsp),%rax
mov    %rax,0x28(%rsp)
add    0x18(%rsp),%r14
xor    %edi,%edi
lea    0x28(%rsp),%rsi
mov    %r14,%rdx
call   10b0 <d2i_ASN1_INTEGER@plt>
mov    %rax,%r14
mov    %r13,%rdi
test   %rax,%rax
je     1ad0 <asn1_parse2+0x8d0>
lea    0x7e6(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
mov    (%r14),%rax
mov    0x26b9(%rip),%rcx
cmp    (%rcx),%rax
jne    18e1 <asn1_parse2+0x6e1>
mov    %r13,%rdi
lea    0x7c1(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
mov    0x8(%r14),%eax
test   %eax,%eax
jle    1920 <asn1_parse2+0x720>
mov    %r13,%rdi
xor    %ebp,%ebp
mov    0x10(%r14),%rax
movzbl (%rax,%rbp,1),%edx
xor    %r15d,%r15d
lea    0x78a(%rip),%rsi
xor    %eax,%eax
call   1060 <BIO_printf@plt>
test   %rax,%rax
jle    1b8d <asn1_parse2+0x98d>
add    $0x1,%rbp
movslq 0x8(%r14),%rax
cmp    %rax,%rbp
mov    %r13,%rdi
jl     18ee <asn1_parse2+0x6ee>
test   %eax,%eax
jne    1aea <asn1_parse2+0x8ea>
mov    %r13,%rdi
lea    0x75f(%rip),%rsi
mov    $0x2,%edx
jmp    1adc <asn1_parse2+0x8dc>
mov    0x265d(%rip),%rcx
cmp    (%rcx),%eax
jne    1a19 <asn1_parse2+0x819>
mov    0x40(%rsp),%rax
mov    %rax,0x28(%rsp)
add    0x18(%rsp),%r14
xor    %edi,%edi
lea    0x28(%rsp),%rsi
mov    %r14,%rdx
call   1090 <d2i_ASN1_ENUMERATED@plt>
mov    %rax,%r14
mov    %r13,%rdi
test   %rax,%rax
je     1af7 <asn1_parse2+0x8f7>
lea    0x709(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
mov    (%r14),%rax
mov    0x263c(%rip),%rcx
cmp    (%rcx),%rax
jne    19be <asn1_parse2+0x7be>
mov    %r13,%rdi
lea    0x6e4(%rip),%rsi
mov    $0x1,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
mov    0x8(%r14),%eax
test   %eax,%eax
jle    19fd <asn1_parse2+0x7fd>
mov    %r13,%rdi
xor    %ebp,%ebp
mov    0x10(%r14),%rax
movzbl (%rax,%rbp,1),%edx
xor    %r15d,%r15d
lea    0x6ad(%rip),%rsi
xor    %eax,%eax
call   1060 <BIO_printf@plt>
test   %rax,%rax
jle    1b8d <asn1_parse2+0x98d>
add    $0x1,%rbp
movslq 0x8(%r14),%rax
cmp    %rax,%rbp
mov    %r13,%rdi
jl     19cb <asn1_parse2+0x7cb>
test   %eax,%eax
jne    1b11 <asn1_parse2+0x911>
mov    %r13,%rdi
lea    0x682(%rip),%rsi
mov    $0x2,%edx
jmp    1b03 <asn1_parse2+0x903>
cmpl   $0x0,0xc0(%rsp)
je     17c0 <asn1_parse2+0x5c0>
cmpq   $0x0,0x18(%rsp)
jle    17c0 <asn1_parse2+0x5c0>
lea    0x625(%rip),%rsi
mov    $0x1,%edx
mov    %rdi,%rbp
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
mov    0x18(%rsp),%rax
mov    0x78(%rsp),%rdx
cmp    %rdx,%rax
cmovl  %rax,%rdx
cmpl   $0xffffffff,0xc0(%rsp)
ff
mov    0x20(%rsp),%rsi
cmove  %rax,%rdx
mov    %rbp,%rdi
mov    $0x6,%ecx
call   10d0 <BIO_dump_indent@plt>
test   %rax,%rax
jg     17da <asn1_parse2+0x5da>
jmp    1bed <asn1_parse2+0x9ed>
lea    0x5f4(%rip),%rsi
mov    $0x1,%edx
mov    %rdi,%rbp
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1c26 <asn1_parse2+0xa26>
mov    0x28(%rsp),%rsi
mov    (%r14),%edx
mov    %rbp,%rdi
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1c26 <asn1_parse2+0xa26>
mov    %r14,%rdi
call   1050 <ASN1_OCTET_STRING_free@plt>
jmp    16a1 <asn1_parse2+0x4a1>
lea    0x5bd(%rip),%rsi
mov    $0xb,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
mov    %r14,%rdi
call   1110 <ASN1_INTEGER_free@plt>
jmp    16a1 <asn1_parse2+0x4a1>
lea    0x5a2(%rip),%rsi
mov    $0xe,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1bed <asn1_parse2+0x9ed>
mov    %r14,%rdi
call   10a0 <ASN1_ENUMERATED_free@plt>
jmp    16a1 <asn1_parse2+0x4a1>
lea    0x559(%rip),%rsi
mov    $0xb,%edx
call   1120 <BIO_write@plt>
test   %rax,%rax
jle    1c26 <asn1_parse2+0xa26>
cmpl   $0x0,(%r14)
jle    1ac3 <asn1_parse2+0x8c3>
xor    %ebp,%ebp
mov    0x28(%rsp),%rax
movzbl (%rax,%rbp,1),%edx
xor    %r15d,%r15d
mov    %r13,%rdi
lea    0x534(%rip),%rsi
xor    %eax,%eax
call   1060 <BIO_printf@plt>
test   %rax,%rax
jle    1c26 <asn1_parse2+0xa26>
add    $0x1,%rbp
movslq (%r14),%rax
cmp    %rax,%rbp
jl     1b40 <asn1_parse2+0x940>
jmp    1ac3 <asn1_parse2+0x8c3>
mov    $0x1,%r15d
xor    %edi,%edi
jmp    1bb4 <asn1_parse2+0x9b4>
xor    %eax,%eax
mov    %rax,0x10(%rsp)
xor    %r15d,%r15d
jmp    1b9d <asn1_parse2+0x99d>
xor    %eax,%eax
mov    %rax,0x10(%rsp)
jmp    1ba0 <asn1_parse2+0x9a0>
xor    %eax,%eax
mov    %rax,0x10(%rsp)
mov    %r14,%r12
mov    0x60(%rsp),%rdi
test   %rdi,%rdi
je     1baf <asn1_parse2+0x9af>
call   10e0 <ASN1_OBJECT_free@plt>
mov    0x10(%rsp),%rdi
call   1050 <ASN1_OCTET_STRING_free@plt>
mov    0x20(%rsp),%rax
mov    %rax,(%r12)
mov    %r15d,%eax
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    0x422(%rip),%rsi
mov    0x30(%rsp),%rdi
mov    $0x12,%edx
call   1120 <BIO_write@plt>
xor    %eax,%eax
mov    %rax,0x10(%rsp)
xor    %r15d,%r15d
jmp    1ba0 <asn1_parse2+0x9a0>
movzbl %cl,%edx
lea    0x442(%rip),%rsi
xor    %eax,%eax
mov    %rax,0x10(%rsp)
mov    0x30(%rsp),%rdi
xor    %eax,%eax
call   1060 <BIO_printf@plt>
xor    %r15d,%r15d
jmp    1ba0 <asn1_parse2+0x9a0>
mov    $0x2,%r15d
jmp    1b9d <asn1_parse2+0x99d>
mov    %r14,0x10(%rsp)
jmp    1ba0 <asn1_parse2+0x9a0>

LLVM IR (-O0):
%struct.TYPE_10__ = type { i32, i8* }
%struct.TYPE_11__ = type { i64, i32, i8* }
%struct.TYPE_12__ = type { i64, i32, i8* }
@.str = [19 x i8] c"Error in encoding\0A\00"
@.str.1 = [6 x i8] c"%5ld:\00"
@V_ASN1_CONSTRUCTED = global i32 0
@.str.2 = [22 x i8] c"d=%-2d hl=%ld l=%4ld \00"
@.str.3 = [22 x i8] c"d=%-2d hl=%ld l=inf \00"
@.str.4 = [2 x i8] c"\0A\00"
@.str.5 = [28 x i8] c"length is greater than %ld\0A\00"
@V_ASN1_PRINTABLESTRING = global i32 0
@V_ASN1_T61STRING = global i32 0
@V_ASN1_IA5STRING = global i32 0
@V_ASN1_VISIBLESTRING = global i32 0
@V_ASN1_NUMERICSTRING = global i32 0
@V_ASN1_UTF8STRING = global i32 0
@V_ASN1_UTCTIME = global i32 0
@V_ASN1_GENERALIZEDTIME = global i32 0
@.str.6 = [2 x i8] c":\00"
@V_ASN1_OBJECT = global i32 0
@.str.7 = [12 x i8] c":BAD OBJECT\00"
@V_ASN1_BOOLEAN = global i32 0
@.str.8 = [13 x i8] c"Bad boolean\0A\00"
@.str.9 = [4 x i8] c":%d\00"
@V_ASN1_BMPSTRING = global i32 0
@V_ASN1_OCTET_STRING = global i32 0
@.str.10 = [12 x i8] c"[HEX DUMP]:\00"
@.str.11 = [5 x i8] c"%02X\00"
@V_ASN1_INTEGER = global i32 0
@V_ASN1_NEG_INTEGER = global i64 0
@.str.12 = [2 x i8] c"-\00"
@.str.13 = [3 x i8] c"00\00"
@.str.14 = [12 x i8] c"BAD INTEGER\00"
@V_ASN1_ENUMERATED = global i32 0
@V_ASN1_NEG_ENUMERATED = global i64 0
@.str.15 = [15 x i8] c"BAD ENUMERATED\00"
@V_ASN1_EOC = global i32 0
define i32 @asn1_parse2(i32* %0, i8** %1, i64 %2, i32 %3, i32 %4, i32 %5, i32 %6) {
%8 = alloca i32*
%9 = alloca i8**
%10 = alloca i64
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i8*
%16 = alloca i8*
%17 = alloca i8*
%18 = alloca i8*
%19 = alloca i8*
%20 = alloca i64
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
%28 = alloca i32*
%29 = alloca %struct.TYPE_10__*
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%33 = alloca i32
%34 = alloca %struct.TYPE_11__*
%35 = alloca i32
%36 = alloca %struct.TYPE_12__*
%37 = alloca i32
store i32* %0, i32** %8
store i8** %1, i8*** %9
store i64 %2, i64* %10
store i32 %3, i32* %11
store i32 %4, i32* %12
store i32 %5, i32* %13
store i32 %6, i32* %14
store i32 0, i32* %23
store i32* null, i32** %28
store %struct.TYPE_10__* null, %struct.TYPE_10__** %29
store i32 6, i32* %30
%38 = load i8**, i8*** %9
%39 = load i8*, i8** %38
store i8* %39, i8** %15
%40 = load i8*, i8** %15
%41 = load i64, i64* %10
%42 = getelementptr inbounds i8, i8* %40, i64 %41
store i8* %42, i8** %17
%43 = load i8*, i8** %15
%44 = getelementptr inbounds i8, i8* %43, i64 -1
store i8* %44, i8** %18
br label %45
45: ; preds = %722, %7
%46 = load i8*, i8** %15
%47 = load i8*, i8** %17
%48 = icmp ult i8* %46, %47
br i1 %48, label %49, label %53
49: ; preds = %45
%50 = load i8*, i8** %18
%51 = load i8*, i8** %15
%52 = icmp ult i8* %50, %51
br label %53
53: ; preds = %49, %45
%54 = phi i1 [ false, %45 ], [ %52, %49 ]
br i1 %54, label %55, label %726
55: ; preds = %53
%56 = load i8*, i8** %15
store i8* %56, i8** %18
%57 = load i64, i64* %10
%58 = call i32 @ASN1_get_object(i8** %15, i64* %20, i32* %21, i32* %22, i64 %57)
store i32 %58, i32* %26
%59 = load i32, i32* %26
%60 = and i32 %59, 128
%61 = icmp ne i32 %60, 0
br i1 %61, label %62, label %68
62: ; preds = %55
%63 = load i32*, i32** %8
%64 = call i64 @BIO_write(i32* %63, i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0), i32 18)
%65 = icmp sle i64 %64, 0
br i1 %65, label %66, label %67
66: ; preds = %62
br label %727
67: ; preds = %62
store i32 0, i32* %23
br label %727
68: ; preds = %55
%69 = load i8*, i8** %15
%70 = load i8*, i8** %18
%71 = ptrtoint i8* %69 to i64
%72 = ptrtoint i8* %70 to i64
%73 = sub i64 %71, %72
%74 = trunc i64 %73 to i32
store i32 %74, i32* %25
%75 = load i32, i32* %25
%76 = sext i32 %75 to i64
%77 = load i64, i64* %10
%78 = sub nsw i64 %77, %76
store i64 %78, i64* %10
%79 = load i32*, i32** %8
%80 = load i32, i32* %11
%81 = sext i32 %80 to i64
%82 = load i8*, i8** %18
%83 = load i8**, i8*** %9
%84 = load i8*, i8** %83
%85 = ptrtoint i8* %82 to i64
%86 = ptrtoint i8* %84 to i64
%87 = sub i64 %85, %86
%88 = add nsw i64 %81, %87
%89 = trunc i64 %88 to i8
%90 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %79, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i8 zeroext %89)
%91 = icmp sle i64 %90, 0
br i1 %91, label %92, label %93
92: ; preds = %68
br label %727
93: ; preds = %68
%94 = load i32, i32* %26
%95 = load i32, i32* @V_ASN1_CONSTRUCTED
%96 = or i32 %95, 1
%97 = icmp ne i32 %94, %96
br i1 %97, label %98, label %109
98: ; preds = %93
%99 = load i32*, i32** %8
%100 = load i32, i32* %12
%101 = trunc i32 %100 to i8
%102 = load i32, i32* %25
%103 = sext i32 %102 to i64
%104 = load i64, i64* %20
%105 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %99, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i8 zeroext %101, i64 %103, i64 %104)
%106 = icmp sle i64 %105, 0
br i1 %106, label %107, label %108
107: ; preds = %98
br label %727
108: ; preds = %98
br label %119
109: ; preds = %93
%110 = load i32*, i32** %8
%111 = load i32, i32* %12
%112 = trunc i32 %111 to i8
%113 = load i32, i32* %25
%114 = sext i32 %113 to i64
%115 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %110, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0), i8 zeroext %112, i64 %114)
%116 = icmp sle i64 %115, 0
br i1 %116, label %117, label %118
117: ; preds = %109
br label %727
118: ; preds = %109
br label %119
119: ; preds = %118, %108
%120 = load i32*, i32** %8
%121 = load i32, i32* %21
%122 = load i32, i32* %22
%123 = load i32, i32* %26
%124 = load i32, i32* %13
%125 = icmp ne i32 %124, 0
br i1 %125, label %126, label %128
126: ; preds = %119
%127 = load i32, i32* %12
br label %129
128: ; preds = %119
br label %129
129: ; preds = %128, %126
%130 = phi i32 [ %127, %126 ], [ 0, %128 ]
%131 = call i32 @asn1_print_info(i32* %120, i32 %121, i32 %122, i32 %123, i32 %130)
%132 = icmp ne i32 %131, 0
br i1 %132, label %134, label %133
133: ; preds = %129
br label %727
134: ; preds = %129
%135 = load i32, i32* %26
%136 = load i32, i32* @V_ASN1_CONSTRUCTED
%137 = and i32 %135, %136
%138 = icmp ne i32 %137, 0
br i1 %138, label %139, label %227
139: ; preds = %134
%140 = load i8*, i8** %15
%141 = load i64, i64* %20
%142 = getelementptr inbounds i8, i8* %140, i64 %141
store i8* %142, i8** %16
%143 = load i32*, i32** %8
%144 = call i64 @BIO_write(i32* %143, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i32 1)
%145 = icmp sle i64 %144, 0
br i1 %145, label %146, label %147
146: ; preds = %139
br label %727
147: ; preds = %139
%148 = load i64, i64* %20
%149 = load i64, i64* %10
%150 = icmp sgt i64 %148, %149
br i1 %150, label %151, label %156
151: ; preds = %147
%152 = load i32*, i32** %8
%153 = load i64, i64* %10
%154 = trunc i64 %153 to i8
%155 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %152, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.5, i64 0, i64 0), i8 zeroext %154)
store i32 0, i32* %23
br label %727
156: ; preds = %147
%157 = load i32, i32* %26
%158 = icmp eq i32 %157, 33
br i1 %158, label %159, label %198
159: ; preds = %156
%160 = load i64, i64* %20
%161 = icmp eq i64 %160, 0
br i1 %161, label %162, label %198
162: ; preds = %159
br label %163
163: ; preds = %196, %162
%164 = load i32*, i32** %8
%165 = load i8*, i8** %17
%166 = load i8*, i8** %15
%167 = ptrtoint i8* %165 to i64
%168 = ptrtoint i8* %166 to i64
%169 = sub i64 %167, %168
%170 = load i32, i32* %11
%171 = sext i32 %170 to i64
%172 = load i8*, i8** %15
%173 = load i8**, i8*** %9
%174 = load i8*, i8** %173
%175 = ptrtoint i8* %172 to i64
%176 = ptrtoint i8* %174 to i64
%177 = sub i64 %175, %176
%178 = add nsw i64 %171, %177
%179 = trunc i64 %178 to i32
%180 = load i32, i32* %12
%181 = add nsw i32 %180, 1
%182 = load i32, i32* %13
%183 = load i32, i32* %14
%184 = call i32 @asn1_parse2(i32* %164, i8** %15, i64 %169, i32 %179, i32 %181, i32 %182, i32 %183)
store i32 %184, i32* %27
%185 = load i32, i32* %27
%186 = icmp eq i32 %185, 0
br i1 %186, label %187, label %188
187: ; preds = %163
store i32 0, i32* %23
br label %727
188: ; preds = %163
%189 = load i32, i32* %27
%190 = icmp eq i32 %189, 2
br i1 %190, label %195, label %191
191: ; preds = %188
%192 = load i8*, i8** %15
%193 = load i8*, i8** %17
%194 = icmp uge i8* %192, %193
br i1 %194, label %195, label %196
195: ; preds = %191, %188
br label %197
196: ; preds = %191
br label %163
197: ; preds = %195
br label %226
198: ; preds = %159, %156
br label %199
199: ; preds = %224, %198
%200 = load i8*, i8** %15
%201 = load i8*, i8** %16
%202 = icmp ult i8* %200, %201
br i1 %202, label %203, label %225
203: ; preds = %199
%204 = load i32*, i32** %8
%205 = load i64, i64* %20
%206 = load i32, i32* %11
%207 = sext i32 %206 to i64
%208 = load i8*, i8** %15
%209 = load i8**, i8*** %9
%210 = load i8*, i8** %209
%211 = ptrtoint i8* %208 to i64
%212 = ptrtoint i8* %210 to i64
%213 = sub i64 %211, %212
%214 = add nsw i64 %207, %213
%215 = trunc i64 %214 to i32
%216 = load i32, i32* %12
%217 = add nsw i32 %216, 1
%218 = load i32, i32* %13
%219 = load i32, i32* %14
%220 = call i32 @asn1_parse2(i32* %204, i8** %15, i64 %205, i32 %215, i32 %217, i32 %218, i32 %219)
store i32 %220, i32* %27
%221 = load i32, i32* %27
%222 = icmp eq i32 %221, 0
br i1 %222, label %223, label %224
223: ; preds = %203
store i32 0, i32* %23
br label %727
224: ; preds = %203
br label %199
225: ; preds = %199
br label %226
226: ; preds = %225, %197
br label %722
227: ; preds = %134
%228 = load i32, i32* %22
%229 = icmp ne i32 %228, 0
br i1 %229, label %230, label %239
230: ; preds = %227
%231 = load i64, i64* %20
%232 = load i8*, i8** %15
%233 = getelementptr inbounds i8, i8* %232, i64 %231
store i8* %233, i8** %15
%234 = load i32*, i32** %8
%235 = call i64 @BIO_write(i32* %234, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i32 1)
%236 = icmp sle i64 %235, 0
br i1 %236, label %237, label %238
237: ; preds = %230
br label %727
238: ; preds = %230
br label %721
239: ; preds = %227
store i32 0, i32* %24
%240 = load i32, i32* %21
%241 = load i32, i32* @V_ASN1_PRINTABLESTRING
%242 = icmp eq i32 %240, %241
br i1 %242, label %271, label %243
243: ; preds = %239
%244 = load i32, i32* %21
%245 = load i32, i32* @V_ASN1_T61STRING
%246 = icmp eq i32 %244, %245
br i1 %246, label %271, label %247
247: ; preds = %243
%248 = load i32, i32* %21
%249 = load i32, i32* @V_ASN1_IA5STRING
%250 = icmp eq i32 %248, %249
br i1 %250, label %271, label %251
251: ; preds = %247
%252 = load i32, i32* %21
%253 = load i32, i32* @V_ASN1_VISIBLESTRING
%254 = icmp eq i32 %252, %253
br i1 %254, label %271, label %255
255: ; preds = %251
%256 = load i32, i32* %21
%257 = load i32, i32* @V_ASN1_NUMERICSTRING
%258 = icmp eq i32 %256, %257
br i1 %258, label %271, label %259
259: ; preds = %255
%260 = load i32, i32* %21
%261 = load i32, i32* @V_ASN1_UTF8STRING
%262 = icmp eq i32 %260, %261
br i1 %262, label %271, label %263
263: ; preds = %259
%264 = load i32, i32* %21
%265 = load i32, i32* @V_ASN1_UTCTIME
%266 = icmp eq i32 %264, %265
br i1 %266, label %271, label %267
267: ; preds = %263
%268 = load i32, i32* %21
%269 = load i32, i32* @V_ASN1_GENERALIZEDTIME
%270 = icmp eq i32 %268, %269
br i1 %270, label %271, label %291
271: ; preds = %267, %263, %259, %255, %251, %247, %243, %239
%272 = load i32*, i32** %8
%273 = call i64 @BIO_write(i32* %272, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), i32 1)
%274 = icmp sle i64 %273, 0
br i1 %274, label %275, label %276
275: ; preds = %271
br label %727
276: ; preds = %271
%277 = load i64, i64* %20
%278 = icmp sgt i64 %277, 0
br i1 %278, label %279, label %290
279: ; preds = %276
%280 = load i32*, i32** %8
%281 = load i8*, i8** %15
%282 = load i64, i64* %20
%283 = trunc i64 %282 to i32
%284 = call i64 @BIO_write(i32* %280, i8* %281, i32 %283)
%285 = load i64, i64* %20
%286 = trunc i64 %285 to i32
%287 = sext i32 %286 to i64
%288 = icmp ne i64 %284, %287
br i1 %288, label %289, label %290
289: ; preds = %279
br label %727
290: ; preds = %279, %276
br label %700
291: ; preds = %267
%292 = load i32, i32* %21
%293 = load i32, i32* @V_ASN1_OBJECT
%294 = icmp eq i32 %292, %293
br i1 %294, label %295, label %319
295: ; preds = %291
%296 = load i8*, i8** %18
store i8* %296, i8** %19
%297 = load i64, i64* %20
%298 = load i32, i32* %25
%299 = sext i32 %298 to i64
%300 = add nsw i64 %297, %299
%301 = call i32* @d2i_ASN1_OBJECT(i32** %28, i8** %19, i64 %300)
%302 = icmp ne i32* %301, null
br i1 %302, label %303, label %312
303: ; preds = %295
%304 = load i32*, i32** %8
%305 = call i64 @BIO_write(i32* %304, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), i32 1)
%306 = icmp sle i64 %305, 0
br i1 %306, label %307, label %308
307: ; preds = %303
br label %727
308: ; preds = %303
%309 = load i32*, i32** %8
%310 = load i32*, i32** %28
%311 = call i32 @i2a_ASN1_OBJECT(i32* %309, i32* %310)
br label %318
312: ; preds = %295
%313 = load i32*, i32** %8
%314 = call i64 @BIO_write(i32* %313, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.7, i64 0, i64 0), i32 11)
%315 = icmp sle i64 %314, 0
br i1 %315, label %316, label %317
316: ; preds = %312
br label %727
317: ; preds = %312
br label %318
318: ; preds = %317, %308
br label %699
319: ; preds = %291
%320 = load i32, i32* %21
%321 = load i32, i32* @V_ASN1_BOOLEAN
%322 = icmp eq i32 %320, %321
br i1 %322, label %323, label %343
323: ; preds = %319
%324 = load i8*, i8** %18
store i8* %324, i8** %19
%325 = load i64, i64* %20
%326 = load i32, i32* %25
%327 = sext i32 %326 to i64
%328 = add nsw i64 %325, %327
%329 = call i32 @d2i_ASN1_BOOLEAN(i32* null, i8** %19, i64 %328)
store i32 %329, i32* %31
%330 = load i32, i32* %31
%331 = icmp slt i32 %330, 0
br i1 %331, label %332, label %338
332: ; preds = %323
%333 = load i32*, i32** %8
%334 = call i64 @BIO_write(i32* %333, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.8, i64 0, i64 0), i32 12)
%335 = icmp sle i64 %334, 0
br i1 %335, label %336, label %337
336: ; preds = %332
br label %727
337: ; preds = %332
br label %338
338: ; preds = %337, %323
%339 = load i32*, i32** %8
%340 = load i32, i32* %31
%341 = trunc i32 %340 to i8
%342 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %339, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i64 0, i64 0), i8 zeroext %341)
br label %698
343: ; preds = %319
%344 = load i32, i32* %21
%345 = load i32, i32* @V_ASN1_BMPSTRING
%346 = icmp eq i32 %344, %345
br i1 %346, label %347, label %348
347: ; preds = %343
br label %697
348: ; preds = %343
%349 = load i32, i32* %21
%350 = load i32, i32* @V_ASN1_OCTET_STRING
%351 = icmp eq i32 %349, %350
br i1 %351, label %352, label %508
352: ; preds = %348
store i32 1, i32* %33
%353 = load i8*, i8** %18
store i8* %353, i8** %19
%354 = load i64, i64* %20
%355 = load i32, i32* %25
%356 = sext i32 %355 to i64
%357 = add nsw i64 %354, %356
%358 = call %struct.TYPE_10__* @d2i_ASN1_OCTET_STRING(i32* null, i8** %19, i64 %357)
store %struct.TYPE_10__* %358, %struct.TYPE_10__** %29
%359 = load %struct.TYPE_10__*, %struct.TYPE_10__** %29
%360 = icmp ne %struct.TYPE_10__* %359, null
br i1 %360, label %361, label %505
361: ; preds = %352
%362 = load %struct.TYPE_10__*, %struct.TYPE_10__** %29
%363 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %362, i32 0, i32 0
%364 = load i32, i32* %363
%365 = icmp sgt i32 %364, 0
br i1 %365, label %366, label %505
366: ; preds = %361
%367 = load %struct.TYPE_10__*, %struct.TYPE_10__** %29
%368 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %367, i32 0, i32 1
%369 = load i8*, i8** %368
store i8* %369, i8** %19
store i32 0, i32* %32
br label %370
370: ; preds = %418, %366
%371 = load i32, i32* %32
%372 = load %struct.TYPE_10__*, %struct.TYPE_10__** %29
%373 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %372, i32 0, i32 0
%374 = load i32, i32* %373
%375 = icmp slt i32 %371, %374
br i1 %375, label %376, label %421
376: ; preds = %370
%377 = load i8*, i8** %19
%378 = load i32, i32* %32
%379 = sext i32 %378 to i64
%380 = getelementptr inbounds i8, i8* %377, i64 %379
%381 = load i8, i8* %380
%382 = zext i8 %381 to i32
%383 = icmp slt i32 %382, 32
br i1 %383, label %384, label %408
384: ; preds = %376
%385 = load i8*, i8** %19
%386 = load i32, i32* %32
%387 = sext i32 %386 to i64
%388 = getelementptr inbounds i8, i8* %385, i64 %387
%389 = load i8, i8* %388
%390 = zext i8 %389 to i32
%391 = icmp ne i32 %390, 10
br i1 %391, label %392, label %408
392: ; preds = %384
%393 = load i8*, i8** %19
%394 = load i32, i32* %32
%395 = sext i32 %394 to i64
%396 = getelementptr inbounds i8, i8* %393, i64 %395
%397 = load i8, i8* %396
%398 = zext i8 %397 to i32
%399 = icmp ne i32 %398, 13
br i1 %399, label %400, label %408
400: ; preds = %392
%401 = load i8*, i8** %19
%402 = load i32, i32* %32
%403 = sext i32 %402 to i64
%404 = getelementptr inbounds i8, i8* %401, i64 %403
%405 = load i8, i8* %404
%406 = zext i8 %405 to i32
%407 = icmp ne i32 %406, 9
br i1 %407, label %416, label %408
408: ; preds = %400, %392, %384, %376
%409 = load i8*, i8** %19
%410 = load i32, i32* %32
%411 = sext i32 %410 to i64
%412 = getelementptr inbounds i8, i8* %409, i64 %411
%413 = load i8, i8* %412
%414 = zext i8 %413 to i32
%415 = icmp sgt i32 %414, 126
br i1 %415, label %416, label %417
416: ; preds = %408, %400
store i32 0, i32* %33
br label %421
417: ; preds = %408
br label %418
418: ; preds = %417
%419 = load i32, i32* %32
%420 = add nsw i32 %419, 1
store i32 %420, i32* %32
br label %370
421: ; preds = %416, %370
%422 = load i32, i32* %33
%423 = icmp ne i32 %422, 0
br i1 %423, label %424, label %439
424: ; preds = %421
%425 = load i32*, i32** %8
%426 = call i64 @BIO_write(i32* %425, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), i32 1)
%427 = icmp sle i64 %426, 0
br i1 %427, label %428, label %429
428: ; preds = %424
br label %727
429: ; preds = %424
%430 = load i32*, i32** %8
%431 = load i8*, i8** %19
%432 = load %struct.TYPE_10__*, %struct.TYPE_10__** %29
%433 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %432, i32 0, i32 0
%434 = load i32, i32* %433
%435 = call i64 @BIO_write(i32* %430, i8* %431, i32 %434)
%436 = icmp sle i64 %435, 0
br i1 %436, label %437, label %438
437: ; preds = %429
br label %727
438: ; preds = %429
br label %504
439: ; preds = %421
%440 = load i32, i32* %14
%441 = icmp ne i32 %440, 0
br i1 %441, label %469, label %442
442: ; preds = %439
%443 = load i32*, i32** %8
%444 = call i64 @BIO_write(i32* %443, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.10, i64 0, i64 0), i32 11)
%445 = icmp sle i64 %444, 0
br i1 %445, label %446, label %447
446: ; preds = %442
br label %727
447: ; preds = %442
store i32 0, i32* %32
br label %448
448: ; preds = %465, %447
%449 = load i32, i32* %32
%450 = load %struct.TYPE_10__*, %struct.TYPE_10__** %29
%451 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %450, i32 0, i32 0
%452 = load i32, i32* %451
%453 = icmp slt i32 %449, %452
br i1 %453, label %454, label %468
454: ; preds = %448
%455 = load i32*, i32** %8
%456 = load i8*, i8** %19
%457 = load i32, i32* %32
%458 = sext i32 %457 to i64
%459 = getelementptr inbounds i8, i8* %456, i64 %458
%460 = load i8, i8* %459
%461 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %455, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.11, i64 0, i64 0), i8 zeroext %460)
%462 = icmp sle i64 %461, 0
br i1 %462, label %463, label %464
463: ; preds = %454
br label %727
464: ; preds = %454
br label %465
465: ; preds = %464
%466 = load i32, i32* %32
%467 = add nsw i32 %466, 1
store i32 %467, i32* %32
br label %448
468: ; preds = %448
br label %503
469: ; preds = %439
%470 = load i32, i32* %24
%471 = icmp ne i32 %470, 0
br i1 %471, label %478, label %472
472: ; preds = %469
%473 = load i32*, i32** %8
%474 = call i64 @BIO_write(i32* %473, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i32 1)
%475 = icmp sle i64 %474, 0
br i1 %475, label %476, label %477
476: ; preds = %472
br label %727
477: ; preds = %472
br label %478
478: ; preds = %477, %469
%479 = load i32*, i32** %8
%480 = load i8*, i8** %19
%481 = load i32, i32* %14
%482 = icmp eq i32 %481, -1
br i1 %482, label %489, label %483
483: ; preds = %478
%484 = load i32, i32* %14
%485 = load %struct.TYPE_10__*, %struct.TYPE_10__** %29
%486 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %485, i32 0, i32 0
%487 = load i32, i32* %486
%488 = icmp sgt i32 %484, %487
br i1 %488, label %489, label %493
489: ; preds = %483, %478
%490 = load %struct.TYPE_10__*, %struct.TYPE_10__** %29
%491 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %490, i32 0, i32 0
%492 = load i32, i32* %491
br label %495
493: ; preds = %483
%494 = load i32, i32* %14
br label %495
495: ; preds = %493, %489
%496 = phi i32 [ %492, %489 ], [ %494, %493 ]
%497 = sext i32 %496 to i64
%498 = load i32, i32* %30
%499 = call i64 @BIO_dump_indent(i32* %479, i8* %480, i64 %497, i32 %498)
%500 = icmp sle i64 %499, 0
br i1 %500, label %501, label %502
501: ; preds = %495
br label %727
502: ; preds = %495
store i32 1, i32* %24
br label %503
503: ; preds = %502, %468
br label %504
504: ; preds = %503, %438
br label %505
505: ; preds = %504, %361, %352
%506 = load %struct.TYPE_10__*, %struct.TYPE_10__** %29
%507 = call i32 @ASN1_OCTET_STRING_free(%struct.TYPE_10__* %506)
store %struct.TYPE_10__* null, %struct.TYPE_10__** %29
br label %696
508: ; preds = %348
%509 = load i32, i32* %21
%510 = load i32, i32* @V_ASN1_INTEGER
%511 = icmp eq i32 %509, %510
br i1 %511, label %512, label %582
512: ; preds = %508
%513 = load i8*, i8** %18
store i8* %513, i8** %19
%514 = load i64, i64* %20
%515 = load i32, i32* %25
%516 = sext i32 %515 to i64
%517 = add nsw i64 %514, %516
%518 = call %struct.TYPE_11__* @d2i_ASN1_INTEGER(i32* null, i8** %19, i64 %517)
store %struct.TYPE_11__* %518, %struct.TYPE_11__** %34
%519 = load %struct.TYPE_11__*, %struct.TYPE_11__** %34
%520 = icmp ne %struct.TYPE_11__* %519, null
br i1 %520, label %521, label %573
521: ; preds = %512
%522 = load i32*, i32** %8
%523 = call i64 @BIO_write(i32* %522, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), i32 1)
%524 = icmp sle i64 %523, 0
br i1 %524, label %525, label %526
525: ; preds = %521
br label %727
526: ; preds = %521
%527 = load %struct.TYPE_11__*, %struct.TYPE_11__** %34
%528 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %527, i32 0, i32 0
%529 = load i64, i64* %528
%530 = load i64, i64* @V_ASN1_NEG_INTEGER
%531 = icmp eq i64 %529, %530
br i1 %531, label %532, label %538
532: ; preds = %526
%533 = load i32*, i32** %8
%534 = call i64 @BIO_write(i32* %533, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.12, i64 0, i64 0), i32 1)
%535 = icmp sle i64 %534, 0
br i1 %535, label %536, label %537
536: ; preds = %532
br label %727
537: ; preds = %532
br label %538
538: ; preds = %537, %526
store i32 0, i32* %35
br label %539
539: ; preds = %558, %538
%540 = load i32, i32* %35
%541 = load %struct.TYPE_11__*, %struct.TYPE_11__** %34
%542 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %541, i32 0, i32 1
%543 = load i32, i32* %542
%544 = icmp slt i32 %540, %543
br i1 %544, label %545, label %561
545: ; preds = %539
%546 = load i32*, i32** %8
%547 = load %struct.TYPE_11__*, %struct.TYPE_11__** %34
%548 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %547, i32 0, i32 2
%549 = load i8*, i8** %548
%550 = load i32, i32* %35
%551 = sext i32 %550 to i64
%552 = getelementptr inbounds i8, i8* %549, i64 %551
%553 = load i8, i8* %552
%554 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %546, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.11, i64 0, i64 0), i8 zeroext %553)
%555 = icmp sle i64 %554, 0
br i1 %555, label %556, label %557
556: ; preds = %545
br label %727
557: ; preds = %545
br label %558
558: ; preds = %557
%559 = load i32, i32* %35
%560 = add nsw i32 %559, 1
store i32 %560, i32* %35
br label %539
561: ; preds = %539
%562 = load %struct.TYPE_11__*, %struct.TYPE_11__** %34
%563 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %562, i32 0, i32 1
%564 = load i32, i32* %563
%565 = icmp eq i32 %564, 0
br i1 %565, label %566, label %572
566: ; preds = %561
%567 = load i32*, i32** %8
%568 = call i64 @BIO_write(i32* %567, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i64 0, i64 0), i32 2)
%569 = icmp sle i64 %568, 0
br i1 %569, label %570, label %571
570: ; preds = %566
br label %727
571: ; preds = %566
br label %572
572: ; preds = %571, %561
br label %579
573: ; preds = %512
%574 = load i32*, i32** %8
%575 = call i64 @BIO_write(i32* %574, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.14, i64 0, i64 0), i32 11)
%576 = icmp sle i64 %575, 0
br i1 %576, label %577, label %578
577: ; preds = %573
br label %727
578: ; preds = %573
br label %579
579: ; preds = %578, %572
%580 = load %struct.TYPE_11__*, %struct.TYPE_11__** %34
%581 = call i32 @ASN1_INTEGER_free(%struct.TYPE_11__* %580)
br label %695
582: ; preds = %508
%583 = load i32, i32* %21
%584 = load i32, i32* @V_ASN1_ENUMERATED
%585 = icmp eq i32 %583, %584
br i1 %585, label %586, label %656
586: ; preds = %582
%587 = load i8*, i8** %18
store i8* %587, i8** %19
%588 = load i64, i64* %20
%589 = load i32, i32* %25
%590 = sext i32 %589 to i64
%591 = add nsw i64 %588, %590
%592 = call %struct.TYPE_12__* @d2i_ASN1_ENUMERATED(i32* null, i8** %19, i64 %591)
store %struct.TYPE_12__* %592, %struct.TYPE_12__** %36
%593 = load %struct.TYPE_12__*, %struct.TYPE_12__** %36
%594 = icmp ne %struct.TYPE_12__* %593, null
br i1 %594, label %595, label %647
595: ; preds = %586
%596 = load i32*, i32** %8
%597 = call i64 @BIO_write(i32* %596, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), i32 1)
%598 = icmp sle i64 %597, 0
br i1 %598, label %599, label %600
599: ; preds = %595
br label %727
600: ; preds = %595
%601 = load %struct.TYPE_12__*, %struct.TYPE_12__** %36
%602 = getelementptr inbounds %struct.TYPE_12__, %struct.TYPE_12__* %601, i32 0, i32 0
%603 = load i64, i64* %602
%604 = load i64, i64* @V_ASN1_NEG_ENUMERATED
%605 = icmp eq i64 %603, %604
br i1 %605, label %606, label %612
606: ; preds = %600
%607 = load i32*, i32** %8
%608 = call i64 @BIO_write(i32* %607, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.12, i64 0, i64 0), i32 1)
%609 = icmp sle i64 %608, 0
br i1 %609, label %610, label %611
610: ; preds = %606
br label %727
611: ; preds = %606
br label %612
612: ; preds = %611, %600
store i32 0, i32* %37
br label %613
613: ; preds = %632, %612
%614 = load i32, i32* %37
%615 = load %struct.TYPE_12__*, %struct.TYPE_12__** %36
%616 = getelementptr inbounds %struct.TYPE_12__, %struct.TYPE_12__* %615, i32 0, i32 1
%617 = load i32, i32* %616
%618 = icmp slt i32 %614, %617
br i1 %618, label %619, label %635
619: ; preds = %613
%620 = load i32*, i32** %8
%621 = load %struct.TYPE_12__*, %struct.TYPE_12__** %36
%622 = getelementptr inbounds %struct.TYPE_12__, %struct.TYPE_12__* %621, i32 0, i32 2
%623 = load i8*, i8** %622
%624 = load i32, i32* %37
%625 = sext i32 %624 to i64
%626 = getelementptr inbounds i8, i8* %623, i64 %625
%627 = load i8, i8* %626
%628 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %620, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.11, i64 0, i64 0), i8 zeroext %627)
%629 = icmp sle i64 %628, 0
br i1 %629, label %630, label %631
630: ; preds = %619
br label %727
631: ; preds = %619
br label %632
632: ; preds = %631
%633 = load i32, i32* %37
%634 = add nsw i32 %633, 1
store i32 %634, i32* %37
br label %613
635: ; preds = %613
%636 = load %struct.TYPE_12__*, %struct.TYPE_12__** %36
%637 = getelementptr inbounds %struct.TYPE_12__, %struct.TYPE_12__* %636, i32 0, i32 1
%638 = load i32, i32* %637
%639 = icmp eq i32 %638, 0
br i1 %639, label %640, label %646
640: ; preds = %635
%641 = load i32*, i32** %8
%642 = call i64 @BIO_write(i32* %641, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i64 0, i64 0), i32 2)
%643 = icmp sle i64 %642, 0
br i1 %643, label %644, label %645
644: ; preds = %640
br label %727
645: ; preds = %640
br label %646
646: ; preds = %645, %635
br label %653
647: ; preds = %586
%648 = load i32*, i32** %8
%649 = call i64 @BIO_write(i32* %648, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.15, i64 0, i64 0), i32 14)
%650 = icmp sle i64 %649, 0
br i1 %650, label %651, label %652
651: ; preds = %647
br label %727
652: ; preds = %647
br label %653
653: ; preds = %652, %646
%654 = load %struct.TYPE_12__*, %struct.TYPE_12__** %36
%655 = call i32 @ASN1_ENUMERATED_free(%struct.TYPE_12__* %654)
br label %694
656: ; preds = %582
%657 = load i64, i64* %20
%658 = icmp sgt i64 %657, 0
br i1 %658, label %659, label %693
659: ; preds = %656
%660 = load i32, i32* %14
%661 = icmp ne i32 %660, 0
br i1 %661, label %662, label %693
662: ; preds = %659
%663 = load i32, i32* %24
%664 = icmp ne i32 %663, 0
br i1 %664, label %671, label %665
665: ; preds = %662
%666 = load i32*, i32** %8
%667 = call i64 @BIO_write(i32* %666, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i32 1)
%668 = icmp sle i64 %667, 0
br i1 %668, label %669, label %670
669: ; preds = %665
br label %727
670: ; preds = %665
br label %671
671: ; preds = %670, %662
%672 = load i32*, i32** %8
%673 = load i8*, i8** %15
%674 = load i32, i32* %14
%675 = icmp eq i32 %674, -1
br i1 %675, label %681, label %676
676: ; preds = %671
%677 = load i32, i32* %14
%678 = sext i32 %677 to i64
%679 = load i64, i64* %20
%680 = icmp sgt i64 %678, %679
br i1 %680, label %681, label %683
681: ; preds = %676, %671
%682 = load i64, i64* %20
br label %686
683: ; preds = %676
%684 = load i32, i32* %14
%685 = sext i32 %684 to i64
br label %686
686: ; preds = %683, %681
%687 = phi i64 [ %682, %681 ], [ %685, %683 ]
%688 = load i32, i32* %30
%689 = call i64 @BIO_dump_indent(i32* %672, i8* %673, i64 %687, i32 %688)
%690 = icmp sle i64 %689, 0
br i1 %690, label %691, label %692
691: ; preds = %686
br label %727
692: ; preds = %686
store i32 1, i32* %24
br label %693
693: ; preds = %692, %659, %656
br label %694
694: ; preds = %693, %653
br label %695
695: ; preds = %694, %579
br label %696
696: ; preds = %695, %505
br label %697
697: ; preds = %696, %347
br label %698
698: ; preds = %697, %338
br label %699
699: ; preds = %698, %318
br label %700
700: ; preds = %699, %290
%701 = load i32, i32* %24
%702 = icmp ne i32 %701, 0
br i1 %702, label %709, label %703
703: ; preds = %700
%704 = load i32*, i32** %8
%705 = call i64 @BIO_write(i32* %704, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i32 1)
%706 = icmp sle i64 %705, 0
br i1 %706, label %707, label %708
707: ; preds = %703
br label %727
708: ; preds = %703
br label %709
709: ; preds = %708, %700
%710 = load i64, i64* %20
%711 = load i8*, i8** %15
%712 = getelementptr inbounds i8, i8* %711, i64 %710
store i8* %712, i8** %15
%713 = load i32, i32* %21
%714 = load i32, i32* @V_ASN1_EOC
%715 = icmp eq i32 %713, %714
br i1 %715, label %716, label %720
716: ; preds = %709
%717 = load i32, i32* %22
%718 = icmp eq i32 %717, 0
br i1 %718, label %719, label %720
719: ; preds = %716
store i32 2, i32* %23
br label %727
720: ; preds = %716, %709
br label %721
721: ; preds = %720, %238
br label %722
722: ; preds = %721, %226
%723 = load i64, i64* %20
%724 = load i64, i64* %10
%725 = sub nsw i64 %724, %723
store i64 %725, i64* %10
br label %45
726: ; preds = %53
store i32 1, i32* %23
br label %727
727: ; preds = %726, %719, %707, %691, %669, %651, %644, %630, %610, %599, %577, %570, %556, %536, %525, %501, %476, %463, %446, %437, %428, %336, %316, %307, %289, %275, %237, %223, %187, %151, %146, %133, %117, %107, %92, %67, %66
%728 = load i32*, i32** %28
%729 = icmp ne i32* %728, null
br i1 %729, label %730, label %733
730: ; preds = %727
%731 = load i32*, i32** %28
%732 = call i32 @ASN1_OBJECT_free(i32* %731)
br label %733
733: ; preds = %730, %727
%734 = load %struct.TYPE_10__*, %struct.TYPE_10__** %29
%735 = call i32 @ASN1_OCTET_STRING_free(%struct.TYPE_10__* %734)
%736 = load i8*, i8** %15
%737 = load i8**, i8*** %9
store i8* %736, i8** %737
%738 = load i32, i32* %23
ret i32 %738
}

LLVM IR (-O2):
%struct.TYPE_10__ = type { i32, i8* }
%struct.TYPE_11__ = type { i64, i32, i8* }
%struct.TYPE_12__ = type { i64, i32, i8* }
@.str = [19 x i8] c"Error in encoding\0A\00"
@.str.1 = [6 x i8] c"%5ld:\00"
@V_ASN1_CONSTRUCTED = global i32 0
@.str.2 = [22 x i8] c"d=%-2d hl=%ld l=%4ld \00"
@.str.3 = [22 x i8] c"d=%-2d hl=%ld l=inf \00"
@.str.4 = [2 x i8] c"\0A\00"
@.str.5 = [28 x i8] c"length is greater than %ld\0A\00"
@V_ASN1_PRINTABLESTRING = global i32 0
@V_ASN1_T61STRING = global i32 0
@V_ASN1_IA5STRING = global i32 0
@V_ASN1_VISIBLESTRING = global i32 0
@V_ASN1_NUMERICSTRING = global i32 0
@V_ASN1_UTF8STRING = global i32 0
@V_ASN1_UTCTIME = global i32 0
@V_ASN1_GENERALIZEDTIME = global i32 0
@.str.6 = [2 x i8] c":\00"
@V_ASN1_OBJECT = global i32 0
@.str.7 = [12 x i8] c":BAD OBJECT\00"
@V_ASN1_BOOLEAN = global i32 0
@.str.8 = [13 x i8] c"Bad boolean\0A\00"
@.str.9 = [4 x i8] c":%d\00"
@V_ASN1_BMPSTRING = global i32 0
@V_ASN1_OCTET_STRING = global i32 0
@.str.10 = [12 x i8] c"[HEX DUMP]:\00"
@.str.11 = [5 x i8] c"%02X\00"
@V_ASN1_INTEGER = global i32 0
@V_ASN1_NEG_INTEGER = global i64 0
@.str.12 = [2 x i8] c"-\00"
@.str.13 = [3 x i8] c"00\00"
@.str.14 = [12 x i8] c"BAD INTEGER\00"
@V_ASN1_ENUMERATED = global i32 0
@V_ASN1_NEG_ENUMERATED = global i64 0
@.str.15 = [15 x i8] c"BAD ENUMERATED\00"
@V_ASN1_EOC = global i32 0
define i32 @asn1_parse2(i32* %0, i8** nocapture %1, i64 %2, i32 %3, i32 %4, i32 %5, i32 %6) {
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i64
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32*
%14 = bitcast i8** %8 to i8*
%15 = bitcast i8** %9 to i8*
%16 = bitcast i64* %10 to i8*
%17 = bitcast i32* %11 to i8*
%18 = bitcast i32* %12 to i8*
%19 = bitcast i32** %13 to i8*
store i32* null, i32** %13
%20 = load i8*, i8** %1
store i8* %20, i8** %8
%21 = getelementptr inbounds i8, i8* %20, i64 %2
%22 = icmp sgt i64 %2, 0
br i1 %22, label %23, label %412
23: ; preds = %7
%24 = zext i32 %3 to i64
%25 = trunc i32 %4 to i8
%26 = icmp eq i32 %5, 0
%27 = select i1 %26, i32 0, i32 %4
%28 = add nsw i32 %4, 1
%29 = ptrtoint i8* %21 to i64
%30 = icmp ne i32 %6, 0
%31 = icmp eq i32 %6, -1
%32 = sext i32 %6 to i64
%33 = icmp eq i32 %6, 0
br label %34
34: ; preds = %23, %398
%35 = phi i8* [ %20, %23 ], [ %401, %398 ]
%36 = phi i64 [ %2, %23 ], [ %400, %398 ]
%37 = call i32 @ASN1_get_object(i8** %8, i64* %10, i32* %11, i32* %12, i64 %36)
%38 = and i32 %37, 128
%39 = icmp eq i32 %38, 0
br i1 %39, label %42, label %40
40: ; preds = %34
%41 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0), i32 18)
br label %405
42: ; preds = %34
%43 = load i8*, i8** %8
%44 = ptrtoint i8* %43 to i64
%45 = ptrtoint i8* %35 to i64
%46 = sub i64 %44, %45
%47 = shl i64 %46, 32
%48 = ashr exact i64 %47, 32
%49 = sub nsw i64 %36, %48
%50 = load i8*, i8** %1
%51 = ptrtoint i8* %50 to i64
%52 = add i64 %45, %24
%53 = sub i64 %52, %51
%54 = trunc i64 %53 to i8
%55 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i8 zeroext %54)
%56 = icmp slt i64 %55, 1
br i1 %56, label %405, label %57
57: ; preds = %42
%58 = load i32, i32* @V_ASN1_CONSTRUCTED
%59 = or i32 %58, 1
%60 = icmp eq i32 %37, %59
br i1 %60, label %65, label %61
61: ; preds = %57
%62 = load i64, i64* %10
%63 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %0, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i8 zeroext %25, i64 %48, i64 %62)
%64 = icmp slt i64 %63, 1
br i1 %64, label %405, label %68
65: ; preds = %57
%66 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %0, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0), i8 zeroext %25, i64 %48)
%67 = icmp slt i64 %66, 1
br i1 %67, label %405, label %68
68: ; preds = %65, %61
%69 = load i32, i32* %11
%70 = load i32, i32* %12
%71 = call i32 @asn1_print_info(i32* %0, i32 %69, i32 %70, i32 %37, i32 %27)
%72 = icmp eq i32 %71, 0
br i1 %72, label %405, label %73
73: ; preds = %68
%74 = load i32, i32* @V_ASN1_CONSTRUCTED
%75 = and i32 %74, %37
%76 = icmp eq i32 %75, 0
br i1 %76, label %121, label %77
77: ; preds = %73
%78 = load i8*, i8** %8
%79 = load i64, i64* %10
%80 = getelementptr inbounds i8, i8* %78, i64 %79
%81 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i32 1)
%82 = icmp slt i64 %81, 1
br i1 %82, label %405, label %83
83: ; preds = %77
%84 = load i64, i64* %10
%85 = icmp sgt i64 %84, %49
br i1 %85, label %86, label %89
86: ; preds = %83
%87 = trunc i64 %49 to i8
%88 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %0, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.5, i64 0, i64 0), i8 zeroext %87)
br label %405
89: ; preds = %83
%90 = icmp eq i32 %37, 33
%91 = icmp eq i64 %84, 0
%92 = select i1 %90, i1 %91, i1 false
br i1 %92, label %93, label %108
93: ; preds = %89
%94 = load i8*, i8** %8
br label %95
95: ; preds = %93, %105
%96 = phi i8* [ %94, %93 ], [ %106, %105 ]
%97 = ptrtoint i8* %96 to i64
%98 = sub i64 %29, %97
%99 = load i8*, i8** %1
%100 = ptrtoint i8* %99 to i64
%101 = sub i64 %97, %100
%102 = trunc i64 %101 to i32
%103 = add i32 %102, %3
%104 = call i32 @asn1_parse2(i32* %0, i8** %8, i64 %98, i32 %103, i32 %28, i32 %5, i32 %6)
switch i32 %104, label %105 [
i32 0, label %405
i32 2, label %398
]
105: ; preds = %95
%106 = load i8*, i8** %8
%107 = icmp ult i8* %106, %21
br i1 %107, label %95, label %398
108: ; preds = %89, %111
%109 = load i8*, i8** %8
%110 = icmp ult i8* %109, %80
br i1 %110, label %111, label %398
111: ; preds = %108
%112 = load i64, i64* %10
%113 = load i8*, i8** %1
%114 = ptrtoint i8* %109 to i64
%115 = ptrtoint i8* %113 to i64
%116 = sub i64 %114, %115
%117 = trunc i64 %116 to i32
%118 = add i32 %117, %3
%119 = call i32 @asn1_parse2(i32* %0, i8** %8, i64 %112, i32 %118, i32 %28, i32 %5, i32 %6)
%120 = icmp eq i32 %119, 0
br i1 %120, label %405, label %108
121: ; preds = %73
%122 = load i32, i32* %12
%123 = icmp eq i32 %122, 0
br i1 %123, label %130, label %124
124: ; preds = %121
%125 = load i64, i64* %10
%126 = load i8*, i8** %8
%127 = getelementptr inbounds i8, i8* %126, i64 %125
store i8* %127, i8** %8
%128 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i32 1)
%129 = icmp slt i64 %128, 1
br i1 %129, label %405, label %398
130: ; preds = %121
%131 = load i32, i32* %11
%132 = load i32, i32* @V_ASN1_PRINTABLESTRING
%133 = icmp eq i32 %131, %132
%134 = load i32, i32* @V_ASN1_T61STRING
%135 = icmp eq i32 %131, %134
%136 = select i1 %133, i1 true, i1 %135
%137 = load i32, i32* @V_ASN1_IA5STRING
%138 = icmp eq i32 %131, %137
%139 = select i1 %136, i1 true, i1 %138
%140 = load i32, i32* @V_ASN1_VISIBLESTRING
%141 = icmp eq i32 %131, %140
%142 = select i1 %139, i1 true, i1 %141
%143 = load i32, i32* @V_ASN1_NUMERICSTRING
%144 = icmp eq i32 %131, %143
%145 = select i1 %142, i1 true, i1 %144
%146 = load i32, i32* @V_ASN1_UTF8STRING
%147 = icmp eq i32 %131, %146
%148 = select i1 %145, i1 true, i1 %147
%149 = load i32, i32* @V_ASN1_UTCTIME
%150 = icmp eq i32 %131, %149
%151 = select i1 %148, i1 true, i1 %150
%152 = load i32, i32* @V_ASN1_GENERALIZEDTIME
%153 = icmp eq i32 %131, %152
%154 = select i1 %151, i1 true, i1 %153
br i1 %154, label %155, label %169
155: ; preds = %130
%156 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), i32 1)
%157 = icmp slt i64 %156, 1
br i1 %157, label %405, label %158
158: ; preds = %155
%159 = load i64, i64* %10
%160 = icmp sgt i64 %159, 0
br i1 %160, label %161, label %385
161: ; preds = %158
%162 = load i8*, i8** %8
%163 = trunc i64 %159 to i32
%164 = call i64 @BIO_write(i32* %0, i8* %162, i32 %163)
%165 = load i64, i64* %10
%166 = shl i64 %165, 32
%167 = ashr exact i64 %166, 32
%168 = icmp eq i64 %164, %167
br i1 %168, label %385, label %405
169: ; preds = %130
%170 = load i32, i32* @V_ASN1_OBJECT
%171 = icmp eq i32 %131, %170
br i1 %171, label %172, label %186
172: ; preds = %169
store i8* %35, i8** %9
%173 = load i64, i64* %10
%174 = add nsw i64 %173, %48
%175 = call i32* @d2i_ASN1_OBJECT(i32** %13, i8** %9, i64 %174)
%176 = icmp eq i32* %175, null
br i1 %176, label %183, label %177
177: ; preds = %172
%178 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), i32 1)
%179 = icmp slt i64 %178, 1
br i1 %179, label %405, label %180
180: ; preds = %177
%181 = load i32*, i32** %13
%182 = call i32 @i2a_ASN1_OBJECT(i32* %0, i32* %181)
br label %385
183: ; preds = %172
%184 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.7, i64 0, i64 0), i32 11)
%185 = icmp slt i64 %184, 1
br i1 %185, label %405, label %385
186: ; preds = %169
%187 = load i32, i32* @V_ASN1_BOOLEAN
%188 = icmp eq i32 %131, %187
br i1 %188, label %189, label %200
189: ; preds = %186
store i8* %35, i8** %9
%190 = load i64, i64* %10
%191 = add nsw i64 %190, %48
%192 = call i32 @d2i_ASN1_BOOLEAN(i32* null, i8** %9, i64 %191)
%193 = icmp slt i32 %192, 0
br i1 %193, label %194, label %197
194: ; preds = %189
%195 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.8, i64 0, i64 0), i32 12)
%196 = icmp slt i64 %195, 1
br i1 %196, label %405, label %197
197: ; preds = %189, %194
%198 = trunc i32 %192 to i8
%199 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %0, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i64 0, i64 0), i8 zeroext %198)
br label %385
200: ; preds = %186
%201 = load i32, i32* @V_ASN1_BMPSTRING
%202 = icmp eq i32 %131, %201
br i1 %202, label %385, label %203
203: ; preds = %200
%204 = load i32, i32* @V_ASN1_OCTET_STRING
%205 = icmp eq i32 %131, %204
br i1 %205, label %206, label %270
206: ; preds = %203
store i8* %35, i8** %9
%207 = load i64, i64* %10
%208 = add nsw i64 %207, %48
%209 = call %struct.TYPE_10__* @d2i_ASN1_OCTET_STRING(i32* null, i8** %9, i64 %208)
%210 = icmp eq %struct.TYPE_10__* %209, null
br i1 %210, label %381, label %211
211: ; preds = %206
%212 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %209, i64 0, i32 0
%213 = load i32, i32* %212
%214 = icmp sgt i32 %213, 0
br i1 %214, label %215, label %381
215: ; preds = %211
%216 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %209, i64 0, i32 1
%217 = load i8*, i8** %216
store i8* %217, i8** %9
%218 = zext i32 %213 to i64
br label %219
219: ; preds = %215, %228
%220 = phi i64 [ 0, %215 ], [ %229, %228 ]
%221 = getelementptr inbounds i8, i8* %217, i64 %220
%222 = load i8, i8* %221
%223 = freeze i8 %222
%224 = icmp ugt i8 %223, 31
br i1 %224, label %226, label %225
225: ; preds = %219
switch i8 %223, label %239 [
i8 13, label %228
i8 10, label %228
i8 9, label %228
]
226: ; preds = %219
%227 = icmp ugt i8 %223, 126
br i1 %227, label %239, label %228
228: ; preds = %225, %225, %225, %226
%229 = add nuw nsw i64 %220, 1
%230 = icmp eq i64 %229, %218
br i1 %230, label %231, label %219
231: ; preds = %228
%232 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), i32 1)
%233 = icmp slt i64 %232, 1
br i1 %233, label %405, label %234
234: ; preds = %231
%235 = load i8*, i8** %9
%236 = load i32, i32* %212
%237 = call i64 @BIO_write(i32* %0, i8* %235, i32 %236)
%238 = icmp slt i64 %237, 1
br i1 %238, label %405, label %381
239: ; preds = %226, %225
br i1 %33, label %240, label %258
240: ; preds = %239
%241 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.10, i64 0, i64 0), i32 11)
%242 = icmp slt i64 %241, 1
br i1 %242, label %405, label %243
243: ; preds = %240
%244 = load i32, i32* %212
%245 = icmp sgt i32 %244, 0
br i1 %245, label %250, label %381
246: ; preds = %250
%247 = load i32, i32* %212
%248 = sext i32 %247 to i64
%249 = icmp slt i64 %257, %248
br i1 %249, label %250, label %381
250: ; preds = %243, %246
%251 = phi i64 [ %257, %246 ], [ 0, %243 ]
%252 = load i8*, i8** %9
%253 = getelementptr inbounds i8, i8* %252, i64 %251
%254 = load i8, i8* %253
%255 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.11, i64 0, i64 0), i8 zeroext %254)
%256 = icmp slt i64 %255, 1
%257 = add nuw nsw i64 %251, 1
br i1 %256, label %405, label %246
258: ; preds = %239
%259 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i32 1)
%260 = icmp slt i64 %259, 1
br i1 %260, label %405, label %261
261: ; preds = %258
%262 = load i8*, i8** %9
%263 = load i32, i32* %212
%264 = icmp slt i32 %263, %6
%265 = select i1 %31, i1 true, i1 %264
%266 = sext i32 %263 to i64
%267 = select i1 %265, i64 %266, i64 %32
%268 = call i64 @BIO_dump_indent(i32* %0, i8* %262, i64 %267, i32 6)
%269 = icmp slt i64 %268, 1
br i1 %269, label %405, label %383
270: ; preds = %203
%271 = load i32, i32* @V_ASN1_INTEGER
%272 = icmp eq i32 %131, %271
br i1 %272, label %273, label %318
273: ; preds = %270
store i8* %35, i8** %9
%274 = load i64, i64* %10
%275 = add nsw i64 %274, %48
%276 = call %struct.TYPE_11__* @d2i_ASN1_INTEGER(i32* null, i8** %9, i64 %275)
%277 = icmp eq %struct.TYPE_11__* %276, null
br i1 %277, label %313, label %278
278: ; preds = %273
%279 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), i32 1)
%280 = icmp slt i64 %279, 1
br i1 %280, label %405, label %281
281: ; preds = %278
%282 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %276, i64 0, i32 0
%283 = load i64, i64* %282
%284 = load i64, i64* @V_ASN1_NEG_INTEGER
%285 = icmp eq i64 %283, %284
br i1 %285, label %286, label %289
286: ; preds = %281
%287 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.12, i64 0, i64 0), i32 1)
%288 = icmp slt i64 %287, 1
br i1 %288, label %405, label %289
289: ; preds = %286, %281
%290 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %276, i64 0, i32 1
%291 = load i32, i32* %290
%292 = icmp sgt i32 %291, 0
br i1 %292, label %293, label %307
293: ; preds = %289
%294 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %276, i64 0, i32 2
br label %299
295: ; preds = %299
%296 = load i32, i32* %290
%297 = sext i32 %296 to i64
%298 = icmp slt i64 %306, %297
br i1 %298, label %299, label %307
299: ; preds = %293, %295
%300 = phi i64 [ 0, %293 ], [ %306, %295 ]
%301 = load i8*, i8** %294
%302 = getelementptr inbounds i8, i8* %301, i64 %300
%303 = load i8, i8* %302
%304 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.11, i64 0, i64 0), i8 zeroext %303)
%305 = icmp slt i64 %304, 1
%306 = add nuw nsw i64 %300, 1
br i1 %305, label %405, label %295
307: ; preds = %295, %289
%308 = phi i32 [ %291, %289 ], [ %296, %295 ]
%309 = icmp eq i32 %308, 0
br i1 %309, label %310, label %316
310: ; preds = %307
%311 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i64 0, i64 0), i32 2)
%312 = icmp slt i64 %311, 1
br i1 %312, label %405, label %316
313: ; preds = %273
%314 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.14, i64 0, i64 0), i32 11)
%315 = icmp slt i64 %314, 1
br i1 %315, label %405, label %316
316: ; preds = %310, %307, %313
%317 = call i32 @ASN1_INTEGER_free(%struct.TYPE_11__* %276)
br label %385
318: ; preds = %270
%319 = load i32, i32* @V_ASN1_ENUMERATED
%320 = icmp eq i32 %131, %319
br i1 %320, label %321, label %366
321: ; preds = %318
store i8* %35, i8** %9
%322 = load i64, i64* %10
%323 = add nsw i64 %322, %48
%324 = call %struct.TYPE_12__* @d2i_ASN1_ENUMERATED(i32* null, i8** %9, i64 %323)
%325 = icmp eq %struct.TYPE_12__* %324, null
br i1 %325, label %361, label %326
326: ; preds = %321
%327 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), i32 1)
%328 = icmp slt i64 %327, 1
br i1 %328, label %405, label %329
329: ; preds = %326
%330 = getelementptr inbounds %struct.TYPE_12__, %struct.TYPE_12__* %324, i64 0, i32 0
%331 = load i64, i64* %330
%332 = load i64, i64* @V_ASN1_NEG_ENUMERATED
%333 = icmp eq i64 %331, %332
br i1 %333, label %334, label %337
334: ; preds = %329
%335 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.12, i64 0, i64 0), i32 1)
%336 = icmp slt i64 %335, 1
br i1 %336, label %405, label %337
337: ; preds = %334, %329
%338 = getelementptr inbounds %struct.TYPE_12__, %struct.TYPE_12__* %324, i64 0, i32 1
%339 = load i32, i32* %338
%340 = icmp sgt i32 %339, 0
br i1 %340, label %341, label %355
341: ; preds = %337
%342 = getelementptr inbounds %struct.TYPE_12__, %struct.TYPE_12__* %324, i64 0, i32 2
br label %347
343: ; preds = %347
%344 = load i32, i32* %338
%345 = sext i32 %344 to i64
%346 = icmp slt i64 %354, %345
br i1 %346, label %347, label %355
347: ; preds = %341, %343
%348 = phi i64 [ 0, %341 ], [ %354, %343 ]
%349 = load i8*, i8** %342
%350 = getelementptr inbounds i8, i8* %349, i64 %348
%351 = load i8, i8* %350
%352 = call i64 (i32*, i8*, i8, ...) @BIO_printf(i32* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.11, i64 0, i64 0), i8 zeroext %351)
%353 = icmp slt i64 %352, 1
%354 = add nuw nsw i64 %348, 1
br i1 %353, label %405, label %343
355: ; preds = %343, %337
%356 = phi i32 [ %339, %337 ], [ %344, %343 ]
%357 = icmp eq i32 %356, 0
br i1 %357, label %358, label %364
358: ; preds = %355
%359 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i64 0, i64 0), i32 2)
%360 = icmp slt i64 %359, 1
br i1 %360, label %405, label %364
361: ; preds = %321
%362 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.15, i64 0, i64 0), i32 14)
%363 = icmp slt i64 %362, 1
br i1 %363, label %405, label %364
364: ; preds = %358, %355, %361
%365 = call i32 @ASN1_ENUMERATED_free(%struct.TYPE_12__* %324)
br label %385
366: ; preds = %318
%367 = load i64, i64* %10
%368 = icmp sgt i64 %367, 0
%369 = and i1 %30, %368
br i1 %369, label %370, label %385
370: ; preds = %366
%371 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i32 1)
%372 = icmp slt i64 %371, 1
br i1 %372, label %405, label %373
373: ; preds = %370
%374 = load i8*, i8** %8
%375 = load i64, i64* %10
%376 = icmp slt i64 %375, %32
%377 = select i1 %31, i1 true, i1 %376
%378 = select i1 %377, i64 %375, i64 %32
%379 = call i64 @BIO_dump_indent(i32* %0, i8* %374, i64 %378, i32 6)
%380 = icmp slt i64 %379, 1
br i1 %380, label %405, label %388
381: ; preds = %246, %243, %234, %211, %206
%382 = call i32 @ASN1_OCTET_STRING_free(%struct.TYPE_10__* %209)
br label %385
383: ; preds = %261
%384 = call i32 @ASN1_OCTET_STRING_free(%struct.TYPE_10__* %209)
br label %388
385: ; preds = %197, %366, %364, %316, %200, %183, %180, %158, %161, %381
%386 = call i64 @BIO_write(i32* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), i32 1)
%387 = icmp slt i64 %386, 1
br i1 %387, label %405, label %388
388: ; preds = %373, %383, %385
%389 = load i64, i64* %10
%390 = load i8*, i8** %8
%391 = getelementptr inbounds i8, i8* %390, i64 %389
store i8* %391, i8** %8
%392 = load i32, i32* %11
%393 = load i32, i32* @V_ASN1_EOC
%394 = icmp eq i32 %392, %393
%395 = load i32, i32* %12
%396 = icmp eq i32 %395, 0
%397 = select i1 %394, i1 %396, i1 false
br i1 %397, label %405, label %398
398: ; preds = %108, %95, %105, %124, %388
%399 = load i64, i64* %10
%400 = sub nsw i64 %49, %399
%401 = load i8*, i8** %8
%402 = icmp ult i8* %401, %21
%403 = icmp ult i8* %35, %401
%404 = and i1 %402, %403
br i1 %404, label %34, label %405
405: ; preds = %42, %61, %65, %68, %77, %124, %155, %161, %177, %183, %370, %373, %385, %388, %398, %194, %231, %234, %240, %258, %261, %278, %286, %310, %313, %326, %334, %358, %361, %111, %95, %347, %299, %250, %40, %86
%406 = phi %struct.TYPE_10__* [ null, %40 ], [ null, %86 ], [ %209, %250 ], [ null, %299 ], [ null, %347 ], [ null, %95 ], [ null, %111 ], [ null, %361 ], [ null, %358 ], [ null, %334 ], [ null, %326 ], [ null, %313 ], [ null, %310 ], [ null, %286 ], [ null, %278 ], [ %209, %261 ], [ %209, %258 ], [ %209, %240 ], [ %209, %234 ], [ %209, %231 ], [ null, %194 ], [ null, %398 ], [ null, %388 ], [ null, %385 ], [ null, %373 ], [ null, %370 ], [ null, %183 ], [ null, %177 ], [ null, %161 ], [ null, %155 ], [ null, %124 ], [ null, %77 ], [ null, %68 ], [ null, %65 ], [ null, %61 ], [ null, %42 ]
%407 = phi i32 [ 0, %40 ], [ 0, %86 ], [ 0, %250 ], [ 0, %299 ], [ 0, %347 ], [ %104, %95 ], [ 0, %111 ], [ 0, %361 ], [ 0, %358 ], [ 0, %334 ], [ 0, %326 ], [ 0, %313 ], [ 0, %310 ], [ 0, %286 ], [ 0, %278 ], [ 0, %261 ], [ 0, %258 ], [ 0, %240 ], [ 0, %234 ], [ 0, %231 ], [ 0, %194 ], [ 1, %398 ], [ 2, %388 ], [ 0, %385 ], [ 0, %373 ], [ 0, %370 ], [ 0, %183 ], [ 0, %177 ], [ 0, %161 ], [ 0, %155 ], [ 0, %124 ], [ 0, %77 ], [ 0, %68 ], [ 0, %65 ], [ 0, %61 ], [ 0, %42 ]
%408 = load i32*, i32** %13
%409 = icmp eq i32* %408, null
br i1 %409, label %412, label %410
410: ; preds = %405
%411 = call i32 @ASN1_OBJECT_free(i32* %408)
br label %412
412: ; preds = %7, %410, %405
%413 = phi i32 [ %407, %410 ], [ %407, %405 ], [ 1, %7 ]
%414 = phi %struct.TYPE_10__* [ %406, %410 ], [ %406, %405 ], [ null, %7 ]
%415 = call i32 @ASN1_OCTET_STRING_free(%struct.TYPE_10__* %414)
%416 = load i8*, i8** %8
store i8* %416, i8** %1
ret i32 %413
}