// File: /workspace/github_cpp_makefile_star2_O1/adamiaonr[P]rid-analytics/src/run-analysis.cpp
// Function: create_argv_parser()
ArgvParser * create_argv_parser() {

    ArgvParser * cmds = new ArgvParser();

    cmds->setIntroductoryDescription("\n\nrid-analytics v2.0\n\na tool to \
analyze the behavior of Bloom-filter based forwarding networks. it computes the \
probability of different delivery states for all possible request paths in a \
network topology passed as input.\nby adamiaonr@cmu.edu");

    cmds->setHelpOption("h", "help", "help page.");

    cmds->defineOption(
            OPTION_SCN_FILE,
            "path to .scn file with scenario info for analysis",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_DATA_DIR,
            "path to directory on which to save .csv files w/ results",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_OUTPUT_LABEL,
            "label to add to output .tsv files (will be created in <data-dir>)",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_BF_SIZE,
            "size of Bloom filter (in bits)",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_REQUEST_SIZE,
            "size of request, in # of URL components",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_MM_MODE,
            "multiple match resolution mode. 0 for 'flood' (aka 'AML'), 1 for 'random' (RML), 2/3 for 'hard/soft fallback'. default is 'flood'.",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_RESOLV_MODE,
            "enable/disable incorrect delivery resolution. 0 for 'off', 1 for 'on'. default is 'off'.",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_ORIGIN_SERVER,
            "id of origin server. default is '1'.",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_START_ROUTER,
            "id of starting router. default is '0'.",
            ArgvParser::OptionRequiresValue);

    // cmds->defineOption(
    //         OPTION_VERBOSE,
    //         "print stats during the model run. default: not verbose",
    //         ArgvParser::NoOptionAttribute);
    // cmds->defineOptionAlternative(OPTION_VERBOSE, "v");

    return cmds;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x60, %rsp
movl $0x158, %edi            # imm = 0x158
callq 0x4390
movq %rax, %rbx
movq %rax, %rdi
callq 0x1f610
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1806a(%rip), %rsi     # 0x311a0
leaq 0x18156(%rip), %rdx     # 0x31293
movq %rsp, %rdi
callq 0x19074
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x21a20
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x19166
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x14bc2(%rip), %rsi     # 0x2dd35
leaq 0x14bbc(%rip), %rdx     # 0x2dd36
callq 0x19074
leaq 0x30(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x18104(%rip), %rsi     # 0x31294
leaq 0x18101(%rip), %rdx     # 0x31298
leaq 0x20(%rsp), %rdi
callq 0x19074
leaq 0x50(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x180e8(%rip), %rsi     # 0x31299
leaq 0x180eb(%rip), %rdx     # 0x312a3
leaq 0x40(%rsp), %rdi
callq 0x19074
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
leaq 0x40(%rsp), %rcx
movq %rbx, %rdi
callq 0x21934
movq 0x40(%rsp), %rdi
cmpq %r13, %rdi
je 0x191ee
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x19205
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x1921b
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x1807c(%rip), %rsi     # 0x312a4
leaq 0x1807d(%rip), %rdx     # 0x312ac
callq 0x19074
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1806a(%rip), %rsi     # 0x312ad
leaq 0x18094(%rip), %rdx     # 0x312de
callq 0x19074
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x21758
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x1927b
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x19291
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x18041(%rip), %rsi     # 0x312df
leaq 0x18042(%rip), %rdx     # 0x312e7
callq 0x19074
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1802f(%rip), %rsi     # 0x312e8
leaq 0x18060(%rip), %rdx     # 0x31320
callq 0x19074
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x21758
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x192f1
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x19307
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x1800d(%rip), %rsi     # 0x31321
leaq 0x18012(%rip), %rdx     # 0x3132d
callq 0x19074
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x17fff(%rip), %rsi     # 0x3132e
leaq 0x18039(%rip), %rdx     # 0x3136f
callq 0x19074
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x21758
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x19367
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x1937d
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x17fe6(%rip), %rsi     # 0x31370
leaq 0x17fe6(%rip), %rdx     # 0x31377
callq 0x19074
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x17fd3(%rip), %rsi     # 0x31378
leaq 0x17fea(%rip), %rdx     # 0x31396
callq 0x19074
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x21758
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x193dd
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x193f3
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x17f97(%rip), %rsi     # 0x31397
leaq 0x17f9c(%rip), %rdx     # 0x313a3
callq 0x19074
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x17f89(%rip), %rsi     # 0x313a4
leaq 0x17fa9(%rip), %rdx     # 0x313cb
callq 0x19074
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x21758
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x19453
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x19469
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x17f56(%rip), %rsi     # 0x313cc
leaq 0x17f56(%rip), %rdx     # 0x313d3
callq 0x19074
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x17f43(%rip), %rsi     # 0x313d4
leaq 0x17fbe(%rip), %rdx     # 0x31456
callq 0x19074
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x21758
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x194c9
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x194df
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x17f6b(%rip), %rsi     # 0x31457
leaq 0x17f73(%rip), %rdx     # 0x31466
callq 0x19074
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x17f60(%rip), %rsi     # 0x31467
leaq 0x17fb1(%rip), %rdx     # 0x314bf
callq 0x19074
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x21758
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x1953f
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x19555
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x17f5e(%rip), %rsi     # 0x314c0
leaq 0x17f64(%rip), %rdx     # 0x314cd
callq 0x19074
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x17f51(%rip), %rsi     # 0x314ce
leaq 0x17f6e(%rip), %rdx     # 0x314f2
callq 0x19074
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x21758
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x195b5
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x195cb
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x17f1b(%rip), %rsi     # 0x314f3
leaq 0x17f20(%rip), %rdx     # 0x314ff
callq 0x19074
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x17f0d(%rip), %rsi     # 0x31500
leaq 0x17f2c(%rip), %rdx     # 0x31526
callq 0x19074
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x21758
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x1962b
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x19641
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rbx, %rax
addq $0x60, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
jmp 0x196aa
jmp 0x196ca
jmp 0x196e5
jmp 0x196aa
jmp 0x196ca
jmp 0x196e5
jmp 0x196aa
jmp 0x196ca
jmp 0x196e5
jmp 0x196aa
jmp 0x196ca
jmp 0x196e5
jmp 0x196aa
jmp 0x196ca
jmp 0x196e5
jmp 0x196aa
jmp 0x196ca
jmp 0x196e5
jmp 0x196aa
jmp 0x196ca
jmp 0x196e5
jmp 0x196aa
jmp 0x196ca
jmp 0x196e5
jmp 0x196aa
jmp 0x196ca
jmp 0x196e5
movq %rax, %r14
movq 0x40(%rsp), %rdi
cmpq %r13, %rdi
je 0x196ad
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x196ad
movq %rax, %r14
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x196cd
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x196cd
jmp 0x196ca
jmp 0x196e5
movq %rax, %r14
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x196e8
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x196e8
movq %rax, %r14
movq %r14, %rdi
callq 0x4700
movq %rax, %r14
movl $0x158, %esi            # imm = 0x158
movq %rbx, %rdi
jmp 0x196de