// File: neguse[P]no/lang.cc
// Function: LangInterpreter::Eval(std::shared_ptr<Node>, std::shared_ptr<LangInterpreter::Frame>)
Value::Ref Eval(Node::Ref n, Frame::Ref e) {
    switch (n->st) {
    case SyntaxType::Program:
    case SyntaxType::ProgramCont: {
      auto v = Eval(n->a, e);
      if (n->d->st == SyntaxType::ProgramEnd) {
        return v;
      } else {
        return Eval(n->d, e);
      }
    } break;
    case SyntaxType::AssignExp: {
      auto k = n->a->c;
      auto v = Eval(n->d, e);
      e->Extend(k, v);
      return v;
    } break;
    case SyntaxType::CallExp: {
      auto cv = Eval(n->a, e);
      auto c = cv->GetClosure();
      Frame::Ref f = std::make_shared<Frame>();
      f->parent = c->e;

      if (c->t == ClosureType::User) {

        auto larg = c->p->a;
        auto carg = n->d;
        for (;;) {
          if (larg->st == SyntaxType::LambdaArgListEnd &&
              carg->st == SyntaxType::CallArgListEnd) {
            break;
          }
          assert(larg->st != SyntaxType::LambdaArgListEnd);
          assert(carg->st != SyntaxType::CallArgListEnd);
          auto arg = Eval(carg->a, e);
          f->Extend(larg->a->c, arg);
          larg = larg->d;
          carg = carg->d;
        }
        return Eval(c->p->d, f);
      } else {
        switch (c->t) {
        case ClosureType::I:
          return ReadI();
        case ClosureType::S:
          return ReadS();
        case ClosureType::A: {
          auto l = Eval(n->d->a, e);
          return l->GetList()->car;
        }
        case ClosureType::D: {
          auto l = Eval(n->d->a, e);
          return l->GetList()->cdr;
        }
        }
        assert(0);
        return nullptr;
      }
    } break;
    case SyntaxType::LambdaExp: {
      Value::Ref v = std::make_shared<Value>();
      v->SetClosure(std::make_shared<Closure>(Closure{e, n}));
      return v;
    } break;
    case SyntaxType::OpExp: {
      auto a1 = Eval(n->a, e);
      auto a2 = Eval(n->d, e);
      Value::Ref v = std::make_shared<Value>();
      switch (n->c) {
      case '+':
        v->SetInteger(a1->GetInteger() + a2->GetInteger());
        return v;
      case '-':
        v->SetInteger(a1->GetInteger() - a2->GetInteger());
        return v;
      case '=':
        if (a1->kind != a2->kind) {
          v->SetInteger(0);
        } else if (a1->kind == ValueKind::Integer) {
          v->SetInteger(a1->GetInteger() == a2->GetInteger() ? 1 : 0);
        } else if (a1->kind == ValueKind::List) {
          v->SetInteger(a1->GetList() == a2->GetList() ? 1 : 0);
        }
        return v;
      case '<':
        v->SetInteger(a1->GetInteger() < a2->GetInteger() ? 1 : 0);
        return v;
      case '>':
        v->SetInteger(a1->GetInteger() > a2->GetInteger() ? 1 : 0);
        return v;
      case ':': {
        auto c = std::make_shared<Cons>(Cons{a1, a2});
        v->SetList(c);
        return v;
      }
      }
      assert(0);
      return nullptr;
    } break;
    case SyntaxType::IfExp: {
      auto cond = Eval(n->a, e);
      if (cond->True()) {
        return Eval(n->d->a, e);
      } else {
        return Eval(n->d->d, e);
      }
    } break;
    case SyntaxType::Hex2: {
      Value::Ref v = std::make_shared<Value>();
      int i = (hex2i(n->a->c) << 4) | hex2i(n->d->c);
      v->SetInteger(i);
      return v;
    } break;
    case SyntaxType::Hex: {
      Value::Ref v = std::make_shared<Value>();
      v->SetInteger(hex2i(n->c));
      return v;
    } break;
    case SyntaxType::Variable: {
      return e->Get(n->c);
    } break;
    }
  }

