// File: xzebra[P]function-plotter/main.cpp
// Function: main
int main(int argc, char *argv[]) {
    double size = 10;
    double step = 1;
    bool loop = false;

    for(int i = 0; i < argc; i++) {
        std::string arg = argv[i];
        if(arg == "-size") {
            if(checkError(argc, i)) return 1;
            size = std::stod(argv[++i]);
        } else if(arg == "-step") {
            if(checkError(argc, i)) return 1;
            step = std::stod(argv[++i]);
        } else if(arg == "-l" || arg == "-loop") {
            loop = true;
        }
    }
    
    std::string input;
    std::cout << "y = ";
    std::getline(std::cin, input);
    
    Graph graph(size, step);
    if(!loop) graph.Plot(input);
    else graph.Loop(input);

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x270, %rsp            # imm = 0x270
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movsd 0x5a4f(%rip), %xmm0     # 0x8010
movsd %xmm0, -0x18(%rbp)
movsd 0x5a3a(%rip), %xmm0     # 0x8008
movsd %xmm0, -0x20(%rbp)
movb $0x0, -0x21(%rbp)
movl $0x0, -0x28(%rbp)
movl -0x28(%rbp), %eax
cmpl -0x8(%rbp), %eax
jge 0x2913
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x220(%rbp)
leaq -0x49(%rbp), %rdi
movq %rdi, -0x218(%rbp)
callq 0x2330
movq -0x220(%rbp), %rsi
movq -0x218(%rbp), %rdx
leaq -0x48(%rbp), %rdi
callq 0x2290
jmp 0x2626
leaq -0x49(%rbp), %rdi
callq 0x2200
leaq 0x59ed(%rip), %rsi      # 0x8023
leaq -0x48(%rbp), %rdi
callq 0x2a90
movb %al, -0x221(%rbp)
jmp 0x2647
movb -0x221(%rbp), %al
testb $0x1, %al
jne 0x2656
jmp 0x276c
movl -0x8(%rbp), %edi
movl -0x28(%rbp), %esi
callq 0x2550
movb %al, -0x222(%rbp)
jmp 0x2669
movb -0x222(%rbp), %al
testb $0x1, %al
jne 0x2675
jmp 0x26b3
movl $0x1, -0x4(%rbp)
movl $0x1, -0x60(%rbp)
jmp 0x28de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x49(%rbp), %rdi
callq 0x2200
jmp 0x2a7e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2905
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rcx
movl %ecx, %edx
incl %edx
movl %edx, -0x28(%rbp)
movq 0x8(%rax,%rcx,8), %rax
movq %rax, -0x238(%rbp)
leaq -0x81(%rbp), %rdi
movq %rdi, -0x230(%rbp)
callq 0x2330
movq -0x238(%rbp), %rsi
movq -0x230(%rbp), %rdx
leaq -0x80(%rbp), %rdi
callq 0x2290
jmp 0x26fa
xorl %eax, %eax
movl %eax, %esi
leaq -0x80(%rbp), %rdi
callq 0x2ac0
movsd %xmm0, -0x240(%rbp)
jmp 0x2711
movsd -0x240(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x2130
leaq -0x81(%rbp), %rdi
callq 0x2200
jmp 0x28d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x275b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x2130
leaq -0x81(%rbp), %rdi
callq 0x2200
jmp 0x2905
leaq 0x58b6(%rip), %rsi      # 0x8029
leaq -0x48(%rbp), %rdi
callq 0x2a90
movb %al, -0x241(%rbp)
jmp 0x2784
movb -0x241(%rbp), %al
testb $0x1, %al
jne 0x2793
jmp 0x2887
movl -0x8(%rbp), %edi
movl -0x28(%rbp), %esi
callq 0x2550
movb %al, -0x242(%rbp)
jmp 0x27a6
movb -0x242(%rbp), %al
testb $0x1, %al
jne 0x27b2
jmp 0x27c5
movl $0x1, -0x4(%rbp)
movl $0x1, -0x60(%rbp)
jmp 0x28de
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rcx
movl %ecx, %edx
incl %edx
movl %edx, -0x28(%rbp)
movq 0x8(%rax,%rcx,8), %rax
movq %rax, -0x258(%rbp)
leaq -0xa9(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x2330
movq -0x258(%rbp), %rsi
movq -0x250(%rbp), %rdx
leaq -0xa8(%rbp), %rdi
callq 0x2290
jmp 0x280f
xorl %eax, %eax
movl %eax, %esi
leaq -0xa8(%rbp), %rdi
callq 0x2ac0
movsd %xmm0, -0x260(%rbp)
jmp 0x2829
movsd -0x260(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x2130
leaq -0xa9(%rbp), %rdi
callq 0x2200
jmp 0x28d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2879
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x2130
leaq -0xa9(%rbp), %rdi
callq 0x2200
jmp 0x2905
leaq 0x57a1(%rip), %rsi      # 0x802f
leaq -0x48(%rbp), %rdi
callq 0x2a90
movb %al, -0x261(%rbp)
jmp 0x289f
movb -0x261(%rbp), %al
testb $0x1, %al
jne 0x28cf
jmp 0x28ab
leaq 0x5780(%rip), %rsi      # 0x8032
leaq -0x48(%rbp), %rdi
callq 0x2a90
movb %al, -0x262(%rbp)
jmp 0x28c3
movb -0x262(%rbp), %al
testb $0x1, %al
jne 0x28cf
jmp 0x28d3
movb $0x1, -0x21(%rbp)
jmp 0x28d5
jmp 0x28d7
movl $0x0, -0x60(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x2130
movl -0x60(%rbp), %eax
testl %eax, %eax
je 0x28f5
jmp 0x28f0
jmp 0x2a72
jmp 0x28f7
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
jmp 0x25de
leaq -0x48(%rbp), %rdi
callq 0x2130
jmp 0x2a7e
leaq -0xd0(%rbp), %rdi
callq 0x22a0
movq 0x96aa(%rip), %rdi      # 0xbfd0
leaq 0x570b(%rip), %rsi      # 0x8038
callq 0x21c0
jmp 0x2934
movq 0x96a5(%rip), %rdi      # 0xbfe0
leaq -0xd0(%rbp), %rsi
callq 0x2060
jmp 0x2949
cvttsd2si -0x18(%rbp), %esi
movsd -0x20(%rbp), %xmm0
leaq -0x1d0(%rbp), %rdi
callq 0x3710
jmp 0x2961
testb $0x1, -0x21(%rbp)
jne 0x29de
leaq -0x1f0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x20e0
jmp 0x297c
leaq -0x1d0(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x2d10
jmp 0x2991
leaq -0x1f0(%rbp), %rdi
callq 0x2130
jmp 0x2a30
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2a64
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2a58
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x2130
jmp 0x2a58
leaq -0x210(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x20e0
jmp 0x29f3
leaq -0x1d0(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x3300
jmp 0x2a08
leaq -0x210(%rbp), %rdi
callq 0x2130
jmp 0x2a30
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x210(%rbp), %rdi
callq 0x2130
jmp 0x2a58
movl $0x0, -0x4(%rbp)
movl $0x1, -0x60(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x2b00
leaq -0xd0(%rbp), %rdi
callq 0x2130
jmp 0x2a72
leaq -0x1d0(%rbp), %rdi
callq 0x2b00
leaq -0xd0(%rbp), %rdi
callq 0x2130
jmp 0x2a7e
movl -0x4(%rbp), %eax
addq $0x270, %rsp            # imm = 0x270
popq %rbp
retq
movq -0x58(%rbp), %rdi
callq 0x2320
nopw (%rax,%rax)