// File: yuang-chen[P]paraGCN/src/main.cpp
// Function: main
int main(int argc, char **argv) {
    setbuf(stdout, NULL);

    if(argc < 2) {
        cout << "gcn-* graph_dataset" << endl;
        return EXIT_FAILURE;
    }

    GCNParams params = GCNParams::get_default();
    GCNData data;
    string input_name(argv[1]);
    Parser parser(&params, &data, input_name);
    if(!parser.parse()) {
        cerr << "cannot read input: " << input_name << endl;
        exit(EXIT_FAILURE);
    }

    GCN gcn(params, &data);
    gcn.run();
    return EXIT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x8a0, %rsp            # imm = 0x8A0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq 0x9238(%rip), %rax      # 0x17fa8
movq (%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3350
cmpl $0x2, -0x8(%rbp)
jge 0xedb0
movq 0x923f(%rip), %rdi      # 0x17fc8
leaq 0x14f0(%rip), %rsi      # 0x10280
callq 0x3250
movq %rax, %rdi
movq 0x9219(%rip), %rsi      # 0x17fb8
callq 0x3280
movl $0x1, -0x4(%rbp)
jmp 0xf01f
leaq -0x34(%rbp), %rdi
callq 0x3770
leaq -0xe0(%rbp), %rdi
callq 0xf040
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x860(%rbp)
leaq -0x101(%rbp), %rdi
movq %rdi, -0x858(%rbp)
callq 0x3430
movq -0x860(%rbp), %rsi
movq -0x858(%rbp), %rdx
leaq -0x100(%rbp), %rdi
callq 0xf0a0
jmp 0xee03
leaq -0x101(%rbp), %rdi
callq 0x32a0
leaq -0x760(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x3120
jmp 0xee24
leaq -0x740(%rbp), %rdi
leaq -0x34(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
leaq -0x760(%rbp), %rcx
callq 0x9b40
jmp 0xee44
leaq -0x760(%rbp), %rdi
callq 0x31a0
leaq -0x740(%rbp), %rdi
callq 0xa4a0
movb %al, -0x861(%rbp)
jmp 0xee64
movb -0x861(%rbp), %al
testb $0x1, %al
jne 0xef3f
jmp 0xee74
movq 0x9175(%rip), %rdi      # 0x17ff0
leaq 0x1412(%rip), %rsi      # 0x10294
callq 0x3250
movq %rax, -0x870(%rbp)
jmp 0xee90
movq -0x870(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x3240
movq %rax, -0x878(%rbp)
jmp 0xeeac
movq -0x878(%rbp), %rdi
movq 0x90fe(%rip), %rsi      # 0x17fb8
callq 0x3280
jmp 0xeec1
movl $0x1, %edi
callq 0x32e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x101(%rbp), %rdi
callq 0x32a0
jmp 0xf011
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0xf005
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x760(%rbp), %rdi
callq 0x31a0
jmp 0xf005
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
jmp 0xeff9
movl -0x14(%rbp), %eax
movl %eax, -0x830(%rbp)
movups -0x34(%rbp), %xmm0
movups -0x24(%rbp), %xmm1
movaps %xmm1, -0x840(%rbp)
movaps %xmm0, -0x850(%rbp)
movl -0x830(%rbp), %ecx
movq %rsp, %rax
movl %ecx, 0x20(%rax)
movaps -0x850(%rbp), %xmm0
movaps -0x840(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x820(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x37d0
jmp 0xef94
leaq -0x820(%rbp), %rdi
callq 0x4800
jmp 0xefa2
movl $0x0, -0x4(%rbp)
leaq -0x820(%rbp), %rdi
callq 0x4200
leaq -0x740(%rbp), %rdi
callq 0xf150
leaq -0x100(%rbp), %rdi
callq 0x31a0
leaq -0xe0(%rbp), %rdi
callq 0xf190
jmp 0xf01f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x110(%rbp)
movl %eax, -0x114(%rbp)
leaq -0x820(%rbp), %rdi
callq 0x4200
leaq -0x740(%rbp), %rdi
callq 0xf150
leaq -0x100(%rbp), %rdi
callq 0x31a0
leaq -0xe0(%rbp), %rdi
callq 0xf190
jmp 0xf02b
movl -0x4(%rbp), %eax
addq $0x8a0, %rsp            # imm = 0x8A0
popq %rbp
retq
movq -0x110(%rbp), %rdi
callq 0x3420
nopw (%rax,%rax)