// File: /workspace/github_cpp_makefile_star2_O2/CastellanZhang[P]lambdaFM/lambdafm_predict.cpp
// Function: main
int main(int argc, char* argv[])
{
    cin.sync_with_stdio(false);
    cout.sync_with_stdio(false);
    Option opt;
    try
    {
        opt = parse_option(argv_to_args(argc, argv));
    }
    catch(const invalid_argument& e)
    {
        cout << e.what() << endl;
        cout << predict_help() << endl;
        return EXIT_FAILURE;
    }


    ifstream f_model(opt.model_path.c_str());
    ofstream f_predict(opt.predict_path.c_str(), ofstream::out);

    ftrl_predictor predictor(opt.dim, f_model, f_predict);

    pc_frame frame;
    frame.init(predictor, opt.threads_num);
    frame.run();

    f_model.close();
    f_predict.close();
    return 0;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x580, %rsp            # imm = 0x580
movq %rsi, %rbx
movl %edi, %ebp
xorl %r14d, %r14d
xorl %edi, %edi
callq 0x30e0
xorl %edi, %edi
callq 0x30e0
leaq 0x18(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %r14b, (%rax)
leaq 0x38(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %r14b, (%rax)
movabsq $0x800000001, %rcx      # imm = 0x800000001
movq %rcx, 0x10(%rax)
leaq 0x380(%rsp), %rdi
movl %ebp, %esi
movq %rbx, %rdx
callq 0x3f27
leaq 0x178(%rsp), %rdi
leaq 0x380(%rsp), %rsi
callq 0x3fb6
leaq 0x8(%rsp), %rbx
leaq 0x178(%rsp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x49b2
movq %r14, %rdi
callq 0x499c
leaq 0x380(%rsp), %rdi
callq 0x480e
movq (%rbx), %rsi
leaq 0x178(%rsp), %rdi
pushq $0x8
popq %rdx
callq 0x3410
movq 0x28(%rsp), %rsi
leaq 0x380(%rsp), %rdi
pushq $0x10
popq %rdx
callq 0x3290
cvtsi2sdl 0x4c(%rsp), %xmm0
leaq 0x50(%rsp), %rdi
leaq 0x178(%rsp), %rsi
leaq 0x380(%rsp), %rdx
callq 0x3bd0
leaq 0x90(%rsp), %rdi
callq 0x49ec
movl 0x48(%rsp), %edx
leaq 0x90(%rsp), %rdi
leaq 0x50(%rsp), %rsi
movl $0x1388, %ecx           # imm = 0x1388
movl $0x30d40, %r8d          # imm = 0x30D40
callq 0x5c40
leaq 0x90(%rsp), %rdi
callq 0x60a4
leaq 0x178(%rsp), %rdi
callq 0x3060
leaq 0x380(%rsp), %rdi
callq 0x3300
leaq 0x90(%rsp), %rdi
callq 0x4a1e
leaq 0x380(%rsp), %rdi
callq 0x3340
leaq 0x178(%rsp), %rdi
callq 0x3070
xorl %ebx, %ebx
leaq 0x8(%rsp), %rdi
callq 0x499c
movl %ebx, %eax
addq $0x580, %rsp            # imm = 0x580
popq %rbx
popq %r14
popq %rbp
retq
jmp 0x438d
movq %rax, %rbx
jmp 0x4470
movq %rax, %rbx
jmp 0x447d
movq %rax, %rbx
jmp 0x448a
movq %rdx, %r14
movq %rax, %rbx
leaq 0x380(%rsp), %rdi
callq 0x480e
jmp 0x43c0
movq %rdx, %r14
movq %rax, %rbx
cmpl $0x1, %r14d
jne 0x448a
movq %rbx, %rdi
callq 0x30d0
movq (%rax), %rcx
movq %rax, %rdi
callq *0x10(%rcx)
movq 0x8bd6(%rip), %rdi      # 0xcfb8
movq %rax, %rsi
callq 0x3260
movq %rax, %rdi
callq 0x3110
leaq 0x178(%rsp), %rdi
callq 0x3f05
movq 0x8bb2(%rip), %rdi      # 0xcfb8
leaq 0x178(%rsp), %rsi
callq 0x3220
movq %rax, %rdi
callq 0x3110
leaq 0x178(%rsp), %rdi
callq 0x3458
callq 0x33a0
pushq $0x1
popq %rbx
jmp 0x4373
jmp 0x439d
jmp 0x444e
movq %rax, %rbx
leaq 0x178(%rsp), %rdi
callq 0x3458
jmp 0x4451
movq %rax, %rbx
callq 0x33a0
jmp 0x448a
movq %rax, %rdi
callq 0x49e1
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x4a1e
leaq 0x380(%rsp), %rdi
callq 0x3340
leaq 0x178(%rsp), %rdi
callq 0x3070
leaq 0x8(%rsp), %rdi
callq 0x499c
movq %rbx, %rdi
callq 0x33f0