// File: /workspace/github_cpp_makefile_star2_O2/SunriseFox[P]very-simple-c-compiler/./src/asm.cpp
// Function: handleExprNode[abi:cxx11](TreeNode*)
string handleExprNode(TreeNode* node) {
    Symbol* ownSymbol = static_cast<ExprNode*>(node)->symbol;
    cerr << "symbol is: " << ownSymbol << ", " << ownSymbol->value << endl;

    if (node->nodeType == TreeNode::NODE_EXPRESSION) {
        cerr << "exprnode" << endl;
        if (ownSymbol->symbolType == Symbol::SYMBOL_CONSTANT) {
            if (ownSymbol->type == Symbol::VALUE_INT) {
                return string("$") + ownSymbol->value;
            }
            if (ownSymbol->type == Symbol::VALUE_CHAR) {
                return string("$") + to_string(ownSymbol->value[0]);
            }
        }
        return getSymbolMemory(ownSymbol);
    }

    if (node->nodeType == TreeNode::NODE_OPERATOR) {
        TreeNode* child[3];
        child[0] = node->child;
        child[1] = child[0] ? child[0]->sibling : nullptr;
        child[2] = child[1] ? child[1]->sibling : nullptr;

        auto opType = static_cast<OperatorNode*>(node)->type;

        string op = handleExprNode(child[0]);

        if (opType == OperatorNode::OP_TADDR) {
            string reg = getTmpReg(8);
            of << "\tleaq\t" << op << ", " << reg << "\n";
            return reg;
        } else if (opType == OperatorNode::OP_DEC) {
            of << "\tdecl\t" << op << "\n";
            return op;
        } else if (opType == OperatorNode::OP_INC) {
            of << "\tincl\t" << op << "\n";
            return op;
        }

        string reg;

        if (getRegNum(op) == -1) { // 不是寄存器
            reg = getTmpReg(4);
            of << "\tmovl\t" << op << ", " << reg << "\n";
        } else {
            reg = op;
        }

        if (opType == OperatorNode::OP_NOT) {
            of << "\ttestl\t" << reg << ", " << reg << "\n";
            of << "\tsete\t" << get2RegName(getRegNum(reg)) << "\n";
            of << "\tmovzbl\t"<< get2RegName(getRegNum(reg)) << ", " << reg << "\n";
            return reg;
        }

        protectRegByName(reg);

        op = handleExprNode(child[1]);
        releaseRegByName(reg);

        string target;

        if(opType == OperatorNode::OP_LAND) {
            string Lfail = getNextLabel();
            string Lend = getNextLabel();
            of << "\ttest\t" << reg << ", " << reg << "\n";
            of << "\tje\t" << Lfail << "\n";
            of << "\tmovl\t" << op << ", " << reg << "\n";
            of << "\ttest\t" << reg << ", " << reg << "\n";
            of << "\tje\t" << Lfail << "\n";
            of << "\tmovl\t$1, " << reg << "\n";
            of << "\tjmp\t" << Lend << "\n";
            of << Lfail << ":\n";
            of << "\tmovl\t$0, " << reg << "\n";
            of << Lend << ":\n";
            return reg;
        } else if (opType == OperatorNode::OP_LOR) {
            string L2 = getNextLabel();
            string L3 = getNextLabel();
            string Lend = getNextLabel();
            of << "\ttest\t" << reg << ", " << reg << "\n";
            of << "\tjne\t" << L2 << "\n";
            of << "\tmovl\t" << op << ", " << reg << "\n";
            of << "\ttest\t" << reg << ", " << reg << "\n";
            of << "\tje\t" << L3 << "\n";
            of << L2 << ":\n";
            of << "\tmovl\t$1, " << reg << "\n";
            of << "\tjmp\t" << Lend << "\n";
            of << L3 << ":\n";
            of << "\tmovl\t$0, " << reg << "\n";
            of << Lend << ":\n";
            return reg;
        }
        switch (opType) {
        case OperatorNode::OP_ADD:
            of << "\taddl\t" << op << ", " << reg << "\n";
            return reg;
        case OperatorNode::OP_SUB:
            of << "\tsubl\t" << op << ", " << reg << "\n";
            return reg;
        case OperatorNode::OP_ASSIGN:
            of << "\tmovl\t" << reg << ", " << op << "\n";
            return reg;
        case OperatorNode::OP_MULAS:
            of << "\timull\t" << op << ", " << reg << "\n";
            of << "\tmovl\t" << reg << ", " << op << "\n";
            return "";
        case OperatorNode::OP_MORE:
        case OperatorNode::OP_MOREEQ:
        case OperatorNode::OP_LESS:
        case OperatorNode::OP_LESSEQ:
            target = getTmpReg(2);
            string what;
            switch (opType) {
            case OperatorNode::OP_MORE:
                what = "le"; break;
            case OperatorNode::OP_MOREEQ:
                what = "l"; break;
            case OperatorNode::OP_LESS:
                what = "ge"; break;
            case OperatorNode::OP_LESSEQ:
                what = "g"; break;
            default: break;
            }
            of << "\tcmpl\t" << op << ", " << reg << "\n";
            of << "\tset" << what << "\t" << target << "\n";
            reg = getTmpReg(4);
            of << "\tmovzbl\t" << target << ", " << reg << "\n";
            return reg;
        }
        cerr << "++++ operator not handled" << endl;
        return getSymbolMemory(ownSymbol);
    }

    if (node->nodeType == TreeNode::NODE_FUNCCALL) {
        handleFuncCall(node);
        return "%eax";
    }

    return "";
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq %rsi, %r12
movq %rdi, %rbx
movq 0x28(%rsi), %r14
movq 0xd740(%rip), %rdi      # 0x11ff0
leaq 0x6aa7(%rip), %rsi      # 0xb35e
callq 0x31d0
movq %rax, %rdi
movq %r14, %rsi
callq 0x3170
leaq 0x6af5(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%r14), %r15
movq %rax, %rdi
movq %r15, %rsi
callq 0x31c0
movq %rax, %rdi
callq 0x3100
movl 0x10(%r12), %eax
cmpl $0x5, %eax
je 0x4947
cmpl $0x4, %eax
je 0x4937
cmpl $0x3, %eax
jne 0x4958
movq 0xd6e8(%rip), %rdi      # 0x11ff0
leaq 0x6a5b(%rip), %rsi      # 0xb36a
callq 0x31d0
movq %rax, %rdi
callq 0x3100
cmpl $0x0, 0x28(%r14)
je 0x49f7
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3d89
jmp 0x568b
movq 0x18(%r12), %rsi
testq %rsi, %rsi
je 0x4971
movq 0x20(%rsi), %r15
jmp 0x4974
movq %r12, %rdi
callq 0x4406
leaq 0x6892(%rip), %rsi      # 0xb1e8
jmp 0x495f
leaq 0x6a47(%rip), %rsi      # 0xb3a6
leaq 0x28(%rsp), %rdx
movq %rbx, %rdi
callq 0x615c
jmp 0x568b
xorl %r15d, %r15d
movslq 0x30(%r12), %rbp
leaq 0x28(%rsp), %rdi
callq 0x488e
testq %rbp, %rbp
je 0x4a68
cmpl $0x1, %ebp
je 0x4a37
cmpl $0xd, %ebp
jne 0x4aba
pushq $0x8
popq %rsi
movq %rbx, %rdi
callq 0x3a35
leaq 0xd8b8(%rip), %rdi      # 0x12268
leaq 0x6955(%rip), %rsi      # 0xb30c
callq 0x31d0
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x69f3(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
movq %rax, %rdi
movq %rbx, %rsi
callq 0x31c0
leaq 0x6b26(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
jmp 0x5681
movl (%r14), %eax
cmpl $0x5, %eax
je 0x4b14
cmpl $0x2, %eax
jne 0x4927
leaq 0x6960(%rip), %rsi      # 0xb373
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x615c
leaq 0x28(%rsp), %rsi
movq %rbx, %rdi
movq %r15, %rdx
callq 0x62f6
jmp 0x5681
leaq 0xd82a(%rip), %rdi      # 0x12268
leaq 0x6930(%rip), %rsi      # 0xb375
callq 0x31d0
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6ab2(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
jmp 0x4a97
leaq 0xd7f9(%rip), %rdi      # 0x12268
leaq 0x6906(%rip), %rsi      # 0xb37c
callq 0x31d0
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6a81(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
leaq 0x38(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x4af0
movq %rdx, (%rbx)
movq 0x38(%rsp), %rcx
movq %rcx, 0x10(%rbx)
jmp 0x4af6
leaq 0x18(%rsp), %r13
movq %r13, -0x10(%r13)
andq $0x0, -0x8(%r13)
movb $0x0, (%r13)
leaq 0x28(%rsp), %rdi
callq 0x3ab1
cmpl $-0x1, %eax
je 0x4b51
leaq 0x8(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x3130
jmp 0x4bc3
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x30(%rsp), %rcx
movq %rcx, 0x8(%rbx)
movq %rax, 0x28(%rsp)
andq $0x0, 0x30(%rsp)
movb $0x0, 0x38(%rsp)
jmp 0x5681
leaq 0x6858(%rip), %rsi      # 0xb373
leaq 0x28(%rsp), %rdi
leaq 0x68(%rsp), %rdx
callq 0x615c
movq (%r15), %rax
movsbl (%rax), %esi
leaq 0x8(%rsp), %rdi
callq 0x6272
leaq 0x28(%rsp), %rsi
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0x620b
jmp 0x5677
leaq 0x68(%rsp), %rdi
pushq $0x4
popq %rsi
callq 0x3a35
leaq 0x8(%rsp), %rdi
leaq 0x68(%rsp), %r12
movq %r12, %rsi
callq 0x3280
movq %r12, %rdi
callq 0x30f0
leaq 0xd6e9(%rip), %rdi      # 0x12268
leaq 0x677f(%rip), %rsi      # 0xb305
callq 0x31d0
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6824(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6955(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
cmpl $0x2, %ebp
jne 0x4cfd
leaq 0xd695(%rip), %rdi      # 0x12268
leaq 0x67a9(%rip), %rsi      # 0xb383
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x67d0(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6901(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xd64a(%rip), %rdi      # 0x12268
leaq 0x6766(%rip), %rsi      # 0xb38b
callq 0x31d0
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0x3ab1
leaq 0x68(%rsp), %rdi
movl %eax, %esi
callq 0x36fc
leaq 0x68(%rsp), %rsi
movq %r14, %rdi
callq 0x31c0
leaq 0x68b9(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0x68(%rsp), %rdi
callq 0x30f0
leaq 0xd5f8(%rip), %rdi      # 0x12268
leaq 0x671b(%rip), %rsi      # 0xb392
callq 0x31d0
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0x3ab1
leaq 0x68(%rsp), %rdi
movl %eax, %esi
callq 0x36fc
leaq 0x68(%rsp), %rsi
movq %r14, %rdi
callq 0x31c0
leaq 0x671a(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x684b(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0x68(%rsp), %rdi
callq 0x30f0
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
movq 0x8(%rsp), %rcx
cmpq %r13, %rcx
je 0x4ee3
movq %rcx, (%rbx)
movq 0x18(%rsp), %rax
movq %rax, 0x10(%rbx)
jmp 0x4eeb
leaq 0x8(%rsp), %rdi
callq 0x3d57
leaq 0x68(%rsp), %rdi
movq %r15, %rsi
callq 0x488e
leaq 0x28(%rsp), %rdi
leaq 0x68(%rsp), %r15
movq %r15, %rsi
callq 0x3280
movq %r15, %rdi
callq 0x30f0
leaq 0x8(%rsp), %rdi
callq 0x3d70
leaq 0x78(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leal -0x9(%rbp), %eax
cmpl $0x12, %eax
ja 0x4f2f
leaq 0x639c(%rip), %rcx      # 0xb0f8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x48(%rsp), %rdi
pushq $0x2
popq %rsi
callq 0x3a35
leaq 0x68(%rsp), %rdi
leaq 0x48(%rsp), %r14
movq %r14, %rsi
callq 0x3280
movq %r14, %rdi
callq 0x30f0
leaq 0x58(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x63e0(%rip), %rax      # 0xb184
movslq -0x44(%rax,%rbp,4), %rsi
addq %rax, %rsi
leaq 0x48(%rsp), %rdi
callq 0x33c0
leaq 0xd4ab(%rip), %rdi      # 0x12268
leaq 0x6621(%rip), %rsi      # 0xb3e5
callq 0x31d0
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x65e6(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6717(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xd460(%rip), %rdi      # 0x12268
leaq 0x65dd(%rip), %rsi      # 0xb3ec
callq 0x31d0
leaq 0x48(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x657d(%rip), %rsi      # 0xb3a5
movq %rax, %rdi
callq 0x31d0
leaq 0x68(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x66cc(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0x88(%rsp), %rdi
pushq $0x4
popq %rsi
callq 0x3a35
leaq 0x8(%rsp), %rdi
leaq 0x88(%rsp), %r14
movq %r14, %rsi
callq 0x3280
movq %r14, %rdi
callq 0x30f0
leaq 0xd3e8(%rip), %rdi      # 0x12268
leaq 0x650b(%rip), %rsi      # 0xb392
callq 0x31d0
leaq 0x68(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6523(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6654(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
movq 0x8(%rsp), %rcx
cmpq %r13, %rcx
je 0x4f09
movq %rcx, (%rbx)
movq 0x18(%rsp), %rax
movq %rax, 0x10(%rbx)
jmp 0x4f11
movups (%r13), %xmm0
movups %xmm0, (%rax)
movq 0x10(%rsp), %rax
movq %rax, 0x8(%rbx)
movq %r13, 0x8(%rsp)
andq $0x0, 0x10(%rsp)
movb $0x0, 0x18(%rsp)
jmp 0x5677
movups (%r13), %xmm0
movups %xmm0, (%rax)
movq 0x10(%rsp), %rax
movq %rax, 0x8(%rbx)
movq %r13, 0x8(%rsp)
andq $0x0, 0x10(%rsp)
movb $0x0, 0x18(%rsp)
jmp 0x5663
cmpl $0x23, %ebp
jne 0x4f84
leaq 0xd32d(%rip), %rdi      # 0x12268
leaq 0x63c3(%rip), %rsi      # 0xb305
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6468(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6599(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
jmp 0x5378
movq 0xd065(%rip), %rdi      # 0x11ff0
leaq 0x645f(%rip), %rsi      # 0xb3f1
callq 0x31d0
movq %rax, %rdi
callq 0x3100
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3d89
jmp 0x566d
leaq 0x48(%rsp), %rdi
callq 0x3e5e
leaq 0x88(%rsp), %rdi
callq 0x3e5e
leaq 0xa8(%rsp), %rdi
callq 0x3e5e
leaq 0xd28e(%rip), %rdi      # 0x12268
leaq 0x63ba(%rip), %rsi      # 0xb39b
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x63c9(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x64fa(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xd243(%rip), %rdi      # 0x12268
leaq 0x639a(%rip), %rsi      # 0xb3c6
callq 0x31d0
leaq 0x48(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x64cb(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xd214(%rip), %rdi      # 0x12268
leaq 0x62aa(%rip), %rsi      # 0xb305
callq 0x31d0
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x634f(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6480(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xd1c9(%rip), %rdi      # 0x12268
leaq 0x62f5(%rip), %rsi      # 0xb39b
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6304(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6435(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xd17e(%rip), %rdi      # 0x12268
leaq 0x62b1(%rip), %rsi      # 0xb3a2
callq 0x31d0
leaq 0x88(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6403(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xd14c(%rip), %rdi      # 0x12268
leaq 0x48(%rsp), %rsi
callq 0x31c0
leaq 0x628b(%rip), %rsi      # 0xb3b8
movq %rax, %rdi
callq 0x31d0
leaq 0xd12c(%rip), %rdi      # 0x12268
leaq 0x6264(%rip), %rsi      # 0xb3a7
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x63b4(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xd0fd(%rip), %rdi      # 0x12268
leaq 0x6240(%rip), %rsi      # 0xb3b2
callq 0x31d0
leaq 0xa8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6382(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xd0cb(%rip), %rdi      # 0x12268
leaq 0x88(%rsp), %rsi
callq 0x31c0
leaq 0x6207(%rip), %rsi      # 0xb3b8
movq %rax, %rdi
callq 0x31d0
leaq 0xd0a8(%rip), %rdi      # 0x12268
leaq 0x61f4(%rip), %rsi      # 0xb3bb
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6330(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xd079(%rip), %rdi      # 0x12268
leaq 0xa8(%rsp), %rsi
callq 0x31c0
leaq 0x61b5(%rip), %rsi      # 0xb3b8
movq %rax, %rdi
callq 0x31d0
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
movq 0x8(%rsp), %rcx
cmpq %r13, %rcx
je 0x5628
movq %rcx, (%rbx)
movq 0x18(%rsp), %rax
movq %rax, 0x10(%rbx)
jmp 0x5630
leaq 0xd030(%rip), %rdi      # 0x12268
leaq 0x619b(%rip), %rsi      # 0xb3da
callq 0x31d0
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x616b(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x629c(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xcfe5(%rip), %rdi      # 0x12268
leaq 0x607b(%rip), %rsi      # 0xb305
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6120(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6251(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0x60d8(%rip), %rsi      # 0xb3a6
leaq 0x48(%rsp), %rdx
movq %rbx, %rdi
callq 0x615c
jmp 0x566d
leaq 0xcf81(%rip), %rdi      # 0x12268
leaq 0x60de(%rip), %rsi      # 0xb3cc
callq 0x31d0
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x60bc(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x61ed(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
jmp 0x5378
leaq 0xcf34(%rip), %rdi      # 0x12268
leaq 0x6098(%rip), %rsi      # 0xb3d3
callq 0x31d0
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x606f(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x61a0(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
movq 0x8(%rsp), %rcx
cmpq %r13, %rcx
je 0x5397
movq %rcx, (%rbx)
movq 0x18(%rsp), %rax
movq %rax, 0x10(%rbx)
jmp 0x539f
movups (%r13), %xmm0
movups %xmm0, (%rax)
movq 0x10(%rsp), %rax
movq %rax, 0x8(%rbx)
movq %r13, 0x8(%rsp)
andq $0x0, 0x10(%rsp)
movb $0x0, 0x18(%rsp)
jmp 0x566d
leaq 0x48(%rsp), %rdi
callq 0x3e5e
leaq 0x88(%rsp), %rdi
callq 0x3e5e
leaq 0xce8d(%rip), %rdi      # 0x12268
leaq 0x5fb9(%rip), %rsi      # 0xb39b
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x5fc8(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x60f9(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xce42(%rip), %rdi      # 0x12268
leaq 0x5f75(%rip), %rsi      # 0xb3a2
callq 0x31d0
leaq 0x48(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x60ca(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xce13(%rip), %rdi      # 0x12268
leaq 0x5ea9(%rip), %rsi      # 0xb305
callq 0x31d0
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x5f4e(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x607f(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xcdc8(%rip), %rdi      # 0x12268
leaq 0x5ef4(%rip), %rsi      # 0xb39b
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x5f03(%rip), %rsi      # 0xb3c3
movq %rax, %rdi
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6034(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xcd7d(%rip), %rdi      # 0x12268
leaq 0x5eb0(%rip), %rsi      # 0xb3a2
callq 0x31d0
leaq 0x48(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x6005(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xcd4e(%rip), %rdi      # 0x12268
leaq 0x5e86(%rip), %rsi      # 0xb3a7
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x5fd6(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xcd1f(%rip), %rdi      # 0x12268
leaq 0x5e62(%rip), %rsi      # 0xb3b2
callq 0x31d0
leaq 0x88(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x5fa4(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xcced(%rip), %rdi      # 0x12268
leaq 0x48(%rsp), %rsi
callq 0x31c0
leaq 0x5e2c(%rip), %rsi      # 0xb3b8
movq %rax, %rdi
callq 0x31d0
leaq 0xcccd(%rip), %rdi      # 0x12268
leaq 0x5e19(%rip), %rsi      # 0xb3bb
callq 0x31d0
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
leaq 0x5f55(%rip), %rsi      # 0xb510
movq %rax, %rdi
callq 0x31d0
leaq 0xcc9e(%rip), %rdi      # 0x12268
leaq 0x88(%rsp), %rsi
callq 0x31c0
leaq 0x5dda(%rip), %rsi      # 0xb3b8
movq %rax, %rdi
callq 0x31d0
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
movq 0x8(%rsp), %rcx
cmpq %r13, %rcx
je 0x5605
movq %rcx, (%rbx)
movq 0x18(%rsp), %rax
movq %rax, 0x10(%rbx)
jmp 0x560d
movups (%r13), %xmm0
movups %xmm0, (%rax)
movq 0x10(%rsp), %rax
movq %rax, 0x8(%rbx)
movq %r13, 0x8(%rsp)
andq $0x0, 0x10(%rsp)
movb $0x0, 0x18(%rsp)
jmp 0x5656
movups (%r13), %xmm0
movups %xmm0, (%rax)
movq 0x10(%rsp), %rax
movq %rax, 0x8(%rbx)
movq %r13, 0x8(%rsp)
andq $0x0, 0x10(%rsp)
movb $0x0, 0x18(%rsp)
leaq 0xa8(%rsp), %rdi
callq 0x30f0
leaq 0x88(%rsp), %rdi
callq 0x30f0
leaq 0x48(%rsp), %rdi
callq 0x30f0
leaq 0x68(%rsp), %rdi
callq 0x30f0
leaq 0x8(%rsp), %rdi
callq 0x30f0
leaq 0x28(%rsp), %rdi
callq 0x30f0
movq %rbx, %rax
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x56ed
jmp 0x56c9
jmp 0x56f2
jmp 0x56f2
jmp 0x56ed
jmp 0x56ed
jmp 0x56f2
jmp 0x56ed
jmp 0x5718
jmp 0x5718
jmp 0x5718
jmp 0x5713
jmp 0x5713
jmp 0x56bc
movq %rax, %r14
jmp 0x572f
jmp 0x5718
jmp 0x56ed
jmp 0x5718
jmp 0x56ed
movq %rax, %r14
jmp 0x56de
movq %rax, %r14
leaq 0xa8(%rsp), %rdi
callq 0x30f0
leaq 0x88(%rsp), %rdi
callq 0x30f0
jmp 0x56f5
movq %rax, %r14
jmp 0x56ff
movq %rax, %r14
leaq 0x48(%rsp), %rdi
callq 0x30f0
leaq 0x68(%rsp), %rdi
callq 0x30f0
jmp 0x571b
movq %rax, %r14
movq %rbx, %rdi
jmp 0x5720
movq %rax, %r14
jmp 0x5725
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0x30f0
leaq 0x28(%rsp), %rdi
callq 0x30f0
movq %r14, %rdi
callq 0x3390