// Assembly:
subq $0x598, %rsp            # imm = 0x598
movq %rcx, 0x1d0(%rsp)
movq %rdx, 0x1d8(%rsp)
movq %rdi, %rax
movq 0x1d8(%rsp), %rdi
movq %rax, 0x1e0(%rsp)
movq %rax, %rdx
movq %rdx, 0x1e8(%rsp)
movq %rax, 0x590(%rsp)
movq %rsi, 0x588(%rsp)
movq %rdi, 0x580(%rsp)
movq %rcx, 0x578(%rsp)
movq 0x588(%rsp), %rax
movq %rax, 0x1f0(%rsp)
callq 0x8410
movl 0x30(%rax), %eax
decl %eax
movl %eax, %ecx
movq %rcx, 0x1f8(%rsp)
subl $0x12, %eax
ja 0xb7d4
movq 0x1f8(%rsp), %rax
leaq 0x7193(%rip), %rcx      # 0x11004
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rsi
addq $0x8, %rsi
leaq 0x558(%rsp), %rdi
movq %rdi, 0x1c0(%rsp)
callq 0x4910
movq 0x1d0(%rsp), %rsi
leaq 0x548(%rsp), %rdi
movq %rdi, 0x1c8(%rsp)
callq 0xb800
movq 0x1f0(%rsp), %rsi
movq 0x1c0(%rsp), %rdx
movq 0x1c8(%rsp), %rcx
leaq 0x568(%rsp), %rdi
callq 0x9de0
jmp 0x9ee7
leaq 0x548(%rsp), %rdi
callq 0xb830
leaq 0x558(%rsp), %rdi
callq 0x4940
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rdi
addq $0x18, %rdi
callq 0x8410
cmpl $0x3, 0x30(%rax)
jne 0x9f78
movq 0x1e0(%rsp), %rdi
leaq 0x568(%rsp), %rsi
callq 0xef10
movl $0x1, 0x538(%rsp)
jmp 0xa04c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x548(%rsp), %rdi
callq 0xb830
leaq 0x558(%rsp), %rdi
callq 0x4940
jmp 0xb7e6
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rsi
addq $0x18, %rsi
leaq 0x528(%rsp), %rdi
movq %rdi, 0x1b0(%rsp)
callq 0x4910
movq 0x1d0(%rsp), %rsi
leaq 0x518(%rsp), %rdi
movq %rdi, 0x1b8(%rsp)
callq 0xb800
movq 0x1e0(%rsp), %rdi
movq 0x1f0(%rsp), %rsi
movq 0x1b0(%rsp), %rdx
movq 0x1b8(%rsp), %rcx
callq 0x9de0
jmp 0x9fe5
leaq 0x518(%rsp), %rdi
callq 0xb830
leaq 0x528(%rsp), %rdi
callq 0x4940
movl $0x1, 0x538(%rsp)
jmp 0xa04c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x518(%rsp), %rdi
callq 0xb830
leaq 0x528(%rsp), %rdi
callq 0x4940
leaq 0x568(%rsp), %rdi
callq 0x9d70
jmp 0xb7e6
leaq 0x568(%rsp), %rdi
callq 0x9d70
jmp 0xb7d6
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rdi
addq $0x8, %rdi
callq 0x8410
movq 0x1d8(%rsp), %rdi
movb (%rax), %al
movb %al, 0x517(%rsp)
movb $0x0, 0x516(%rsp)
callq 0x8410
movq %rax, %rsi
addq $0x18, %rsi
leaq 0x500(%rsp), %rdi
movq %rdi, 0x1a0(%rsp)
callq 0x4910
movq 0x1d0(%rsp), %rsi
leaq 0x4f0(%rsp), %rdi
movq %rdi, 0x1a8(%rsp)
callq 0xb800
movq 0x1e0(%rsp), %rdi
movq 0x1f0(%rsp), %rsi
movq 0x1a0(%rsp), %rdx
movq 0x1a8(%rsp), %rcx
callq 0x9de0
jmp 0xa0f5
leaq 0x4f0(%rsp), %rdi
callq 0xb830
leaq 0x500(%rsp), %rdi
callq 0x4940
movq 0x1d0(%rsp), %rdi
callq 0x9c00
movq 0x1e0(%rsp), %rsi
movq %rax, 0x188(%rsp)
movsbl 0x517(%rsp), %eax
movl %eax, 0x194(%rsp)
leaq 0x4e0(%rsp), %rdi
movq %rdi, 0x198(%rsp)
callq 0x9d40
movq 0x188(%rsp), %rdi
movl 0x194(%rsp), %esi
movq 0x198(%rsp), %rdx
callq 0xef40
jmp 0xa16e
leaq 0x4e0(%rsp), %rdi
callq 0x9d70
movb $0x1, 0x516(%rsp)
movl $0x1, 0x538(%rsp)
testb $0x1, 0x516(%rsp)
jne 0xa20d
jmp 0xa200
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x4f0(%rsp), %rdi
callq 0xb830
leaq 0x500(%rsp), %rdi
callq 0x4940
jmp 0xb7e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x4e0(%rsp), %rdi
callq 0x9d70
movq 0x1e0(%rsp), %rdi
callq 0x9d70
jmp 0xb7e6
movq 0x1e0(%rsp), %rdi
callq 0x9d70
jmp 0xb7d6
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rsi
addq $0x8, %rsi
leaq 0x4c0(%rsp), %rdi
movq %rdi, 0x178(%rsp)
callq 0x4910
movq 0x1d0(%rsp), %rsi
leaq 0x4b0(%rsp), %rdi
movq %rdi, 0x180(%rsp)
callq 0xb800
movq 0x1f0(%rsp), %rsi
movq 0x178(%rsp), %rdx
movq 0x180(%rsp), %rcx
leaq 0x4d0(%rsp), %rdi
callq 0x9de0
jmp 0xa27f
leaq 0x4b0(%rsp), %rdi
callq 0xb830
leaq 0x4c0(%rsp), %rdi
callq 0x4940
leaq 0x4d0(%rsp), %rdi
callq 0x9ae0
movq %rax, %rsi
leaq 0x4a0(%rsp), %rdi
callq 0xef80
jmp 0xa2b8
leaq 0x490(%rsp), %rdi
callq 0x9a00
jmp 0xa2c7
leaq 0x4a0(%rsp), %rdi
callq 0xeff0
movq %rax, 0x170(%rsp)
leaq 0x490(%rsp), %rdi
callq 0x9c00
movq 0x170(%rsp), %rsi
movq %rax, %rdi
callq 0xf000
leaq 0x4a0(%rsp), %rdi
callq 0xeff0
cmpl $0x0, 0x20(%rax)
jne 0xa721
leaq 0x4a0(%rsp), %rdi
callq 0xeff0
movq %rax, %rdi
addq $0x10, %rdi
callq 0x8410
movq %rax, %rsi
addq $0x8, %rsi
leaq 0x480(%rsp), %rdi
callq 0x4910
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rsi
addq $0x18, %rsi
leaq 0x470(%rsp), %rdi
callq 0x4910
leaq 0x480(%rsp), %rdi
callq 0x8410
cmpl $0xd, 0x30(%rax)
jne 0xa3ee
leaq 0x470(%rsp), %rdi
callq 0x8410
cmpl $0x9, 0x30(%rax)
jne 0xa3ee
jmp 0xa617
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x4b0(%rsp), %rdi
callq 0xb830
leaq 0x4c0(%rsp), %rdi
callq 0x4940
jmp 0xb7e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xaac9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xaabc
leaq 0x480(%rsp), %rdi
callq 0x8410
cmpl $0xd, 0x30(%rax)
je 0xa403
jmp 0xa422
leaq 0x6db6(%rip), %rdi      # 0x111c0
leaq 0x6d09(%rip), %rsi      # 0x1111a
movl $0x25d, %edx            # imm = 0x25D
leaq 0x6dcc(%rip), %rcx      # 0x111e9
callq 0x20d0
leaq 0x470(%rsp), %rdi
callq 0x8410
cmpl $0x9, 0x30(%rax)
je 0xa437
jmp 0xa456
leaq 0x6de3(%rip), %rdi      # 0x11221
leaq 0x6cd5(%rip), %rsi      # 0x1111a
movl $0x25e, %edx            # imm = 0x25E
leaq 0x6d98(%rip), %rcx      # 0x111e9
callq 0x20d0
leaq 0x470(%rsp), %rdi
callq 0x8410
movq %rax, %rsi
addq $0x8, %rsi
leaq 0x450(%rsp), %rdi
movq %rdi, 0x160(%rsp)
callq 0x4910
movq 0x1d0(%rsp), %rsi
leaq 0x440(%rsp), %rdi
movq %rdi, 0x168(%rsp)
callq 0xb800
movq 0x1f0(%rsp), %rsi
movq 0x160(%rsp), %rdx
movq 0x168(%rsp), %rcx
leaq 0x460(%rsp), %rdi
callq 0x9de0
jmp 0xa4c3
leaq 0x440(%rsp), %rdi
callq 0xb830
leaq 0x450(%rsp), %rdi
callq 0x4940
leaq 0x490(%rsp), %rdi
callq 0x9c00
movq %rax, 0x148(%rsp)
leaq 0x480(%rsp), %rdi
callq 0x8410
movq %rax, %rdi
addq $0x8, %rdi
callq 0x8410
movsbl (%rax), %eax
movl %eax, 0x154(%rsp)
leaq 0x430(%rsp), %rdi
movq %rdi, 0x158(%rsp)
leaq 0x460(%rsp), %rsi
callq 0x9d40
movq 0x148(%rsp), %rdi
movl 0x154(%rsp), %esi
movq 0x158(%rsp), %rdx
callq 0xef40
jmp 0xa550
leaq 0x430(%rsp), %rdi
callq 0x9d70
leaq 0x480(%rsp), %rdi
callq 0x8410
movq %rax, %rsi
addq $0x18, %rsi
leaq 0x480(%rsp), %rdi
callq 0xf030
leaq 0x470(%rsp), %rdi
callq 0x8410
movq %rax, %rsi
addq $0x18, %rsi
leaq 0x470(%rsp), %rdi
callq 0xf030
leaq 0x460(%rsp), %rdi
callq 0x9d70
jmp 0xa35e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x440(%rsp), %rdi
callq 0xb830
leaq 0x450(%rsp), %rdi
callq 0x4940
jmp 0xa702
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x430(%rsp), %rdi
callq 0x9d70
leaq 0x460(%rsp), %rdi
callq 0x9d70
jmp 0xa702
leaq 0x4a0(%rsp), %rdi
callq 0xeff0
movq %rax, %rdi
addq $0x10, %rdi
callq 0x8410
movq %rax, %rsi
addq $0x18, %rsi
leaq 0x420(%rsp), %rdi
movq %rdi, 0x138(%rsp)
callq 0x4910
leaq 0x410(%rsp), %rdi
movq %rdi, 0x140(%rsp)
leaq 0x490(%rsp), %rsi
callq 0xb800
movq 0x1e0(%rsp), %rdi
movq 0x1f0(%rsp), %rsi
movq 0x138(%rsp), %rdx
movq 0x140(%rsp), %rcx
callq 0x9de0
jmp 0xa690
leaq 0x410(%rsp), %rdi
callq 0xb830
leaq 0x420(%rsp), %rdi
callq 0x4940
movl $0x1, 0x538(%rsp)
leaq 0x470(%rsp), %rdi
callq 0x4940
leaq 0x480(%rsp), %rdi
callq 0x4940
jmp 0xaa83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x410(%rsp), %rdi
callq 0xb830
leaq 0x420(%rsp), %rdi
callq 0x4940
leaq 0x470(%rsp), %rdi
callq 0x4940
leaq 0x480(%rsp), %rdi
callq 0x4940
jmp 0xaaaf
leaq 0x4a0(%rsp), %rdi
callq 0xeff0
movl 0x20(%rax), %eax
decl %eax
movl %eax, %ecx
movq %rcx, 0x130(%rsp)
subl $0x3, %eax
ja 0xaa64
movq 0x130(%rsp), %rax
leaq 0x694b(%rip), %rcx      # 0x110a0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x1f0(%rsp), %rsi
movq 0x1e0(%rsp), %rdi
callq 0xf060
jmp 0xa775
movl $0x1, 0x538(%rsp)
jmp 0xaa83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xaaaf
movq 0x1f0(%rsp), %rsi
movq 0x1e0(%rsp), %rdi
callq 0xf100
jmp 0xa7b5
movl $0x1, 0x538(%rsp)
jmp 0xaa83
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rdi
addq $0x18, %rdi
callq 0x8410
movq %rax, %rsi
addq $0x8, %rsi
leaq 0x3f0(%rsp), %rdi
movq %rdi, 0x120(%rsp)
callq 0x4910
movq 0x1d0(%rsp), %rsi
leaq 0x3e0(%rsp), %rdi
movq %rdi, 0x128(%rsp)
callq 0xb800
movq 0x1f0(%rsp), %rsi
movq 0x120(%rsp), %rdx
movq 0x128(%rsp), %rcx
leaq 0x400(%rsp), %rdi
callq 0x9de0
jmp 0xa83e
leaq 0x3e0(%rsp), %rdi
callq 0xb830
leaq 0x3f0(%rsp), %rdi
callq 0x4940
leaq 0x400(%rsp), %rdi
callq 0x9ae0
movq %rax, %rsi
leaq 0x3d0(%rsp), %rdi
callq 0xf1c0
jmp 0xa877
leaq 0x3d0(%rsp), %rdi
callq 0xf230
movq 0x1e0(%rsp), %rdi
movq %rax, %rsi
callq 0x9d40
leaq 0x3d0(%rsp), %rdi
callq 0x9dd0
movl $0x1, 0x538(%rsp)
leaq 0x400(%rsp), %rdi
callq 0x9d70
jmp 0xaa83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x3e0(%rsp), %rdi
callq 0xb830
leaq 0x3f0(%rsp), %rdi
callq 0x4940
jmp 0xaaaf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x400(%rsp), %rdi
callq 0x9d70
jmp 0xaaaf
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rdi
addq $0x18, %rdi
callq 0x8410
movq %rax, %rsi
addq $0x8, %rsi
leaq 0x3b0(%rsp), %rdi
movq %rdi, 0x110(%rsp)
callq 0x4910
movq 0x1d0(%rsp), %rsi
leaq 0x3a0(%rsp), %rdi
movq %rdi, 0x118(%rsp)
callq 0xb800
movq 0x1f0(%rsp), %rsi
movq 0x110(%rsp), %rdx
movq 0x118(%rsp), %rcx
leaq 0x3c0(%rsp), %rdi
callq 0x9de0
jmp 0xa990
leaq 0x3a0(%rsp), %rdi
callq 0xb830
leaq 0x3b0(%rsp), %rdi
callq 0x4940
leaq 0x3c0(%rsp), %rdi
callq 0x9ae0
movq %rax, %rsi
leaq 0x390(%rsp), %rdi
callq 0xf1c0
jmp 0xa9c9
leaq 0x390(%rsp), %rdi
callq 0xf230
movq 0x1e0(%rsp), %rdi
movq %rax, %rsi
addq $0x10, %rsi
callq 0x9d40
leaq 0x390(%rsp), %rdi
callq 0x9dd0
movl $0x1, 0x538(%rsp)
leaq 0x3c0(%rsp), %rdi
callq 0x9d70
jmp 0xaa83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x3a0(%rsp), %rdi
callq 0xb830
leaq 0x3b0(%rsp), %rdi
callq 0x4940
jmp 0xaaaf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x3c0(%rsp), %rdi
callq 0x9d70
jmp 0xaaaf
leaq 0x67dd(%rip), %rdi      # 0x11248
leaq 0x66a8(%rip), %rsi      # 0x1111a
movl $0x274, %edx            # imm = 0x274
leaq 0x676b(%rip), %rcx      # 0x111e9
callq 0x20d0
leaq 0x490(%rsp), %rdi
callq 0xb830
leaq 0x4a0(%rsp), %rdi
callq 0x9bc0
leaq 0x4d0(%rsp), %rdi
callq 0x9d70
jmp 0xb7d6
leaq 0x490(%rsp), %rdi
callq 0xb830
leaq 0x4a0(%rsp), %rdi
callq 0x9bc0
leaq 0x4d0(%rsp), %rdi
callq 0x9d70
jmp 0xb7e6
movq 0x1e0(%rsp), %rdi
movb $0x0, 0x38f(%rsp)
callq 0x9a70
movq 0x1e0(%rsp), %rdi
callq 0x9ae0
movq 0x1d0(%rsp), %rsi
movq %rax, 0x100(%rsp)
leaq 0x350(%rsp), %rdi
movq %rdi, 0x108(%rsp)
callq 0xb800
movq 0x1d8(%rsp), %rsi
leaq 0x360(%rsp), %rdi
callq 0x4910
movq 0x108(%rsp), %rsi
movl $0x0, 0x370(%rsp)
leaq 0x378(%rsp), %rdi
callq 0x9b20
jmp 0xab59
movq 0x100(%rsp), %rdi
leaq 0x378(%rsp), %rsi
callq 0x9af0
leaq 0x378(%rsp), %rdi
callq 0x9bc0
leaq 0x350(%rsp), %rdi
callq 0x9bd0
movb $0x1, 0x38f(%rsp)
movl $0x1, 0x538(%rsp)
testb $0x1, 0x38f(%rsp)
jne 0xabe7
jmp 0xabda
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x350(%rsp), %rdi
callq 0x9bd0
movq 0x1e0(%rsp), %rdi
callq 0x9d70
jmp 0xb7e6
movq 0x1e0(%rsp), %rdi
callq 0x9d70
jmp 0xb7d6
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rsi
addq $0x8, %rsi
leaq 0x330(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x4910
movq 0x1d0(%rsp), %rsi
leaq 0x320(%rsp), %rdi
movq %rdi, 0xf8(%rsp)
callq 0xb800
movq 0x1f0(%rsp), %rsi
movq 0xf0(%rsp), %rdx
movq 0xf8(%rsp), %rcx
leaq 0x340(%rsp), %rdi
callq 0x9de0
jmp 0xac59
leaq 0x320(%rsp), %rdi
callq 0xb830
leaq 0x330(%rsp), %rdi
callq 0x4940
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rsi
addq $0x18, %rsi
leaq 0x300(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x4910
movq 0x1d0(%rsp), %rsi
leaq 0x2f0(%rsp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0xb800
movq 0x1f0(%rsp), %rsi
movq 0xe0(%rsp), %rdx
movq 0xe8(%rsp), %rcx
leaq 0x310(%rsp), %rdi
callq 0x9de0
jmp 0xace0
leaq 0x2f0(%rsp), %rdi
callq 0xb830
leaq 0x300(%rsp), %rdi
callq 0x4940
leaq 0x2e0(%rsp), %rdi
callq 0x9a70
jmp 0xad09
movq 0x1d8(%rsp), %rdi
callq 0x8410
movsbl (%rax), %eax
addl $-0x2b, %eax
movl %eax, %ecx
movq %rcx, 0xd8(%rsp)
subl $0x13, %eax
ja 0xb309
movq 0xd8(%rsp), %rax
leaq 0x6312(%rip), %rcx      # 0x11050
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x320(%rsp), %rdi
callq 0xb830
leaq 0x330(%rsp), %rdi
callq 0x4940
jmp 0xb7e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x2f0(%rsp), %rdi
callq 0xb830
leaq 0x300(%rsp), %rdi
callq 0x4940
jmp 0xb36e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xb361
leaq 0x2e0(%rsp), %rdi
callq 0x9ae0
movq %rax, 0xc8(%rsp)
leaq 0x340(%rsp), %rdi
callq 0x9ae0
movq %rax, %rdi
callq 0xf260
movl %eax, 0xd4(%rsp)
jmp 0xadf9
leaq 0x310(%rsp), %rdi
callq 0x9ae0
movq %rax, %rdi
callq 0xf260
movl %eax, 0xc4(%rsp)
jmp 0xae17
movq 0xc8(%rsp), %rdi
movl 0xc4(%rsp), %eax
movl 0xd4(%rsp), %esi
addl %eax, %esi
callq 0xf240
jmp 0xae36
movq 0x1e0(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
callq 0xef10
movl $0x1, 0x538(%rsp)
jmp 0xb328
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xb354
leaq 0x2e0(%rsp), %rdi
callq 0x9ae0
movq %rax, 0xb8(%rsp)
leaq 0x340(%rsp), %rdi
callq 0x9ae0
movq %rax, %rdi
callq 0xf260
movl %eax, 0xc0(%rsp)
jmp 0xaea7
leaq 0x310(%rsp), %rdi
callq 0x9ae0
movq %rax, %rdi
callq 0xf260
movl %eax, 0xb4(%rsp)
jmp 0xaec5
movq 0xb8(%rsp), %rdi
movl 0xb4(%rsp), %eax
movl 0xc0(%rsp), %esi
subl %eax, %esi
callq 0xf240
jmp 0xaee4
movq 0x1e0(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
callq 0xef10
movl $0x1, 0x538(%rsp)
jmp 0xb328
leaq 0x340(%rsp), %rdi
callq 0x9ae0
movl (%rax), %eax
movl %eax, 0xb0(%rsp)
leaq 0x310(%rsp), %rdi
callq 0x9ae0
movq %rax, %rcx
movl 0xb0(%rsp), %eax
cmpl (%rcx), %eax
je 0xaf58
leaq 0x2e0(%rsp), %rdi
callq 0x9ae0
movq %rax, %rdi
xorl %esi, %esi
callq 0xf240
jmp 0xaf53
jmp 0xb0de
leaq 0x340(%rsp), %rdi
callq 0x9ae0
cmpl $0x0, (%rax)
jne 0xafe5
leaq 0x2e0(%rsp), %rdi
callq 0x9ae0
movq %rax, 0xa0(%rsp)
leaq 0x340(%rsp), %rdi
callq 0x9ae0
movq %rax, %rdi
callq 0xf260
movl %eax, 0xac(%rsp)
jmp 0xaf9d
leaq 0x310(%rsp), %rdi
callq 0x9ae0
movq %rax, %rdi
callq 0xf260
movl %eax, 0x9c(%rsp)
jmp 0xafbb
movq 0xa0(%rsp), %rdi
movl 0x9c(%rsp), %ecx
movl 0xac(%rsp), %eax
subl %ecx, %eax
sete %al
movzbl %al, %esi
callq 0xf240
jmp 0xafe0
jmp 0xb0dc
leaq 0x340(%rsp), %rdi
callq 0x9ae0
cmpl $0x1, (%rax)
jne 0xb0da
leaq 0x2e0(%rsp), %rdi
callq 0x9ae0
movq %rax, 0x90(%rsp)
leaq 0x340(%rsp), %rdi
callq 0x9ae0
movq %rax, %rsi
leaq 0x2d0(%rsp), %rdi
callq 0xf1c0
jmp 0xb02f
leaq 0x310(%rsp), %rdi
callq 0x9ae0
movq %rax, %rsi
leaq 0x2c0(%rsp), %rdi
callq 0xf1c0
jmp 0xb04e
leaq 0x2d0(%rsp), %rdi
leaq 0x2c0(%rsp), %rsi
callq 0xf2b0
movq 0x90(%rsp), %rdi
movzbl %al, %esi
callq 0xf240
jmp 0xb075
leaq 0x2c0(%rsp), %rdi
callq 0x9dd0
leaq 0x2d0(%rsp), %rdi
callq 0x9dd0
jmp 0xb0da
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xb0c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x2c0(%rsp), %rdi
callq 0x9dd0
leaq 0x2d0(%rsp), %rdi
callq 0x9dd0
jmp 0xb354
jmp 0xb0dc
jmp 0xb0de
movq 0x1e0(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
callq 0xef10
movl $0x1, 0x538(%rsp)
jmp 0xb328
leaq 0x2e0(%rsp), %rdi
callq 0x9ae0
movq %rax, 0x80(%rsp)
leaq 0x340(%rsp), %rdi
callq 0x9ae0
movq %rax, %rdi
callq 0xf260
movl %eax, 0x8c(%rsp)
jmp 0xb136
leaq 0x310(%rsp), %rdi
callq 0x9ae0
movq %rax, %rdi
callq 0xf260
movl %eax, 0x7c(%rsp)
jmp 0xb151
movq 0x80(%rsp), %rdi
movl 0x7c(%rsp), %ecx
movl 0x8c(%rsp), %eax
subl %ecx, %eax
setl %al
movzbl %al, %esi
callq 0xf240
jmp 0xb173
movq 0x1e0(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
callq 0xef10
movl $0x1, 0x538(%rsp)
jmp 0xb328
leaq 0x2e0(%rsp), %rdi
callq 0x9ae0
movq %rax, 0x70(%rsp)
leaq 0x340(%rsp), %rdi
callq 0x9ae0
movq %rax, %rdi
callq 0xf260
movl %eax, 0x78(%rsp)
jmp 0xb1c5
leaq 0x310(%rsp), %rdi
callq 0x9ae0
movq %rax, %rdi
callq 0xf260
movl %eax, 0x6c(%rsp)
jmp 0xb1e0
movq 0x70(%rsp), %rdi
movl 0x6c(%rsp), %ecx
movl 0x78(%rsp), %eax
subl %ecx, %eax
setg %al
movzbl %al, %esi
callq 0xf240
jmp 0xb1fc
movq 0x1e0(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
callq 0xef10
movl $0x1, 0x538(%rsp)
jmp 0xb328
leaq 0x290(%rsp), %rdi
movq %rdi, 0x60(%rsp)
leaq 0x340(%rsp), %rsi
callq 0x9d40
leaq 0x2a0(%rsp), %rdi
leaq 0x310(%rsp), %rsi
callq 0x9d40
movq 0x60(%rsp), %rsi
leaq 0x2b0(%rsp), %rdi
callq 0xf2f0
jmp 0xb264
leaq 0x290(%rsp), %rdi
callq 0xf370
leaq 0x2e0(%rsp), %rdi
callq 0x9ae0
movq %rax, 0x58(%rsp)
leaq 0x280(%rsp), %rdi
leaq 0x2b0(%rsp), %rsi
callq 0xf3a0
movq 0x58(%rsp), %rdi
leaq 0x280(%rsp), %rsi
callq 0x9d80
leaq 0x280(%rsp), %rdi
callq 0x9dd0
movq 0x1e0(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
callq 0xef10
movl $0x1, 0x538(%rsp)
leaq 0x2b0(%rsp), %rdi
callq 0x9dd0
jmp 0xb328
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x290(%rsp), %rdi
callq 0xf370
jmp 0xb354
leaq 0x5f38(%rip), %rdi      # 0x11248
leaq 0x5e03(%rip), %rsi      # 0x1111a
movl $0x29d, %edx            # imm = 0x29D
leaq 0x5ec6(%rip), %rcx      # 0x111e9
callq 0x20d0
leaq 0x2e0(%rsp), %rdi
callq 0x9d70
leaq 0x310(%rsp), %rdi
callq 0x9d70
leaq 0x340(%rsp), %rdi
callq 0x9d70
jmp 0xb7d6
leaq 0x2e0(%rsp), %rdi
callq 0x9d70
leaq 0x310(%rsp), %rdi
callq 0x9d70
leaq 0x340(%rsp), %rdi
callq 0x9d70
jmp 0xb7e6
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rsi
addq $0x8, %rsi
leaq 0x260(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x4910
movq 0x1d0(%rsp), %rsi
leaq 0x250(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0xb800
movq 0x1f0(%rsp), %rsi
movq 0x48(%rsp), %rdx
movq 0x50(%rsp), %rcx
leaq 0x270(%rsp), %rdi
callq 0x9de0
jmp 0xb3e1
leaq 0x250(%rsp), %rdi
callq 0xb830
leaq 0x260(%rsp), %rdi
callq 0x4940
leaq 0x270(%rsp), %rdi
callq 0x9ae0
movq %rax, %rdi
callq 0xf3d0
movb %al, 0x47(%rsp)
jmp 0xb416
movb 0x47(%rsp), %al
testb $0x1, %al
jne 0xb423
jmp 0xb539
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rdi
addq $0x18, %rdi
callq 0x8410
movq %rax, %rsi
addq $0x8, %rsi
leaq 0x240(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0x4910
movq 0x1d0(%rsp), %rsi
leaq 0x230(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0xb800
movq 0x1e0(%rsp), %rdi
movq 0x1f0(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0x9de0
jmp 0xb490
leaq 0x230(%rsp), %rdi
callq 0xb830
leaq 0x240(%rsp), %rdi
callq 0x4940
movl $0x1, 0x538(%rsp)
jmp 0xb5fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x250(%rsp), %rdi
callq 0xb830
leaq 0x260(%rsp), %rdi
callq 0x4940
jmp 0xb7e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xb60f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x230(%rsp), %rdi
callq 0xb830
leaq 0x240(%rsp), %rdi
callq 0x4940
jmp 0xb60f
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rdi
addq $0x18, %rdi
callq 0x8410
movq %rax, %rsi
addq $0x18, %rsi
leaq 0x220(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x4910
movq 0x1d0(%rsp), %rsi
leaq 0x210(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0xb800
movq 0x1e0(%rsp), %rdi
movq 0x1f0(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq 0x28(%rsp), %rcx
callq 0x9de0
jmp 0xb5a6
leaq 0x210(%rsp), %rdi
callq 0xb830
leaq 0x220(%rsp), %rdi
callq 0x4940
movl $0x1, 0x538(%rsp)
jmp 0xb5fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x210(%rsp), %rdi
callq 0xb830
leaq 0x220(%rsp), %rdi
callq 0x4940
jmp 0xb60f
leaq 0x270(%rsp), %rdi
callq 0x9d70
jmp 0xb7d6
leaq 0x270(%rsp), %rdi
callq 0x9d70
jmp 0xb7e6
movq 0x1e0(%rsp), %rdi
movb $0x0, 0x20f(%rsp)
callq 0x9a70
movq 0x1d8(%rsp), %rdi
callq 0x8410
movq %rax, %rdi
addq $0x8, %rdi
callq 0x8410
movsbl (%rax), %edi
callq 0x2320
movq 0x1d8(%rsp), %rdi
shll $0x4, %eax
movl %eax, 0x1c(%rsp)
callq 0x8410
movq %rax, %rdi
addq $0x18, %rdi
callq 0x8410
movsbl (%rax), %edi
callq 0x2320
movq 0x1e0(%rsp), %rdi
movl %eax, %ecx
movl 0x1c(%rsp), %eax
orl %ecx, %eax
movl %eax, 0x208(%rsp)
callq 0x9ae0
movq %rax, %rdi
movl 0x208(%rsp), %esi
callq 0xf240
jmp 0xb6ac
movb $0x1, 0x20f(%rsp)
movl $0x1, 0x538(%rsp)
testb $0x1, 0x20f(%rsp)
jne 0xb6fe
jmp 0xb6f1
movq 0x1e0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
callq 0x9d70
jmp 0xb7e6
movq 0x1e0(%rsp), %rdi
callq 0x9d70
jmp 0xb7d6
movq 0x1e0(%rsp), %rdi
movb $0x0, 0x207(%rsp)
callq 0x9a70
movq 0x1e0(%rsp), %rdi
callq 0x9ae0
movq 0x1d8(%rsp), %rdi
movq %rax, 0x10(%rsp)
callq 0x8410
movsbl (%rax), %edi
callq 0x2320
movq 0x10(%rsp), %rdi
movl %eax, %esi
callq 0xf240
jmp 0xb74d
movb $0x1, 0x207(%rsp)
movl $0x1, 0x538(%rsp)
testb $0x1, 0x207(%rsp)
jne 0xb79c
jmp 0xb78f
movq 0x1e0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
callq 0x9d70
jmp 0xb7e6
movq 0x1e0(%rsp), %rdi
callq 0x9d70
jmp 0xb7d6
movq 0x1d0(%rsp), %rdi
callq 0x9c00
movq 0x1d8(%rsp), %rdi
movq %rax, 0x8(%rsp)
callq 0x8410
movq 0x1e0(%rsp), %rdi
movq 0x8(%rsp), %rsi
movsbl (%rax), %edx
callq 0xf480
jmp 0xb7d6
ud2
movq 0x1e8(%rsp), %rax
addq $0x598, %rsp            # imm = 0x598
retq
movq 0x540(%rsp), %rdi
callq 0x21d0
nopw %cs:(%rax,%rax)
nopl (%rax)