// File: /workspace/github_cpp_makefile_star2_O2/sighingnow[P]compile-pascal/pl0_tac_gen.cpp
// Function: pl0_tac_factor[abi:cxx11](pl0_ast_factor const*)
pair<Value *, string> pl0_tac_factor(pl0_ast_factor const * factor) {
    cout << __func__;
    pair<Value *, string> ans;
    // variables used inner switch-case block.
    int d1, d2;
    constant val;
    variable var, array;
    Value *idx, *t;

    switch (factor->t) {
        case pl0_ast_factor::type_t::ID:
            d1 = valtb.depth(factor->ptr.id->id), d2 = vartb.depth(factor->ptr.id->id);
            if (d1 > d2) {
                // constant
                valtb.find(factor->ptr.id->id, true, val);
                ans = make_pair(new Value(val.val, val.dt), "integer");
            }
            else if (d2 > d1) {
                // variable
                vartb.find(factor->ptr.id->id, true, var);
                if (var.type.length() >= 5 && var.type.substr(0, 5) == "array") {
                    pl0_ast_error(factor->loc, string("use an array identifier ") + "\"" + var.name + "\"" + " as a factor.");
                }
                ans = make_pair(new Value(var.name, var.dt), var.dt);
            }
            else {
                // undeclared identifier
                pl0_ast_error(factor->loc, string("use of undeclared identifier ") + "\"" + factor->ptr.id->id + "\"");
                ans = make_pair(new Value(factor->ptr.id->id, "undefined"), "");
            }
            break;
        case pl0_ast_factor::type_t::UNSIGNED:
            ans = make_pair(new Value(factor->ptr.unsignedn->val, factor->ptr.unsignedn->dt == pl0_ast_constv::INT ? "integer" : "char"), "integer");
            break;
        case pl0_ast_factor::type_t::EXPR:
            ans = pl0_tac_expr(factor->ptr.expr);
            break;
        case pl0_ast_factor::type_t::CALL_FUNC:
            ans = pl0_tac_call_func(factor->ptr.call_func);
            break;
        case pl0_ast_factor::type_t::ARRAY_E:
            // validate array identifier.
            if (vartb.find(factor->arraye.first->id, true, array)) {
                if (array.len == -1) {
                    pl0_ast_error(factor->loc, "expected an array identifier.");
                }
            }
            else {
                pl0_ast_error(factor->loc, string("use of undeclared identifier ") + "\"" + factor->arraye.first->id + "\"");
                array.name = factor->arraye.first->id; // give it a default value, although it's wrong.
            }
            // validate array index.
            idx = pl0_tac_expr(factor->arraye.second).first;
            t = new Value(irb.maketmp()+"#"+array.name+"#"+idx->value()+"#", array.dt);
            irb.emit("=[]", t, new Value(array.name, array.dt), idx);
            ans = make_pair(t, array.type.substr(0, array.type.length()-5));
            break;
        default:
            pl0_ast_error(factor->loc, "undefined syntax");
            ans = make_pair(new Value("^^^^^", "undefined"), "");
            cout << "UNIMPLEMENT EXPRESSION" << endl;
            break;
    }
    return ans;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x428, %rsp            # imm = 0x428
movq %rsi, %r14
movq %rdi, %rbx
movq 0x46150(%rip), %rdi     # 0x8afd8
leaq 0x166b0(%rip), %r15     # 0x5b53f
movq %r15, %rsi
callq 0x5250
andq $0x0, (%rbx)
leaq 0x18(%rbx), %rax
movq %rax, 0x8(%rbx)
andq $0x0, 0x10(%rbx)
movb $0x0, 0x18(%rbx)
leaq 0x3e0(%rsp), %rdi
callq 0x47a24
leaq 0x378(%rsp), %rdi
callq 0x472c8
leaq 0x310(%rsp), %rdi
callq 0x472c8
movl 0x8(%r14), %eax
decl %eax
cmpl $0x4, %eax
ja 0x450c1
leaq 0x15a53(%rip), %rcx     # 0x5a93c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x10(%r14), %rsi
addq $0x8, %rsi
leaq 0x47747(%rip), %rdi     # 0x8c648
callq 0x47a70
movl %eax, %ebp
movq 0x10(%r14), %rsi
addq $0x8, %rsi
leaq 0x47701(%rip), %rdi     # 0x8c618
callq 0x47422
cmpl %eax, %ebp
jle 0x4549c
movq 0x10(%r14), %rsi
addq $0x8, %rsi
leaq 0x47715(%rip), %rdi     # 0x8c648
pushq $0x1
popq %rdx
leaq 0x3e0(%rsp), %rcx
callq 0x47b6e
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r15
leaq 0x408(%rsp), %rsi
movl -0x8(%rsi), %ebp
leaq 0x2f0(%rsp), %rdi
callq 0x5340
movb $0x1, %r12b
leaq 0x2f0(%rsp), %rdx
movq %r15, %rdi
movl %ebp, %esi
callq 0x46ac6
leaq 0x8(%rsp), %rsi
movq %r15, (%rsi)
leaq 0x14185(%rip), %rax     # 0x5910f
movq %rax, 0x8(%rsi)
xorl %r12d, %r12d
movq %rbx, %rdi
callq 0x47c7c
leaq 0x2f0(%rsp), %rdi
jmp 0x457ba
movq 0x18(%r14), %rsi
addq $0x8, %rsi
leaq 0x47663(%rip), %rdi     # 0x8c618
pushq $0x1
popq %rdx
leaq 0x310(%rsp), %rcx
callq 0x47682
testb %al, %al
je 0x451a2
cmpl $-0x1, 0x370(%rsp)
jne 0x45251
movq (%r14), %r15
leaq 0x15c41(%rip), %rsi     # 0x5ac26
leaq 0x1f0(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xfa26
leaq 0x1f0(%rsp), %rsi
movq %r15, %rdi
callq 0x3da88
leaq 0x1f0(%rsp), %rdi
callq 0x5120
jmp 0x45251
movq 0x10(%r14), %rsi
leaq 0x8(%rsp), %rdi
callq 0x44859
jmp 0x45037
movq 0x10(%r14), %rsi
leaq 0x8(%rsp), %rdi
callq 0x45b12
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x47c98
leaq 0x10(%rsp), %rdi
jmp 0x457ba
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r15
movq 0x10(%r14), %rax
movl 0x8(%rax), %ebp
cmpl $0x0, 0xc(%rax)
leaq 0x140a4(%rip), %r14     # 0x5910f
leaq 0x147f5(%rip), %rsi     # 0x59867
cmoveq %r14, %rsi
leaq 0x210(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0xfa26
movb $0x1, %r12b
leaq 0x210(%rsp), %rdx
movq %r15, %rdi
movl %ebp, %esi
callq 0x46ac6
leaq 0x8(%rsp), %rsi
movq %r15, (%rsi)
movq %r14, 0x8(%rsi)
xorl %r12d, %r12d
movq %rbx, %rdi
callq 0x47c7c
leaq 0x210(%rsp), %rdi
jmp 0x457ba
movq (%r14), %r14
leaq 0x15b7f(%rip), %rsi     # 0x5ac4a
leaq 0xf0(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xfa26
leaq 0xf0(%rsp), %rsi
movq %r14, %rdi
callq 0x3da88
leaq 0xf0(%rsp), %rdi
callq 0x5120
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r12
leaq 0x15b4f(%rip), %rsi     # 0x5ac5b
leaq 0xd0(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0xfa26
leaq 0x15af7(%rip), %rsi     # 0x5ac1c
leaq 0xb0(%rsp), %rdi
leaq 0x50(%rsp), %rdx
callq 0xfa26
movb $0x1, %bpl
leaq 0xd0(%rsp), %rsi
leaq 0xb0(%rsp), %rdx
movq %r12, %rdi
callq 0x46fc0
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, 0x8(%rsi)
xorl %ebp, %ebp
movq %rbx, %rdi
callq 0x47c7c
leaq 0xb0(%rsp), %rdi
callq 0x5120
leaq 0xd0(%rsp), %rdi
callq 0x5120
movq 0x45e4f(%rip), %rdi     # 0x8afd8
leaq 0x15ad1(%rip), %rsi     # 0x5ac61
callq 0x5250
movq %rax, %rdi
callq 0x5130
jmp 0x457bf
movq (%r14), %r15
leaq 0x158a7(%rip), %rsi     # 0x5aa53
leaq 0x50(%rsp), %rdi
leaq 0x70(%rsp), %rdx
callq 0xfa26
leaq 0x15e61(%rip), %rdx     # 0x5b023
leaq 0x30(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0xfd14
movq 0x18(%r14), %rdx
addq $0x8, %rdx
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0xfda4
leaq 0x15e34(%rip), %rdx     # 0x5b023
leaq 0x1d0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xfd14
leaq 0x1d0(%rsp), %rsi
movq %r15, %rdi
callq 0x3da88
leaq 0x1d0(%rsp), %rdi
callq 0x5120
leaq 0x8(%rsp), %rdi
callq 0x5120
leaq 0x30(%rsp), %rdi
callq 0x5120
leaq 0x50(%rsp), %rdi
callq 0x5120
movq 0x18(%r14), %rsi
addq $0x8, %rsi
leaq 0x310(%rsp), %rdi
callq 0x5160
movq 0x20(%r14), %rsi
leaq 0x8(%rsp), %rdi
callq 0x44859
leaq 0x10(%rsp), %rdi
movq -0x8(%rdi), %r14
callq 0x5120
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r15
leaq 0x47351(%rip), %rsi     # 0x8c5d0
leaq 0x90(%rsp), %rdi
callq 0x3bb90
leaq 0x159b1(%rip), %rdx     # 0x5ac44
leaq 0x70(%rsp), %rdi
leaq 0x90(%rsp), %rsi
callq 0x1def2
leaq 0x50(%rsp), %rdi
leaq 0x70(%rsp), %rsi
leaq 0x310(%rsp), %rdx
callq 0xfda4
leaq 0x15981(%rip), %rdx     # 0x5ac44
leaq 0x30(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0xfd14
leaq 0x190(%rsp), %rdi
movq %r14, %rsi
callq 0x47cb4
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x190(%rsp), %rdx
callq 0xfd33
leaq 0x15944(%rip), %rdx     # 0x5ac44
leaq 0x1b0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xfd14
leaq 0x330(%rsp), %r12
leaq 0x170(%rsp), %rdi
movq %r12, %rsi
callq 0x5340
leaq 0x1b0(%rsp), %rsi
leaq 0x170(%rsp), %rdx
movq %r15, %rdi
callq 0x46fc0
leaq 0x170(%rsp), %rdi
callq 0x5120
leaq 0x1b0(%rsp), %rdi
callq 0x5120
leaq 0x8(%rsp), %rdi
callq 0x5120
leaq 0x190(%rsp), %rdi
callq 0x5120
leaq 0x30(%rsp), %rdi
callq 0x5120
leaq 0x50(%rsp), %rdi
callq 0x5120
leaq 0x70(%rsp), %rdi
callq 0x5120
leaq 0x90(%rsp), %rdi
callq 0x5120
leaq 0x158a1(%rip), %rsi     # 0x5ac46
leaq 0x150(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r13
leaq 0x130(%rsp), %rdi
leaq 0x310(%rsp), %rsi
callq 0x5340
leaq 0x110(%rsp), %rdi
movq %r12, %rsi
callq 0x5340
movb $0x1, %bpl
leaq 0x130(%rsp), %rsi
leaq 0x110(%rsp), %rdx
movq %r13, %rdi
callq 0x46fc0
xorl %ebp, %ebp
leaq 0x471c5(%rip), %rdi     # 0x8c5d0
leaq 0x150(%rsp), %rsi
movq %r15, %rdx
movq %r13, %rcx
movq %r14, %r8
callq 0x46a38
leaq 0x110(%rsp), %rdi
callq 0x5120
leaq 0x130(%rsp), %rdi
callq 0x5120
leaq 0x150(%rsp), %rdi
callq 0x5120
leaq 0x350(%rsp), %rsi
movq 0x8(%rsi), %rcx
addq $-0x5, %rcx
leaq 0x30(%rsp), %rdi
xorl %edx, %edx
callq 0x52a0
leaq 0x10(%rsp), %r14
movq %r15, -0x8(%r14)
leaq 0x20(%rsp), %rcx
movq %rcx, -0x10(%rcx)
leaq 0x40(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x45664
movq %rdx, 0x10(%rsp)
movq 0x40(%rsp), %rcx
movq %rcx, 0x20(%rsp)
jmp 0x4566a
jge 0x456a1
movq 0x10(%r14), %rsi
addq $0x8, %rsi
leaq 0x47167(%rip), %rdi     # 0x8c618
pushq $0x1
popq %rdx
leaq 0x378(%rsp), %rcx
callq 0x47682
cmpq $0x5, 0x3c0(%rsp)
jb 0x455cb
leaq 0x3b8(%rsp), %rsi
leaq 0x8(%rsp), %rdi
pushq $0x5
popq %rcx
xorl %edx, %edx
callq 0x52a0
leaq 0x155a4(%rip), %rsi     # 0x5aa92
leaq 0x8(%rsp), %r15
movq %r15, %rdi
callq 0x15c52
movl %eax, %ebp
movq %r15, %rdi
callq 0x5120
testb %bpl, %bpl
je 0x455cb
movq (%r14), %r14
leaq 0x156dd(%rip), %rsi     # 0x5abf5
leaq 0x70(%rsp), %rdi
leaq 0x90(%rsp), %rdx
callq 0xfa26
leaq 0x15af2(%rip), %rdx     # 0x5b023
leaq 0x50(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0xfd14
leaq 0x30(%rsp), %rdi
leaq 0x50(%rsp), %rsi
leaq 0x378(%rsp), %rdx
callq 0xfda4
leaq 0x15ac5(%rip), %rdx     # 0x5b023
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0xfd14
leaq 0x1569a(%rip), %rdx     # 0x5ac0e
leaq 0x2d0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xfd14
leaq 0x2d0(%rsp), %rsi
movq %r14, %rdi
callq 0x3da88
leaq 0x2d0(%rsp), %rdi
callq 0x5120
leaq 0x8(%rsp), %rdi
callq 0x5120
leaq 0x30(%rsp), %rdi
callq 0x5120
leaq 0x50(%rsp), %rdi
callq 0x5120
leaq 0x70(%rsp), %rdi
callq 0x5120
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r15
leaq 0x2b0(%rsp), %rdi
leaq 0x378(%rsp), %rsi
callq 0x5340
leaq 0x398(%rsp), %r14
leaq 0x290(%rsp), %rdi
movq %r14, %rsi
callq 0x5340
movb $0x1, %bpl
leaq 0x2b0(%rsp), %rsi
leaq 0x290(%rsp), %rdx
movq %r15, %rdi
callq 0x46fc0
leaq 0x10(%rsp), %r12
movq %r15, -0x8(%r12)
xorl %ebp, %ebp
movq %r12, %rdi
movq %r14, %rsi
callq 0x5340
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x47c98
movq %r12, %rdi
callq 0x5120
leaq 0x290(%rsp), %rdi
callq 0x5120
leaq 0x2b0(%rsp), %rdi
jmp 0x457ba
movups (%rax), %xmm0
movups %xmm0, (%rcx)
leaq 0x30(%rsp), %r15
movq 0x8(%r15), %rcx
leaq 0x8(%rsp), %rsi
movq %rcx, 0x10(%rsi)
movq %rax, (%r15)
andq $0x0, 0x8(%r15)
movb $0x0, 0x10(%r15)
movq %rbx, %rdi
callq 0x47c98
movq %r14, %rdi
callq 0x5120
movq %r15, %rdi
jmp 0x457ba
movq (%r14), %r12
leaq 0x153a8(%rip), %rsi     # 0x5aa53
leaq 0x50(%rsp), %rdi
leaq 0x70(%rsp), %rdx
callq 0xfa26
leaq 0x15962(%rip), %rdx     # 0x5b023
leaq 0x30(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0xfd14
movq 0x10(%r14), %rdx
addq $0x8, %rdx
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0xfda4
leaq 0x15935(%rip), %rdx     # 0x5b023
leaq 0x270(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xfd14
leaq 0x270(%rsp), %rsi
movq %r12, %rdi
callq 0x3da88
leaq 0x270(%rsp), %rdi
callq 0x5120
leaq 0x8(%rsp), %rdi
callq 0x5120
leaq 0x30(%rsp), %rdi
callq 0x5120
leaq 0x50(%rsp), %rdi
callq 0x5120
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r12
movq 0x10(%r14), %rsi
addq $0x8, %rsi
leaq 0x250(%rsp), %rdi
callq 0x5340
leaq 0x154ba(%rip), %rsi     # 0x5ac1c
leaq 0x230(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0xfa26
movb $0x1, %bpl
leaq 0x250(%rsp), %rsi
leaq 0x230(%rsp), %rdx
movq %r12, %rdi
callq 0x46fc0
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, 0x8(%rsi)
xorl %ebp, %ebp
movq %rbx, %rdi
callq 0x47c7c
leaq 0x230(%rsp), %rdi
callq 0x5120
leaq 0x250(%rsp), %rdi
callq 0x5120
leaq 0x310(%rsp), %rdi
callq 0x46fa0
leaq 0x378(%rsp), %rdi
callq 0x46fa0
leaq 0x3e0(%rsp), %rdi
callq 0x46f8a
movq %rbx, %rax
addq $0x428, %rsp            # imm = 0x428
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
leaq 0x2d0(%rsp), %rdi
callq 0x5120
jmp 0x45810
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0x5120
jmp 0x4581f
movq %rax, %r14
leaq 0x30(%rsp), %rdi
callq 0x5120
jmp 0x4582e
movq %rax, %r14
leaq 0x50(%rsp), %rdi
callq 0x5120
jmp 0x4583d
movq %rax, %r14
leaq 0x70(%rsp), %rdi
jmp 0x45a72
jmp 0x45ad4
jmp 0x45ad4
movq %rax, %r14
leaq 0x1f0(%rsp), %rdi
jmp 0x45a72
jmp 0x45ad4
movq %rax, %r14
movb $0x1, %bpl
jmp 0x458b5
jmp 0x45a07
jmp 0x45ad4
movq %rax, %r14
movb $0x1, %bpl
jmp 0x458d2
movq %rax, %r14
leaq 0x270(%rsp), %rdi
jmp 0x458f8
jmp 0x45a21
jmp 0x45904
jmp 0x45ad4
jmp 0x45918
jmp 0x45927
jmp 0x45ad4
movq %rax, %r14
leaq 0x230(%rsp), %rdi
callq 0x5120
leaq 0x250(%rsp), %rdi
jmp 0x45a91
movq %rax, %r14
leaq 0x290(%rsp), %rdi
callq 0x5120
leaq 0x2b0(%rsp), %rdi
callq 0x5120
testb %bpl, %bpl
jne 0x45ab8
jmp 0x45ad7
movq %rax, %r14
leaq 0x1d0(%rsp), %rdi
callq 0x5120
jmp 0x45907
jmp 0x45a21
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0x5120
jmp 0x4591b
jmp 0x45ad4
movq %rax, %r14
leaq 0x30(%rsp), %rdi
callq 0x5120
jmp 0x4592a
movq %rax, %r14
leaq 0x50(%rsp), %rdi
jmp 0x45a72
jmp 0x45ad4
jmp 0x45ad4
movq %rax, %r14
movb $0x1, %bpl
jmp 0x45a4d
movq %rax, %r14
jmp 0x45a5f
movq %rax, %r14
jmp 0x45a6a
jmp 0x45ad4
movq %rax, %r14
leaq 0x170(%rsp), %rdi
callq 0x5120
jmp 0x45973
movq %rax, %r14
leaq 0x1b0(%rsp), %rdi
callq 0x5120
jmp 0x45985
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0x5120
jmp 0x45994
movq %rax, %r14
leaq 0x190(%rsp), %rdi
callq 0x5120
jmp 0x459a6
movq %rax, %r14
leaq 0x30(%rsp), %rdi
callq 0x5120
leaq 0x50(%rsp), %rdi
callq 0x5120
leaq 0x70(%rsp), %rdi
callq 0x5120
leaq 0x90(%rsp), %rdi
callq 0x5120
jmp 0x45ab8
movq %rax, %r14
jmp 0x459b0
movq %rax, %r14
jmp 0x459ba
movq %rax, %r14
jmp 0x459c4
jmp 0x45a21
movq %rax, %r14
leaq 0x2f0(%rsp), %rdi
jmp 0x45aae
jmp 0x45ad4
movq %rax, %r14
movb $0x1, %bpl
jmp 0x45a89
movq %rax, %r14
jmp 0x45a9b
jmp 0x45ad4
movq %rax, %r14
leaq 0xf0(%rsp), %rdi
jmp 0x45a72
movq %rax, %r14
jmp 0x45ab8
jmp 0x45ad4
jmp 0x45ad4
jmp 0x45ad4
jmp 0x45ad4
movq %rax, %r14
leaq 0x110(%rsp), %rdi
callq 0x5120
leaq 0x130(%rsp), %rdi
callq 0x5120
testb %bpl, %bpl
je 0x45a6a
pushq $0x48
popq %rsi
movq %r13, %rdi
callq 0x5270
leaq 0x150(%rsp), %rdi
callq 0x5120
jmp 0x45ad7
movq %rax, %r14
leaq 0xb0(%rsp), %rdi
callq 0x5120
leaq 0xd0(%rsp), %rdi
callq 0x5120
testb %bpl, %bpl
je 0x45ad7
pushq $0x48
popq %rsi
movq %r12, %rdi
jmp 0x45abe
movq %rax, %r14
leaq 0x210(%rsp), %rdi
callq 0x5120
testb %r12b, %r12b
je 0x45ad7
pushq $0x48
popq %rsi
movq %r15, %rdi
callq 0x5270
jmp 0x45ad7
movq %rax, %r14
jmp 0x45ae4
movq %rax, %r14
jmp 0x45af1
movq %rax, %r14
jmp 0x45afe
movq %rax, %r14
leaq 0x310(%rsp), %rdi
callq 0x46fa0
leaq 0x378(%rsp), %rdi
callq 0x46fa0
leaq 0x3e0(%rsp), %rdi
callq 0x46f8a
addq $0x8, %rbx
movq %rbx, %rdi
callq 0x5120
movq %r14, %rdi
callq 0x53f0