// File: fondoger[P]C0-Compiler/src/mips.cpp
// Function: gen_COMPARE(_FourTuple const&)
static void gen_COMPARE(const FourTuple &ft)
{
    int val1, val2;
    m++;
    assert((*m).op == BZ || (*m).op == BNZ);
    // For const values, we can use a goto directly
    if (isConstValue(ft.a, val1) && 
        (ft.b == "" || isConstValue(ft.res, val2))) {
        if (ft.b != "") {
            val1 = (ft.b == "EQL" ? val1 == val2 :
                    ft.b == "NEQ" ? val1 != val2 :
                    ft.b == "LSS" ? val1 <  val2 :
                    ft.b == "LEQ" ? val1 <= val2 :
                    ft.b == "GTR" ? val1 >  val2 :
                    ft.b == "GEQ" ? val1 >= val2 :
                    -1);
            assert(val1 == 0 || val1 == 1);
        }
        if (((*m).op == BZ && val1 == 0) ||
            ((*m).op == BNZ && val1 != 0)) {
            MIPS(T << "j" << HT << (*m).a);
        }
        return;
    }

    // no comparision
    if (ft.b == "") { 
        assert(isConstValue(ft.a, val1) == false);
        loadToReg("$v0", ft.a);
        if ((*m).op == BZ) {
            MIPS(T << "beq" << HT << "$v0, $zero, " << (*m).a);
        } else {
            MIPS(T << "bne" << HT << "$v0, $zero, " << (*m).a);
        }
        return;
    }

    assert(ft.b != "" && ft.res != "");
    assert(!(isConstValue(ft.a, val1) && isConstValue(ft.res, val2)));

    std::string operand1 = "$v0";
    if (isConstValue(ft.a, val1) && val1 == 0) {
        // if ft.a is a const zero value, we can 
        // use $zero to reduce a load operation
        operand1 = "$zero";
    } else {
        loadToReg("$v0", ft.a);
    }
    std::string operand2 = "$v1";
    if (isConstValue(ft.res, val2) && val2 == 0) {
        // if ft.res is a const zero value, we can
        // use $zero to reduce a load operation
        operand2 = "$zero";
    } else {
        loadToReg("$v1", ft.res);
    }

    if (ft.b == "EQL" || ft.b == "NEQ") {
        std::string op = ((ft.b == "EQL") ^ ((*m).op == BZ)) ?
            "beq" : "bne";
        MIPS( T << op << HT << operand1 << ", " << operand2
                << ", " << (*m).a);
        return;
    }

    assert(!(operand1 == "$zero" && operand2 == "$zero"));

    // reduce a substract operation, this can be removed freely
    if (operand2 == "$zero") {
        std::string op = (
            ft.b == "LSS" ? ((*m).op == BZ ? "bgez": "bltz"):
            ft.b == "LEQ" ? ((*m).op == BZ ? "bgtz": "blez"):
            ft.b == "GTR" ? ((*m).op == BZ ? "blez": "bgtz"):
            ft.b == "GEQ" ? ((*m).op == BZ ? "bltz": "bgez"):
            "");
        assert(op != "");
        MIPS(T << op << HT << "$v0 ," << (*m).a);
        return;
    }

    // reduce a substract operation, this can be removed freely
    if (operand1 == "$zero") {
        std::string op = (
            ft.b == "LSS" ? ((*m).op == BZ ? "bltz": "bgez"):
            ft.b == "LEQ" ? ((*m).op == BZ ? "blez": "bgtz"):
            ft.b == "GTR" ? ((*m).op == BZ ? "bgtz": "blez"):
            ft.b == "GEQ" ? ((*m).op == BZ ? "bgez": "bltz"):
            "");
        assert(op != "");
        MIPS(T << op << HT << "$v1 ," << (*m).a);
        return;
    }

    MIPS(T << "subu" << HT << "$v0, " << operand1 << ", " << operand2);
    std::string op = (
        ft.b == "LSS" ? ((*m).op == BZ ? "bgez": "bltz"):
        ft.b == "LEQ" ? ((*m).op == BZ ? "bgtz": "blez"):
        ft.b == "GTR" ? ((*m).op == BZ ? "blez": "bgtz"):
        ft.b == "GEQ" ? ((*m).op == BZ ? "bltz": "bgez"):
        "");
    assert(op != "");
    MIPS(T << op << HT << "$v0, " << (*m).a);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3e0, %rsp            # imm = 0x3E0
movq %rdi, -0x8(%rbp)
leaq 0x1ee32(%rip), %rdi     # 0x4a7d8
xorl %esi, %esi
callq 0x2d2e0
movq %rax, -0x18(%rbp)
leaq 0x1ee20(%rip), %rdi     # 0x4a7d8
callq 0x22e40
movq %rax, %rcx
movb $0x1, %al
cmpl $0x15, (%rcx)
movb %al, -0x18a(%rbp)
je 0x2b9e5
leaq 0x1ee04(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x16, (%rax)
sete %al
movb %al, -0x18a(%rbp)
movb -0x18a(%rbp), %al
testb $0x1, %al
jne 0x2b9f1
jmp 0x2b9f3
jmp 0x2ba12
leaq 0xa905(%rip), %rdi      # 0x362ff
leaq 0xa58f(%rip), %rsi      # 0x35f90
movl $0x1ff, %edx            # imm = 0x1FF
leaq 0xa912(%rip), %rcx      # 0x3631f
callq 0x3230
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
leaq -0xc(%rbp), %rsi
callq 0x27780
testb $0x1, %al
jne 0x2ba2c
jmp 0x2bcca
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0xa5ba(%rip), %rsi      # 0x35ff5
callq 0x2d280
testb $0x1, %al
jne 0x2ba5e
movq -0x8(%rbp), %rdi
addq $0x48, %rdi
leaq -0x10(%rbp), %rsi
callq 0x27780
testb $0x1, %al
jne 0x2ba5e
jmp 0x2bcca
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0xa588(%rip), %rsi      # 0x35ff5
callq 0x2d2b0
testb $0x1, %al
jne 0x2ba7b
jmp 0x2bc43
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x95e8(%rip), %rsi      # 0x35072
callq 0x2d280
testb $0x1, %al
jne 0x2ba95
jmp 0x2baae
movl -0xc(%rbp), %eax
cmpl -0x10(%rbp), %eax
sete %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x190(%rbp)
jmp 0x2bbf0
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x95b9(%rip), %rsi      # 0x35076
callq 0x2d280
testb $0x1, %al
jne 0x2bac8
jmp 0x2bae1
movl -0xc(%rbp), %eax
cmpl -0x10(%rbp), %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x194(%rbp)
jmp 0x2bbe4
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x958a(%rip), %rsi      # 0x3507a
callq 0x2d280
testb $0x1, %al
jne 0x2bafb
jmp 0x2bb14
movl -0xc(%rbp), %eax
cmpl -0x10(%rbp), %eax
setl %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x198(%rbp)
jmp 0x2bbd8
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x955b(%rip), %rsi      # 0x3507e
callq 0x2d280
testb $0x1, %al
jne 0x2bb2e
jmp 0x2bb47
movl -0xc(%rbp), %eax
cmpl -0x10(%rbp), %eax
setle %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x19c(%rbp)
jmp 0x2bbcc
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x952c(%rip), %rsi      # 0x35082
callq 0x2d280
testb $0x1, %al
jne 0x2bb61
jmp 0x2bb77
movl -0xc(%rbp), %eax
cmpl -0x10(%rbp), %eax
setg %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x1a0(%rbp)
jmp 0x2bbc0
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x9500(%rip), %rsi      # 0x35086
callq 0x2d280
testb $0x1, %al
jne 0x2bb91
jmp 0x2bba7
movl -0xc(%rbp), %eax
cmpl -0x10(%rbp), %eax
setge %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x1a4(%rbp)
jmp 0x2bbb4
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movl %eax, -0x1a4(%rbp)
jmp 0x2bbb4
movl -0x1a4(%rbp), %eax
movl %eax, -0x1a0(%rbp)
movl -0x1a0(%rbp), %eax
movl %eax, -0x19c(%rbp)
movl -0x19c(%rbp), %eax
movl %eax, -0x198(%rbp)
movl -0x198(%rbp), %eax
movl %eax, -0x194(%rbp)
movl -0x194(%rbp), %eax
movl %eax, -0x190(%rbp)
movl -0x190(%rbp), %eax
movl %eax, -0xc(%rbp)
movb $0x1, %al
cmpl $0x0, -0xc(%rbp)
movb %al, -0x1a5(%rbp)
je 0x2bc14
cmpl $0x1, -0xc(%rbp)
sete %al
movb %al, -0x1a5(%rbp)
movb -0x1a5(%rbp), %al
testb $0x1, %al
jne 0x2bc20
jmp 0x2bc22
jmp 0x2bc41
leaq 0xa71a(%rip), %rdi      # 0x36343
leaq 0xa360(%rip), %rsi      # 0x35f90
movl $0x20b, %edx            # imm = 0x20B
leaq 0xa6e3(%rip), %rcx      # 0x3631f
callq 0x3230
jmp 0x2bc43
leaq 0x1eb8e(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2bc5a
cmpl $0x0, -0xc(%rbp)
je 0x2bc71
leaq 0x1eb77(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x16, (%rax)
jne 0x2bcc5
cmpl $0x0, -0xc(%rbp)
je 0x2bcc5
leaq 0x1e9b8(%rip), %rdi     # 0x4a630
addq $0x10, %rdi
leaq 0xa659(%rip), %rsi      # 0x362dc
callq 0x3300
movq %rax, %rdi
leaq 0xa362(%rip), %rsi      # 0x35ff4
callq 0x3300
movq %rax, -0x1b0(%rbp)
leaq 0x1eb33(%rip), %rdi     # 0x4a7d8
callq 0x22e40
movq -0x1b0(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0x32c0
movq %rax, %rdi
callq 0x29270
jmp 0x2ce57
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0xa31c(%rip), %rsi      # 0x35ff5
callq 0x2d280
testb $0x1, %al
jne 0x2bce7
jmp 0x2be87
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
leaq -0xc(%rbp), %rsi
callq 0x27780
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x2bd04
jmp 0x2bd23
leaq 0xa64f(%rip), %rdi      # 0x3635a
leaq 0xa27e(%rip), %rsi      # 0x35f90
movl $0x216, %edx            # imm = 0x216
leaq 0xa601(%rip), %rcx      # 0x3631f
callq 0x3230
leaq -0x39(%rbp), %rdi
movq %rdi, -0x1b8(%rbp)
callq 0x3570
movq -0x1b8(%rbp), %rdx
leaq 0xa3ae(%rip), %rsi      # 0x360ef
leaq -0x38(%rbp), %rdi
callq 0x3440
jmp 0x2bd4c
movq -0x8(%rbp), %rsi
addq $0x8, %rsi
leaq -0x38(%rbp), %rdi
callq 0x2cf90
jmp 0x2bd5f
leaq -0x38(%rbp), %rdi
callq 0x35e8
leaq -0x39(%rbp), %rdi
callq 0x3370
leaq 0x1ea60(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2be1f
leaq 0x1e8a3(%rip), %rdi     # 0x4a630
addq $0x10, %rdi
leaq 0xa5e4(%rip), %rsi      # 0x3637c
callq 0x3300
movq %rax, %rdi
leaq 0xa24d(%rip), %rsi      # 0x35ff4
callq 0x3300
movq %rax, %rdi
leaq 0xa5ca(%rip), %rsi      # 0x36380
callq 0x3300
movq %rax, -0x1c0(%rbp)
leaq 0x1ea0f(%rip), %rdi     # 0x4a7d8
callq 0x22e40
movq -0x1c0(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0x32c0
movq %rax, %rdi
callq 0x29270
jmp 0x2be82
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x2be11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x35e8
leaq -0x39(%rbp), %rdi
callq 0x3370
jmp 0x2ce8d
leaq 0x1e80a(%rip), %rdi     # 0x4a630
addq $0x10, %rdi
leaq 0xa55c(%rip), %rsi      # 0x3638d
callq 0x3300
movq %rax, %rdi
leaq 0xa1b4(%rip), %rsi      # 0x35ff4
callq 0x3300
movq %rax, %rdi
leaq 0xa531(%rip), %rsi      # 0x36380
callq 0x3300
movq %rax, -0x1c8(%rbp)
leaq 0x1e976(%rip), %rdi     # 0x4a7d8
callq 0x22e40
movq -0x1c8(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0x32c0
movq %rax, %rdi
callq 0x29270
jmp 0x2ce57
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0xa15f(%rip), %rsi      # 0x35ff5
callq 0x2d2b0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x1c9(%rbp)
jne 0x2beac
jmp 0x2bec6
movq -0x8(%rbp), %rdi
addq $0x48, %rdi
leaq 0xa13a(%rip), %rsi      # 0x35ff5
callq 0x2d2b0
movb %al, -0x1c9(%rbp)
movb -0x1c9(%rbp), %al
testb $0x1, %al
jne 0x2bed2
jmp 0x2bed4
jmp 0x2bef3
leaq 0xa4b6(%rip), %rdi      # 0x36391
leaq 0xa0ae(%rip), %rsi      # 0x35f90
movl $0x220, %edx            # imm = 0x220
leaq 0xa431(%rip), %rcx      # 0x3631f
callq 0x3230
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
leaq -0xc(%rbp), %rsi
callq 0x27780
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x1ca(%rbp)
jne 0x2bf15
jmp 0x2bf2c
movq -0x8(%rbp), %rdi
addq $0x48, %rdi
leaq -0x10(%rbp), %rsi
callq 0x27780
movb %al, -0x1ca(%rbp)
movb -0x1ca(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x2bf3a
jmp 0x2bf3c
jmp 0x2bf5b
leaq 0xa469(%rip), %rdi      # 0x363ac
leaq 0xa046(%rip), %rsi      # 0x35f90
movl $0x221, %edx            # imm = 0x221
leaq 0xa3c9(%rip), %rcx      # 0x3631f
callq 0x3230
leaq -0x71(%rbp), %rdi
movq %rdi, -0x1d8(%rbp)
callq 0x3570
movq -0x1d8(%rbp), %rdx
leaq 0xa176(%rip), %rsi      # 0x360ef
leaq -0x70(%rbp), %rdi
callq 0x3440
jmp 0x2bf84
leaq -0x71(%rbp), %rdi
callq 0x3370
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
leaq -0xc(%rbp), %rsi
callq 0x27780
movb %al, -0x1d9(%rbp)
jmp 0x2bfa6
movb -0x1d9(%rbp), %al
testb $0x1, %al
jne 0x2bfb2
jmp 0x2bffa
cmpl $0x0, -0xc(%rbp)
jne 0x2bffa
leaq 0xa427(%rip), %rsi      # 0x363e6
leaq -0x70(%rbp), %rdi
callq 0x3430
jmp 0x2bfca
jmp 0x2c090
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x71(%rbp), %rdi
callq 0x3370
jmp 0x2ce8d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x2ce84
leaq -0x99(%rbp), %rdi
movq %rdi, -0x1e8(%rbp)
callq 0x3570
movq -0x1e8(%rbp), %rdx
leaq 0xa0d4(%rip), %rsi      # 0x360ef
leaq -0x98(%rbp), %rdi
callq 0x3440
jmp 0x2c029
movq -0x8(%rbp), %rsi
addq $0x8, %rsi
leaq -0x98(%rbp), %rdi
callq 0x2cf90
jmp 0x2c03f
leaq -0x98(%rbp), %rdi
callq 0x35e8
leaq -0x99(%rbp), %rdi
callq 0x3370
jmp 0x2c090
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x2c07f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x35e8
leaq -0x99(%rbp), %rdi
callq 0x3370
jmp 0x2ce84
leaq -0xc1(%rbp), %rdi
movq %rdi, -0x1f0(%rbp)
callq 0x3570
movq -0x1f0(%rbp), %rdx
leaq 0xa042(%rip), %rsi      # 0x360f3
leaq -0xc0(%rbp), %rdi
callq 0x3440
jmp 0x2c0bf
leaq -0xc1(%rbp), %rdi
callq 0x3370
movq -0x8(%rbp), %rdi
addq $0x48, %rdi
leaq -0x10(%rbp), %rsi
callq 0x27780
movb %al, -0x1f1(%rbp)
jmp 0x2c0e4
movb -0x1f1(%rbp), %al
testb $0x1, %al
jne 0x2c0f0
jmp 0x2c13e
cmpl $0x0, -0x10(%rbp)
jne 0x2c13e
leaq 0xa2e9(%rip), %rsi      # 0x363e6
leaq -0xc0(%rbp), %rdi
callq 0x3430
jmp 0x2c10b
jmp 0x2c1d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xc1(%rbp), %rdi
callq 0x3370
jmp 0x2ce84
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x2ce78
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x200(%rbp)
callq 0x3570
movq -0x200(%rbp), %rdx
leaq 0x9f94(%rip), %rsi      # 0x360f3
leaq -0xe8(%rbp), %rdi
callq 0x3440
jmp 0x2c16d
movq -0x8(%rbp), %rsi
addq $0x48, %rsi
leaq -0xe8(%rbp), %rdi
callq 0x2cf90
jmp 0x2c183
leaq -0xe8(%rbp), %rdi
callq 0x35e8
leaq -0xe9(%rbp), %rdi
callq 0x3370
jmp 0x2c1d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x2c1c3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x35e8
leaq -0xe9(%rbp), %rdi
callq 0x3370
jmp 0x2ce78
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x8e8f(%rip), %rsi      # 0x35072
callq 0x2d280
testb $0x1, %al
jne 0x2c209
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x8e7b(%rip), %rsi      # 0x35076
callq 0x2d280
testb $0x1, %al
jne 0x2c209
jmp 0x2c3e9
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x8e5a(%rip), %rsi      # 0x35072
callq 0x2d280
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x204(%rbp)
leaq 0x1e5a9(%rip), %rdi     # 0x4a7d8
callq 0x22e40
movq %rax, %rcx
movl -0x204(%rbp), %eax
cmpl $0x15, (%rcx)
sete %cl
andb $0x1, %cl
movzbl %cl, %ecx
xorl %ecx, %eax
cmpl $0x0, %eax
je 0x2c260
leaq 0xa125(%rip), %rax      # 0x3637c
movq %rax, -0x210(%rbp)
jmp 0x2c270
leaq 0xa126(%rip), %rax      # 0x3638d
movq %rax, -0x210(%rbp)
jmp 0x2c270
movq -0x210(%rbp), %rax
movq %rax, -0x220(%rbp)
leaq -0x111(%rbp), %rdi
movq %rdi, -0x218(%rbp)
callq 0x3570
movq -0x220(%rbp), %rsi
movq -0x218(%rbp), %rdx
leaq -0x110(%rbp), %rdi
callq 0x3440
jmp 0x2c2ad
leaq -0x111(%rbp), %rdi
callq 0x3370
leaq 0x1e380(%rip), %rdi     # 0x4a640
leaq -0x110(%rbp), %rsi
callq 0x32c0
movq %rax, -0x228(%rbp)
jmp 0x2c2d5
movq -0x228(%rbp), %rdi
leaq 0x9d11(%rip), %rsi      # 0x35ff4
callq 0x3300
movq %rax, -0x230(%rbp)
jmp 0x2c2f1
movq -0x230(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x32c0
movq %rax, -0x238(%rbp)
jmp 0x2c30a
movq -0x238(%rbp), %rdi
leaq 0x9f7e(%rip), %rsi      # 0x36296
callq 0x3300
movq %rax, -0x240(%rbp)
jmp 0x2c326
movq -0x240(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x32c0
movq %rax, -0x248(%rbp)
jmp 0x2c342
movq -0x248(%rbp), %rdi
leaq 0x9f46(%rip), %rsi      # 0x36296
callq 0x3300
movq %rax, -0x250(%rbp)
jmp 0x2c35e
leaq 0x1e473(%rip), %rdi     # 0x4a7d8
callq 0x22e40
movq -0x250(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0x32c0
movq %rax, -0x258(%rbp)
jmp 0x2c386
movq -0x258(%rbp), %rdi
callq 0x29270
jmp 0x2c394
movl $0x1, -0x118(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x35e8
jmp 0x2ce42
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x111(%rbp), %rdi
callq 0x3370
jmp 0x2ce78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x35e8
jmp 0x2ce78
leaq -0x70(%rbp), %rdi
leaq 0x9ff2(%rip), %rsi      # 0x363e6
callq 0x2d280
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x259(%rbp)
jne 0x2c40a
jmp 0x2c423
leaq -0xc0(%rbp), %rdi
leaq 0x9fce(%rip), %rsi      # 0x363e6
callq 0x2d280
movb %al, -0x259(%rbp)
movb -0x259(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x2c431
jmp 0x2c433
jmp 0x2c452
leaq 0x9fb2(%rip), %rdi      # 0x363ec
leaq 0x9b4f(%rip), %rsi      # 0x35f90
movl $0x23c, %edx            # imm = 0x23C
leaq 0x9ed2(%rip), %rcx      # 0x3631f
callq 0x3230
leaq -0xc0(%rbp), %rdi
leaq 0x9f86(%rip), %rsi      # 0x363e6
callq 0x2d280
testb $0x1, %al
jne 0x2c46e
jmp 0x2c77c
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x8bfd(%rip), %rsi      # 0x3507a
callq 0x2d280
testb $0x1, %al
jne 0x2c488
jmp 0x2c4cc
leaq 0x1e349(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2c4a9
leaq 0x9f7a(%rip), %rax      # 0x3641a
movq %rax, -0x268(%rbp)
jmp 0x2c4b9
leaq 0x9f6f(%rip), %rax      # 0x3641f
movq %rax, -0x268(%rbp)
jmp 0x2c4b9
movq -0x268(%rbp), %rax
movq %rax, -0x270(%rbp)
jmp 0x2c61a
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x8ba3(%rip), %rsi      # 0x3507e
callq 0x2d280
testb $0x1, %al
jne 0x2c4e6
jmp 0x2c52a
leaq 0x1e2eb(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2c507
leaq 0x9f26(%rip), %rax      # 0x36424
movq %rax, -0x278(%rbp)
jmp 0x2c517
leaq 0x9f1b(%rip), %rax      # 0x36429
movq %rax, -0x278(%rbp)
jmp 0x2c517
movq -0x278(%rbp), %rax
movq %rax, -0x280(%rbp)
jmp 0x2c60c
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x8b49(%rip), %rsi      # 0x35082
callq 0x2d280
testb $0x1, %al
jne 0x2c544
jmp 0x2c585
leaq 0x1e28d(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2c565
leaq 0x9ecd(%rip), %rax      # 0x36429
movq %rax, -0x288(%rbp)
jmp 0x2c575
leaq 0x9eb8(%rip), %rax      # 0x36424
movq %rax, -0x288(%rbp)
jmp 0x2c575
movq -0x288(%rbp), %rax
movq %rax, -0x290(%rbp)
jmp 0x2c5fe
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x8af2(%rip), %rsi      # 0x35086
callq 0x2d280
testb $0x1, %al
jne 0x2c59f
jmp 0x2c5e0
leaq 0x1e232(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2c5c0
leaq 0x9e68(%rip), %rax      # 0x3641f
movq %rax, -0x298(%rbp)
jmp 0x2c5d0
leaq 0x9e53(%rip), %rax      # 0x3641a
movq %rax, -0x298(%rbp)
jmp 0x2c5d0
movq -0x298(%rbp), %rax
movq %rax, -0x2a0(%rbp)
jmp 0x2c5f0
leaq 0x9a0e(%rip), %rax      # 0x35ff5
movq %rax, -0x2a0(%rbp)
jmp 0x2c5f0
movq -0x2a0(%rbp), %rax
movq %rax, -0x290(%rbp)
movq -0x290(%rbp), %rax
movq %rax, -0x280(%rbp)
movq -0x280(%rbp), %rax
movq %rax, -0x270(%rbp)
movq -0x270(%rbp), %rax
movq %rax, -0x2b0(%rbp)
leaq -0x139(%rbp), %rdi
movq %rdi, -0x2a8(%rbp)
callq 0x3570
movq -0x2b0(%rbp), %rsi
movq -0x2a8(%rbp), %rdx
leaq -0x138(%rbp), %rdi
callq 0x3440
jmp 0x2c657
leaq -0x139(%rbp), %rdi
callq 0x3370
leaq -0x138(%rbp), %rdi
leaq 0x9984(%rip), %rsi      # 0x35ff5
callq 0x2d2b0
testb $0x1, %al
jne 0x2c67c
jmp 0x2c67e
jmp 0x2c6ba
leaq 0x9da9(%rip), %rdi      # 0x3642e
leaq 0x9904(%rip), %rsi      # 0x35f90
movl $0x246, %edx            # imm = 0x246
leaq 0x9c87(%rip), %rcx      # 0x3631f
callq 0x3230
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x139(%rbp), %rdi
callq 0x3370
jmp 0x2ce78
leaq 0x1df7f(%rip), %rdi     # 0x4a640
leaq -0x138(%rbp), %rsi
callq 0x32c0
movq %rax, -0x2b8(%rbp)
jmp 0x2c6d6
movq -0x2b8(%rbp), %rdi
leaq 0x9910(%rip), %rsi      # 0x35ff4
callq 0x3300
movq %rax, -0x2c0(%rbp)
jmp 0x2c6f2
movq -0x2c0(%rbp), %rdi
leaq 0x9d37(%rip), %rsi      # 0x36437
callq 0x3300
movq %rax, -0x2c8(%rbp)
jmp 0x2c70e
leaq 0x1e0c3(%rip), %rdi     # 0x4a7d8
callq 0x22e40
movq -0x2c8(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0x32c0
movq %rax, -0x2d0(%rbp)
jmp 0x2c736
movq -0x2d0(%rbp), %rdi
callq 0x29270
jmp 0x2c744
movl $0x1, -0x118(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x35e8
jmp 0x2ce42
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x35e8
jmp 0x2ce78
leaq -0x70(%rbp), %rdi
leaq 0x9c5f(%rip), %rsi      # 0x363e6
callq 0x2d280
testb $0x1, %al
jne 0x2c795
jmp 0x2caa3
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x88d6(%rip), %rsi      # 0x3507a
callq 0x2d280
testb $0x1, %al
jne 0x2c7af
jmp 0x2c7f3
leaq 0x1e022(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2c7d0
leaq 0x9c58(%rip), %rax      # 0x3641f
movq %rax, -0x2d8(%rbp)
jmp 0x2c7e0
leaq 0x9c43(%rip), %rax      # 0x3641a
movq %rax, -0x2d8(%rbp)
jmp 0x2c7e0
movq -0x2d8(%rbp), %rax
movq %rax, -0x2e0(%rbp)
jmp 0x2c941
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x887c(%rip), %rsi      # 0x3507e
callq 0x2d280
testb $0x1, %al
jne 0x2c80d
jmp 0x2c851
leaq 0x1dfc4(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2c82e
leaq 0x9c04(%rip), %rax      # 0x36429
movq %rax, -0x2e8(%rbp)
jmp 0x2c83e
leaq 0x9bef(%rip), %rax      # 0x36424
movq %rax, -0x2e8(%rbp)
jmp 0x2c83e
movq -0x2e8(%rbp), %rax
movq %rax, -0x2f0(%rbp)
jmp 0x2c933
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x8822(%rip), %rsi      # 0x35082
callq 0x2d280
testb $0x1, %al
jne 0x2c86b
jmp 0x2c8ac
leaq 0x1df66(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2c88c
leaq 0x9ba1(%rip), %rax      # 0x36424
movq %rax, -0x2f8(%rbp)
jmp 0x2c89c
leaq 0x9b96(%rip), %rax      # 0x36429
movq %rax, -0x2f8(%rbp)
jmp 0x2c89c
movq -0x2f8(%rbp), %rax
movq %rax, -0x300(%rbp)
jmp 0x2c925
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x87cb(%rip), %rsi      # 0x35086
callq 0x2d280
testb $0x1, %al
jne 0x2c8c6
jmp 0x2c907
leaq 0x1df0b(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2c8e7
leaq 0x9b3c(%rip), %rax      # 0x3641a
movq %rax, -0x308(%rbp)
jmp 0x2c8f7
leaq 0x9b31(%rip), %rax      # 0x3641f
movq %rax, -0x308(%rbp)
jmp 0x2c8f7
movq -0x308(%rbp), %rax
movq %rax, -0x310(%rbp)
jmp 0x2c917
leaq 0x96e7(%rip), %rax      # 0x35ff5
movq %rax, -0x310(%rbp)
jmp 0x2c917
movq -0x310(%rbp), %rax
movq %rax, -0x300(%rbp)
movq -0x300(%rbp), %rax
movq %rax, -0x2f0(%rbp)
movq -0x2f0(%rbp), %rax
movq %rax, -0x2e0(%rbp)
movq -0x2e0(%rbp), %rax
movq %rax, -0x320(%rbp)
leaq -0x161(%rbp), %rdi
movq %rdi, -0x318(%rbp)
callq 0x3570
movq -0x320(%rbp), %rsi
movq -0x318(%rbp), %rdx
leaq -0x160(%rbp), %rdi
callq 0x3440
jmp 0x2c97e
leaq -0x161(%rbp), %rdi
callq 0x3370
leaq -0x160(%rbp), %rdi
leaq 0x965d(%rip), %rsi      # 0x35ff5
callq 0x2d2b0
testb $0x1, %al
jne 0x2c9a3
jmp 0x2c9a5
jmp 0x2c9e1
leaq 0x9a82(%rip), %rdi      # 0x3642e
leaq 0x95dd(%rip), %rsi      # 0x35f90
movl $0x253, %edx            # imm = 0x253
leaq 0x9960(%rip), %rcx      # 0x3631f
callq 0x3230
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x161(%rbp), %rdi
callq 0x3370
jmp 0x2ce78
leaq 0x1dc58(%rip), %rdi     # 0x4a640
leaq -0x160(%rbp), %rsi
callq 0x32c0
movq %rax, -0x328(%rbp)
jmp 0x2c9fd
movq -0x328(%rbp), %rdi
leaq 0x95e9(%rip), %rsi      # 0x35ff4
callq 0x3300
movq %rax, -0x330(%rbp)
jmp 0x2ca19
movq -0x330(%rbp), %rdi
leaq 0x9a16(%rip), %rsi      # 0x3643d
callq 0x3300
movq %rax, -0x338(%rbp)
jmp 0x2ca35
leaq 0x1dd9c(%rip), %rdi     # 0x4a7d8
callq 0x22e40
movq -0x338(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0x32c0
movq %rax, -0x340(%rbp)
jmp 0x2ca5d
movq -0x340(%rbp), %rdi
callq 0x29270
jmp 0x2ca6b
movl $0x1, -0x118(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x35e8
jmp 0x2ce42
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x35e8
jmp 0x2ce78
leaq 0x1db96(%rip), %rdi     # 0x4a640
leaq 0x95c2(%rip), %rsi      # 0x36073
callq 0x3300
movq %rax, -0x348(%rbp)
jmp 0x2cabf
movq -0x348(%rbp), %rdi
leaq 0x9527(%rip), %rsi      # 0x35ff4
callq 0x3300
movq %rax, -0x350(%rbp)
jmp 0x2cadb
movq -0x350(%rbp), %rdi
leaq 0x9527(%rip), %rsi      # 0x36010
callq 0x3300
movq %rax, -0x358(%rbp)
jmp 0x2caf7
movq -0x358(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x32c0
movq %rax, -0x360(%rbp)
jmp 0x2cb10
movq -0x360(%rbp), %rdi
leaq 0x9778(%rip), %rsi      # 0x36296
callq 0x3300
movq %rax, -0x368(%rbp)
jmp 0x2cb2c
movq -0x368(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x32c0
movq %rax, -0x370(%rbp)
jmp 0x2cb48
movq -0x370(%rbp), %rdi
callq 0x29270
jmp 0x2cb56
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x8515(%rip), %rsi      # 0x3507a
callq 0x2d280
testb $0x1, %al
jne 0x2cb70
jmp 0x2cbb4
leaq 0x1dc61(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2cb91
leaq 0x9892(%rip), %rax      # 0x3641a
movq %rax, -0x378(%rbp)
jmp 0x2cba1
leaq 0x9887(%rip), %rax      # 0x3641f
movq %rax, -0x378(%rbp)
jmp 0x2cba1
movq -0x378(%rbp), %rax
movq %rax, -0x380(%rbp)
jmp 0x2cd02
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x84bb(%rip), %rsi      # 0x3507e
callq 0x2d280
testb $0x1, %al
jne 0x2cbce
jmp 0x2cc12
leaq 0x1dc03(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2cbef
leaq 0x983e(%rip), %rax      # 0x36424
movq %rax, -0x388(%rbp)
jmp 0x2cbff
leaq 0x9833(%rip), %rax      # 0x36429
movq %rax, -0x388(%rbp)
jmp 0x2cbff
movq -0x388(%rbp), %rax
movq %rax, -0x390(%rbp)
jmp 0x2ccf4
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x8461(%rip), %rsi      # 0x35082
callq 0x2d280
testb $0x1, %al
jne 0x2cc2c
jmp 0x2cc6d
leaq 0x1dba5(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2cc4d
leaq 0x97e5(%rip), %rax      # 0x36429
movq %rax, -0x398(%rbp)
jmp 0x2cc5d
leaq 0x97d0(%rip), %rax      # 0x36424
movq %rax, -0x398(%rbp)
jmp 0x2cc5d
movq -0x398(%rbp), %rax
movq %rax, -0x3a0(%rbp)
jmp 0x2cce6
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
leaq 0x840a(%rip), %rsi      # 0x35086
callq 0x2d280
testb $0x1, %al
jne 0x2cc87
jmp 0x2ccc8
leaq 0x1db4a(%rip), %rdi     # 0x4a7d8
callq 0x22e40
cmpl $0x15, (%rax)
jne 0x2cca8
leaq 0x9780(%rip), %rax      # 0x3641f
movq %rax, -0x3a8(%rbp)
jmp 0x2ccb8
leaq 0x976b(%rip), %rax      # 0x3641a
movq %rax, -0x3a8(%rbp)
jmp 0x2ccb8
movq -0x3a8(%rbp), %rax
movq %rax, -0x3b0(%rbp)
jmp 0x2ccd8
leaq 0x9326(%rip), %rax      # 0x35ff5
movq %rax, -0x3b0(%rbp)
jmp 0x2ccd8
movq -0x3b0(%rbp), %rax
movq %rax, -0x3a0(%rbp)
movq -0x3a0(%rbp), %rax
movq %rax, -0x390(%rbp)
movq -0x390(%rbp), %rax
movq %rax, -0x380(%rbp)
movq -0x380(%rbp), %rax
movq %rax, -0x3c0(%rbp)
leaq -0x189(%rbp), %rdi
movq %rdi, -0x3b8(%rbp)
callq 0x3570
movq -0x3c0(%rbp), %rsi
movq -0x3b8(%rbp), %rdx
leaq -0x188(%rbp), %rdi
callq 0x3440
jmp 0x2cd3f
leaq -0x189(%rbp), %rdi
callq 0x3370
leaq -0x188(%rbp), %rdi
leaq 0x929c(%rip), %rsi      # 0x35ff5
callq 0x2d2b0
testb $0x1, %al
jne 0x2cd64
jmp 0x2cd66
jmp 0x2cda2
leaq 0x96c1(%rip), %rdi      # 0x3642e
leaq 0x921c(%rip), %rsi      # 0x35f90
movl $0x25f, %edx            # imm = 0x25F
leaq 0x959f(%rip), %rcx      # 0x3631f
callq 0x3230
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x189(%rbp), %rdi
callq 0x3370
jmp 0x2ce78
leaq 0x1d897(%rip), %rdi     # 0x4a640
leaq -0x188(%rbp), %rsi
callq 0x32c0
movq %rax, -0x3c8(%rbp)
jmp 0x2cdbe
movq -0x3c8(%rbp), %rdi
leaq 0x9228(%rip), %rsi      # 0x35ff4
callq 0x3300
movq %rax, -0x3d0(%rbp)
jmp 0x2cdda
movq -0x3d0(%rbp), %rdi
leaq 0x9228(%rip), %rsi      # 0x36010
callq 0x3300
movq %rax, -0x3d8(%rbp)
jmp 0x2cdf6
leaq 0x1d9db(%rip), %rdi     # 0x4a7d8
callq 0x22e40
movq -0x3d8(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0x32c0
movq %rax, -0x3e0(%rbp)
jmp 0x2ce1e
movq -0x3e0(%rbp), %rdi
callq 0x29270
jmp 0x2ce2c
leaq -0x188(%rbp), %rdi
callq 0x35e8
movl $0x0, -0x118(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x35e8
leaq -0x70(%rbp), %rdi
callq 0x35e8
addq $0x3e0, %rsp            # imm = 0x3E0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x35e8
leaq -0xc0(%rbp), %rdi
callq 0x35e8
leaq -0x70(%rbp), %rdi
callq 0x35e8
movq -0x48(%rbp), %rdi
callq 0x3560
nopw %cs:(%rax,%rax)