// File: /workspace/github_c_makefile_star2_O2/sisshiki1969[P]monocc/src/tokenize.c
// Function: read_token
Token *read_token(TokContext *ctx) {
  char *p = ctx->p;
  FileInfo *fi = ctx->file_info;
  Token *cur = ctx->cur;
  skip_whitespace(&p);
  if (strncmp(p, "//", 2) == 0) {
    p += 2;
    char *next = strchr(p, '\n');
    p = next + 1;
  } else if (strncmp(p, "/*", 2) == 0) {
    p += 2;
    char *next = strstr(p, "*/");
    if (!next) {
      error_at_char(fi, p - 2, "Comment unclosed at end of file.");
    }
    p = next + 2;
  } else if (strncmp(p, "__LINE__", 8) == 0) {
    cur = new_token(TK_MACRO, cur, p, 8);
    p += 8;
  } else if (isdigit(*p)) {
    bool signed_int = true;
    bool long_int = false;
    long num = *p - '0';
    int len = 1;
    while (isdigit(p[len])) {
      num *= 10;
      num += p[len] - '0';
      len++;
    }
    if (p[len] == 'u' || p[len] == 'U') {
      signed_int = false;
      len++;
    }
    if (p[len] == 'l' || p[len] == 'L') {
      len++;
      long_int = true;
      if (p[len] == 'l' || p[len] == 'L') len++;
    }
    cur = new_token(TK_NUM, cur, p, len);
    p += len;
    if (signed_int) {
      if (long_int) {
        cur->num_ty = new_type_long();
      } else {
        cur->num_ty = new_type_int();
      }
    } else {
      if (long_int) {
        cur->num_ty = new_type_ulong();
      } else {
        cur->num_ty = new_type_uint();
      }
    }
    cur->num_val = num;
  } else if (isalpha(*p) || *p == '_') {
    int len = 1;
    while (is_ident_char(p[len])) len++;

    if (is_reserved(p, len, "return")) {
      cur = new_token(TK_RETURN, cur, p, len);
    } else if (is_reserved(p, len, "if")) {
      cur = new_token(TK_IF, cur, p, len);
    } else if (is_reserved(p, len, "else")) {
      cur = new_token(TK_ELSE, cur, p, len);
    } else if (is_reserved(p, len, "while")) {
      cur = new_token(TK_WHILE, cur, p, len);
    } else if (is_reserved(p, len, "for")) {
      cur = new_token(TK_FOR, cur, p, len);
    } else if (is_reserved(p, len, "switch")) {
      cur = new_token(TK_SWITCH, cur, p, len);
    } else if (is_reserved(p, len, "case")) {
      cur = new_token(TK_CASE, cur, p, len);
    } else if (is_reserved(p, len, "default")) {
      cur = new_token(TK_DEFAULT, cur, p, len);
    } else if (is_reserved(p, len, "break")) {
      cur = new_token(TK_BREAK, cur, p, len);
    } else if (is_reserved(p, len, "continue")) {
      cur = new_token(TK_CONTINUE, cur, p, len);
    } else if (is_reserved(p, len, "int")) {
      cur = new_token(TK_INT, cur, p, len);
    } else if (is_reserved(p, len, "char")) {
      cur = new_token(TK_CHAR, cur, p, len);
    } else if (is_reserved(p, len, "bool")) {
      cur = new_token(TK_BOOL, cur, p, len);
    } else if (is_reserved(p, len, "void")) {
      cur = new_token(TK_VOID, cur, p, len);
    } else if (is_reserved(p, len, "short")) {
      cur = new_token(TK_SHORT, cur, p, len);
    } else if (is_reserved(p, len, "long")) {
      cur = new_token(TK_LONG, cur, p, len);
    } else if (is_reserved(p, len, "signed")) {
      cur = new_token(TK_SIGNED, cur, p, len);
    } else if (is_reserved(p, len, "unsigned")) {
      cur = new_token(TK_UNSIGNED, cur, p, len);
    } else if (is_reserved(p, len, "sizeof")) {
      cur = new_token(TK_SIZEOF, cur, p, len);
    } else if (is_reserved(p, len, "struct")) {
      cur = new_token(TK_STRUCT, cur, p, len);
    } else if (is_reserved(p, len, "enum")) {
      cur = new_token(TK_ENUM, cur, p, len);
    } else if (is_reserved(p, len, "union")) {
      cur = new_token(TK_UNION, cur, p, len);
    } else if (is_reserved(p, len, "typedef")) {
      cur = new_token(TK_TYPEDEF, cur, p, len);
    } else if (is_reserved(p, len, "extern")) {
      cur = new_token(TK_EXTERN, cur, p, len);
    } else {
      cur = new_token(TK_IDENT, cur, p, len);
    }
    p += len;
  } else if (*p == '+') {
    if (*(p + 1) == '=') {
      cur = new_token(TK_ASSIGN_ADD, cur, p, 2);
      p += 2;
    } else if (*(p + 1) == '+') {
      cur = new_token(TK_INC, cur, p, 2);
      p += 2;
    } else
      cur = new_token(TK_ADD, cur, p++, 1);
  } else if (*p == '-') {
    if (*(p + 1) == '=') {
      cur = new_token(TK_ASSIGN_SUB, cur, p, 2);
      p += 2;
    } else if (*(p + 1) == '-') {
      cur = new_token(TK_DEC, cur, p, 2);
      p += 2;
    } else if (*(p + 1) == '>') {
      cur = new_token(TK_ARROW, cur, p, 2);
      p += 2;
    } else
      cur = new_token(TK_SUB, cur, p++, 1);
  } else if (*p == '*') {
    if (*(p + 1) == '=') {
      cur = new_token(TK_ASSIGN_MUL, cur, p, 2);
      p += 2;
    } else
      cur = new_token(TK_MUL, cur, p++, 1);
  } else if (*p == '/') {
    if (*(p + 1) == '=') {
      cur = new_token(TK_ASSIGN_DIV, cur, p, 2);
      p += 2;
    } else
      cur = new_token(TK_DIV, cur, p++, 1);
  } else if (*p == ',') {
    cur = new_token(TK_COMMA, cur, p++, 1);
  } else if (*p == '~') {
    cur = new_token(TK_TILDA, cur, p++, 1);
  } else if (*p == '=') {
    p++;
    if (*p == '=') {
      cur = new_token(TK_EQ, cur, p - 1, 2);
      p++;
    } else {
      cur = new_token(TK_ASSIGN, cur, p - 1, 1);
    }
  } else if (*p == '>') {
    p++;
    if (*p == '=') {
      cur = new_token(TK_GE, cur, p - 1, 2);
      p++;
    } else if (*p == '>') {
      cur = new_token(TK_SHR, cur, p - 1, 2);
      p++;
    } else {
      cur = new_token(TK_GT, cur, p - 1, 1);
    }
  } else if (*p == '<') {
    p++;
    if (*p == '=') {
      cur = new_token(TK_LE, cur, p - 1, 2);
      p++;
    } else if (*p == '<') {
      cur = new_token(TK_SHL, cur, p - 1, 2);
      p++;
    } else {
      cur = new_token(TK_LT, cur, p - 1, 1);
    }
  } else if (*p == '!') {
    p++;
    if (*p == '=') {
      cur = new_token(TK_NEQ, cur, p - 1, 2);
      p++;
    } else {
      cur = new_token(TK_NOT, cur, p - 1, 1);
    }
  } else if (*p == ';') {
    cur = new_token(TK_SEMI, cur, p++, 1);
  } else if (*p == ':') {
    cur = new_token(TK_COLON, cur, p++, 1);
  } else if (*p == '(') {
    cur = new_token(TK_OP_PAREN, cur, p++, 1);
  } else if (*p == ')') {
    cur = new_token(TK_CL_PAREN, cur, p++, 1);
  } else if (*p == '{') {
    cur = new_token(TK_OP_BRACE, cur, p++, 1);
  } else if (*p == '}') {
    cur = new_token(TK_CL_BRACE, cur, p++, 1);
  } else if (*p == '[') {
    cur = new_token(TK_OP_BRACKET, cur, p++, 1);
  } else if (*p == ']') {
    cur = new_token(TK_CL_BRACKET, cur, p++, 1);
  } else if (*p == '^') {
    cur = new_token(TK_XOR, cur, p++, 1);
  } else if (*p == '&') {
    if (*(p + 1) == '&') {
      cur = new_token(TK_LAND, cur, p, 2);
      p += 2;
    } else
      cur = new_token(TK_AND, cur, p++, 1);
  } else if (*p == '|') {
    if (*(p + 1) == '|') {
      cur = new_token(TK_LOR, cur, p, 2);
      p += 2;
    } else
      cur = new_token(TK_OR, cur, p++, 1);
  } else if (*p == '.') {
    if (*(p + 1) == '.' && *(p + 2) == '.') {
      cur = new_token(TK_ELLIPSIS, cur, p, 3);
      p += 3;
    } else
      cur = new_token(TK_DOT, cur, p++, 1);
  } else if (*p == '"') {
    p++;
    char *src = p;
    while (*src && *src != '"') {
      if (*src != '\\') {
        src++;
      } else {
        src++;
        switch (*src) {
          case '0':
          case 'a':
          case 'b':
          case 'f':
          case 'n':
          case 'r':
          case 't':
          case '\\':
          case '\'':
          case '\"':
            src++;
            break;
          default:
            error_at_char(fi, src - 1, "Unsupported escape sequence.");
        }
      }
    }
    if (!*src) error_at_char(fi, src - 1, "Missing closing quote.");
    cur = new_token(TK_STR, cur, p, (int)(src - p));
    p = src + 1;
  } else if (*p == '\'') {
    char *org_p = p;
    p++;
    char ch;
    if (*p != '\\') {
      ch = *p;
    } else {
      p++;
      switch (*p) {
        case '0':
          ch = '\0';
          break;
        case 'a':
          ch = '\a';
          break;
        case 'b':
          ch = '\b';
          break;
        case 'f':
          ch = '\f';
          break;
        case 'n':
          ch = '\n';
          break;
        case 'r':
          ch = '\r';
          break;
        case 't':
          ch = '\t';
          break;
        case '\\':
          ch = '\\';
          break;
        case '\'':
          ch = '\'';
          break;
        case '\"':
          ch = '\"';
          break;
        default:
          error_at_token(token, "Unsupported escape sequence.");
      }
    }

    p++;
    if (*p++ != '\'')
      error_at_char(fi, p - 1, "Unexpected token. Expected \"'\".");
    cur = new_token(TK_NUM, cur, org_p, p - org_p);
    cur->num_ty = new_type_char();
    cur->num_val = ch;
  }

  if (ctx->p == p) error_at_char(fi, p, "Illegal character.");

  skip_whitespace(&p);

  ctx->p = p;
  ctx->cur = cur;
  return cur;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdi, %rbx
movq 0x10(%rdi), %rax
leaq 0x8(%rsp), %r12
movq %rax, (%r12)
movq (%rdi), %r15
movq 0x8(%rdi), %rax
movq %rax, 0x10(%rsp)
movq %r12, %rdi
callq 0x8294
movq (%r12), %r12
movsbq (%r12), %rbp
cmpq $0x2f, %rbp
jne 0x8726
cmpb $0x2f, 0x1(%r12)
jne 0x86de
addq $0x2, %r12
pushq $0xa
popq %rsi
movq %r12, %rdi
callq 0x10a0
movq %rax, %r13
incq %r13
jmp 0x8717
cmpb $0x2a, 0x1(%r12)
jne 0x8726
leaq 0x2(%r12), %rdi
leaq 0x3279(%rip), %rsi      # 0xb96b
callq 0x11b0
movq %rax, %r13
testq %rax, %rax
jne 0x8713
leaq 0x3268(%rip), %rdx      # 0xb96e
movq %r15, %rdi
movq %r12, %rsi
xorl %eax, %eax
callq 0x47ee
addq $0x2, %r13
movq %r13, 0x8(%rsp)
movq 0x10(%rsp), %rbp
jmp 0x9023
leaq 0x2ce7(%rip), %rsi      # 0xb414
pushq $0x8
popq %r13
movq %r12, %rdi
movq %r13, %rdx
callq 0x1050
testl %eax, %eax
je 0x87a9
callq 0x11c0
movq (%rax), %rdx
movzwl (%rdx,%rbp,2), %eax
btl $0xb, %eax
jb 0x87d0
cmpb $0x5f, %bpl
je 0x8808
andl $0x400, %eax            # imm = 0x400
jne 0x8808
movzbl %bpl, %eax
leal -0x21(%rax), %ecx
cmpl $0x1d, %ecx
ja 0x8902
leaq 0x3146(%rip), %rax      # 0xb8c4
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
movq 0x10(%rsp), %rbp
jmpq *%rcx
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
cmpb $0x3d, 0x1(%r12)
jne 0x8cdd
pushq $0x8
jmp 0x8d87
pushq $0x42
popq %rdi
pushq $0x8
popq %rcx
movq 0x10(%rsp), %rsi
movq %r12, %rdx
callq 0x804c
movq %rax, %rbp
addq $0x8, %r12
movq %r12, 0x8(%rsp)
movq %r12, %r13
jmp 0x9023
addq $-0x30, %rbp
pushq $0x1
popq %rax
pushq $0x2
popq %rcx
movsbq (%r12,%rax), %rsi
testb $0x8, 0x1(%rdx,%rsi,2)
je 0x87f9
imulq $0xa, %rbp, %rdi
leaq (%rdi,%rsi), %rbp
addq $-0x30, %rbp
incq %rax
incl %ecx
jmp 0x87da
orb $0x20, %sil
cmpb $0x75, %sil
jne 0x883c
xorl %r14d, %r14d
jmp 0x8841
xorl %ebp, %ebp
movsbl 0x1(%r12,%rbp), %edi
callq 0x80ac
incq %rbp
testb %al, %al
jne 0x880a
leaq (%r12,%rbp), %r13
leaq 0x3168(%rip), %rdx      # 0xb98f
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x887c
pushq $0x32
jmp 0x900b
movb $0x1, %r14b
movl %eax, %ecx
movq %r15, 0x18(%rsp)
movslq %ecx, %r13
movzbl (%r12,%r13), %eax
orl $0x20, %eax
cmpl $0x6c, %eax
movq %rbx, 0x20(%rsp)
jne 0x8877
movslq %ecx, %r13
movzbl 0x1(%r12,%r13), %eax
movb $0x1, %r15b
orl $0x20, %eax
cmpl $0x6c, %eax
jne 0x889c
addl $0x2, %ecx
movslq %ecx, %r13
jmp 0x88a2
xorl %r15d, %r15d
jmp 0x88a2
leaq 0x3113(%rip), %rdx      # 0xb996
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8930
pushq $0x29
jmp 0x900b
incq %r13
movl %r13d, %ecx
pushq $0x1
popq %rdi
movq 0x10(%rsp), %rsi
movq %r12, %rdx
callq 0x804c
movq %rax, %rbx
addq %r12, %r13
movq %r13, 0x8(%rsp)
xorl %eax, %eax
testb %r14b, %r14b
je 0x88d0
testb %r15b, %r15b
je 0x88dc
callq 0x90a4
jmp 0x88e8
testb %r15b, %r15b
je 0x88e3
callq 0x90ac
jmp 0x88e8
callq 0x9084
jmp 0x88e8
callq 0x908c
movq 0x18(%rsp), %r15
movq %rax, 0x18(%rbx)
movq %rbp, 0x10(%rbx)
movq %rbx, %rbp
movq 0x20(%rsp), %rbx
jmp 0x9023
leal -0x7b(%rax), %ecx
cmpl $0x3, %ecx
movq 0x10(%rsp), %rbp
ja 0x894c
leaq 0x3026(%rip), %rax      # 0xb93c
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x1f
jmp 0x8dae
leaq 0x3062(%rip), %rdx      # 0xb999
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8978
pushq $0x2a
jmp 0x900b
cmpl $0x5b, %eax
je 0x8c4e
cmpl $0x5d, %eax
je 0x8c5f
cmpl $0x5e, %eax
jne 0x87c8
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x18
jmp 0x8dae
leaq 0x301f(%rip), %rdx      # 0xb99e
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8994
pushq $0x2b
jmp 0x900b
leaq 0x3009(%rip), %rdx      # 0xb9a4
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8c83
pushq $0x2c
jmp 0x900b
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
cmpb $0x3d, 0x1(%r12)
jne 0x8cb4
pushq $0x7
jmp 0x8d87
cmpb $0x2e, 0x1(%r12)
jne 0x8ca3
cmpb $0x2e, 0x2(%r12)
jne 0x8ca3
pushq $0x28
popq %rdi
pushq $0x3
popq %rcx
movq %rbp, %rsi
movq %r12, %rdx
callq 0x804c
movq %rax, %rbp
addq $0x3, %r12
jmp 0x87c3
cmpb $0x3d, 0x1(%r12)
jne 0x8cbb
pushq $0x11
jmp 0x8d87
cmpb $0x3d, 0x1(%r12)
jne 0x8ccc
pushq $0x10
jmp 0x8d87
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x23
jmp 0x8dae
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x1e
jmp 0x8dae
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x24
jmp 0x8dae
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x1c
jmp 0x8dae
cmpb $0x26, 0x1(%r12)
jne 0x8ce4
pushq $0x14
jmp 0x8d87
movsbq 0x1(%r12), %r14
cmpq $0x5c, %r14
jne 0x8cf5
leaq 0x2(%r12), %rbp
movzbl 0x2(%r12), %eax
cmpl $0x22, %eax
je 0x8e57
cmpl $0x27, %eax
je 0x8e21
cmpl $0x30, %eax
je 0x8eae
cmpl $0x5c, %eax
je 0x8e2d
cmpl $0x74, %eax
je 0x8e53
cmpl $0x62, %eax
je 0x8e4e
cmpl $0x66, %eax
je 0x8e1d
cmpl $0x6e, %eax
je 0x8e29
cmpl $0x72, %eax
je 0x8e25
cmpl $0x61, %eax
jne 0x8e31
pushq $0x7
jmp 0x8e59
incq %r12
movq %r12, 0x8(%rsp)
movabsq $0x400000000004021, %rdx # imm = 0x400000000004021
movl $0xa2023, %ebp          # imm = 0xA2023
movq %r12, %r13
movzbl (%r13), %eax
cmpl $0x5c, %eax
je 0x8b39
testl %eax, %eax
je 0x8cff
cmpl $0x22, %eax
je 0x8d14
incq %r13
jmp 0x8b19
movzbl 0x1(%r13), %eax
leal -0x61(%rax), %ecx
cmpl $0x13, %ecx
ja 0x8b4b
btl %ecx, %ebp
jb 0x8b59
addl $-0x22, %eax
cmpl $0x3a, %eax
ja 0x8b5f
btq %rax, %rdx
jae 0x8b5f
addq $0x2, %r13
jmp 0x8b19
leaq 0x1(%r13), %r14
movq %r15, %rdi
movq %r13, %rsi
movq %rdx, %r13
leaq 0x2749(%rip), %rdx      # 0xb2bc
xorl %eax, %eax
callq 0x47ee
movq %r13, %rdx
movq %r14, %r13
jmp 0x8b19
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
movzbl 0x1(%r12), %eax
cmpl $0x3e, %eax
je 0x8d5f
cmpl $0x3d, %eax
jne 0x8d6b
pushq $0xa
jmp 0x8d87
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x1d
jmp 0x8dae
movzbl 0x1(%r12), %eax
cmpl $0x2b, %eax
je 0x8d63
cmpl $0x3d, %eax
jne 0x8d6f
pushq $0xe
jmp 0x8d87
movzbl 0x1(%r12), %eax
cmpl $0x2d, %eax
je 0x8d85
cmpl $0x3e, %eax
je 0x8d81
cmpl $0x3d, %eax
jne 0x8da2
pushq $0xf
jmp 0x8d87
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
movzbl 0x1(%r12), %eax
cmpl $0x3c, %eax
je 0x8d67
cmpl $0x3d, %eax
jne 0x8d7d
pushq $0xc
jmp 0x8d87
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x20
jmp 0x8dae
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x27
jmp 0x8dae
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x21
jmp 0x8dae
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x22
jmp 0x8dae
cmpb $0x7c, 0x1(%r12)
jne 0x8d35
pushq $0x15
jmp 0x8d87
leaq 0x2d1e(%rip), %rdx      # 0xb9a8
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8d43
pushq $0x2d
jmp 0x900b
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x25
jmp 0x8dae
pushq $0xd
jmp 0x8dae
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x6
jmp 0x8dae
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x5
jmp 0x8dae
pushq $0x19
jmp 0x8dae
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x16
jmp 0x8dae
leaq 0x1(%r12), %rbp
jmp 0x8e5b
leaq -0x1(%r13), %rsi
leaq 0x2d10(%rip), %rdx      # 0xba1a
movq %r15, %rdi
xorl %eax, %eax
callq 0x47ee
movl %r13d, %ecx
subl %r12d, %ecx
pushq $0x2
popq %rdi
movq 0x10(%rsp), %rsi
movq %r12, %rdx
callq 0x804c
movq %rax, %rbp
incq %r13
jmp 0x901e
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x17
jmp 0x8dae
leaq 0x2c65(%rip), %rdx      # 0xb9af
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8dc5
pushq $0x2e
jmp 0x900b
pushq $0x1a
jmp 0x8d87
pushq $0x12
jmp 0x8d87
pushq $0x1b
jmp 0x8d87
pushq $0x9
jmp 0x8dae
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x3
jmp 0x8dae
pushq $0xb
jmp 0x8dae
pushq $0x26
jmp 0x8d87
pushq $0x13
popq %rdi
pushq $0x2
popq %rcx
movq %rbp, %rsi
movq %r12, %rdx
callq 0x804c
movq %rax, %rbp
addq $0x2, %r12
jmp 0x87c3
leaq 0x1(%r12), %r13
movq %r13, 0x8(%rsp)
pushq $0x4
popq %rdi
pushq $0x1
popq %rcx
movq %rbp, %rsi
movq %r12, %rdx
callq 0x804c
movq %rax, %rbp
jmp 0x9023
leaq 0x2be8(%rip), %rdx      # 0xb9b4
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8de1
pushq $0x2f
jmp 0x900b
leaq 0x2bd4(%rip), %rdx      # 0xb9bc
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8dfd
pushq $0x30
jmp 0x900b
leaq 0x2bbe(%rip), %rdx      # 0xb9c2
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8eb3
pushq $0x31
jmp 0x900b
pushq $0xc
jmp 0x8e59
pushq $0x27
jmp 0x8e59
pushq $0xd
jmp 0x8e59
pushq $0xa
jmp 0x8e59
pushq $0x5c
jmp 0x8e59
leaq 0x83f0(%rip), %rax      # 0x11228
movq (%rax), %rdi
leaq 0x247a(%rip), %rsi      # 0xb2bc
xorl %r14d, %r14d
xorl %eax, %eax
callq 0x48b3
jmp 0x8e5b
movq %r13, %r14
jmp 0x8e5b
pushq $0x9
jmp 0x8e59
pushq $0x22
popq %r14
leaq 0x2(%rbp), %r13
movq %r13, 0x8(%rsp)
cmpb $0x27, 0x1(%rbp)
je 0x8e81
incq %rbp
leaq 0x2bbd(%rip), %rdx      # 0xba31
movq %r15, %rdi
movq %rbp, %rsi
xorl %eax, %eax
callq 0x47ee
movl %r13d, %ecx
subl %r12d, %ecx
pushq $0x1
popq %rdi
movq 0x10(%rsp), %rsi
movq %r12, %rdx
callq 0x804c
movq %rax, %rbp
xorl %eax, %eax
callq 0x90b4
movq %rax, 0x18(%rbp)
movq %r14, 0x10(%rbp)
jmp 0x9023
xorl %r14d, %r14d
jmp 0x8e5b
leaq 0x2b11(%rip), %rdx      # 0xb9cb
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8ecf
pushq $0x34
jmp 0x900b
leaq 0x2af9(%rip), %rdx      # 0xb9cf
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8eeb
pushq $0x35
jmp 0x900b
leaq 0x2ae2(%rip), %rdx      # 0xb9d4
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8f07
pushq $0x36
jmp 0x900b
leaq 0x2acb(%rip), %rdx      # 0xb9d9
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8f23
pushq $0x37
jmp 0x900b
leaq 0x2ab4(%rip), %rdx      # 0xb9de
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8f3f
pushq $0x38
jmp 0x900b
leaq 0x2a9e(%rip), %rdx      # 0xb9e4
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8f5b
pushq $0x39
jmp 0x900b
leaq 0x2a89(%rip), %rdx      # 0xb9eb
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8f77
pushq $0x3d
jmp 0x900b
leaq 0x2a6b(%rip), %rdx      # 0xb9e9
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8f90
pushq $0x3e
jmp 0x900b
leaq 0x2a5b(%rip), %rdx      # 0xb9f2
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8fa9
pushq $0x33
jmp 0x900b
leaq 0x2a49(%rip), %rdx      # 0xb9f9
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8fc2
pushq $0x3a
jmp 0x900b
leaq 0x2a37(%rip), %rdx      # 0xba00
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8fdb
pushq $0x3b
jmp 0x900b
leaq 0x2a23(%rip), %rdx      # 0xba05
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x8ff4
pushq $0x3c
jmp 0x900b
leaq 0x2a10(%rip), %rdx      # 0xba0b
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
testb %al, %al
je 0x9067
pushq $0x40
popq %rdi
movq 0x10(%rsp), %rsi
movq %r12, %rdx
movl %ebp, %ecx
callq 0x804c
movq %rax, %rbp
movq %r13, 0x8(%rsp)
cmpq %r13, 0x10(%rbx)
jne 0x903d
leaq 0x2a21(%rip), %rdx      # 0xba51
movq %r15, %rdi
movq %r13, %rsi
xorl %eax, %eax
callq 0x47ee
leaq 0x8(%rsp), %r14
movq %r14, %rdi
callq 0x8294
movq (%r14), %rax
movq %rax, 0x10(%rbx)
movq %rbp, 0x8(%rbx)
movq %rbp, %rax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x29a5(%rip), %rdx      # 0xba13
movq %r12, %rdi
movl %ebp, %esi
callq 0x80cd
xorl %ecx, %ecx
testb %al, %al
pushq $0x3f
popq %rdi
cmovel %ecx, %edi
jmp 0x900c