// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/toolkit/bamtools_random.cpp
// Function: BamTools::RandomTool::RandomTool()
RandomTool::RandomTool(void) 
    : AbstractTool()
    , m_settings(new RandomSettings)
    , m_impl(0)
{ 
    // set program details
    Options::SetProgramInfo("bamtools random", "grab a random subset of alignments",
                            "[-in <filename> -in <filename> ... | -list <filelist>] [-out <filename>] [-forceCompression] [-n] [-region <REGION>]");
    
    // set up options 
    OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output");
    Options::AddValueOption("-in",     "BAM filename", "the input BAM file",                         "", m_settings->HasInput,          m_settings->InputFiles,     IO_Opts, Options::StandardIn());
    Options::AddValueOption("-list",   "filename",     "the input BAM file list, one line per file", "", m_settings->HasInputFilelist,  m_settings->InputFilelist,  IO_Opts);
    Options::AddValueOption("-out",    "BAM filename", "the output BAM file",                        "", m_settings->HasOutput,         m_settings->OutputFilename, IO_Opts, Options::StandardOut());
    Options::AddValueOption("-region", "REGION",       "only pull random alignments from within this genomic region. Index file is recommended for better performance, and is used automatically if it exists. See \'bamtools help index\' for more details on creating one", "", m_settings->HasRegion, m_settings->Region, IO_Opts);
    Options::AddOption("-forceCompression", "if results are sent to stdout (like when piping to another tool), default behavior is to leave output uncompressed. Use this flag to override and force compression", m_settings->IsForceCompression, IO_Opts);
    
    OptionGroup* SettingsOpts = Options::CreateOptionGroup("Settings");
    Options::AddValueOption("-n", "count", "number of alignments to grab. Note - no duplicate checking is performed", "",
                            m_settings->HasAlignmentCount, m_settings->AlignmentCount, SettingsOpts, RANDOM_MAX_ALIGNMENT_COUNT);
    Options::AddValueOption("-seed", "unsigned integer", "random number generator seed (for repeatable results). Current time is used if no seed value is provided.", "",
                            m_settings->HasRandomNumberSeed, m_settings->RandomNumberSeed, SettingsOpts);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x88, %rsp
movq %rdi, %rbx
leaq 0x4a7c7(%rip), %rax     # 0x8fa40
movq %rax, (%rdi)
movl $0x90, %edi
callq 0x275c0
movq %rax, %r14
movq %rax, %rdi
callq 0x45d32
movq %r14, 0x8(%rbx)
movq $0x0, 0x10(%rbx)
leaq 0x38(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x2eb0f(%rip), %rsi     # 0x73dbd
leaq 0x2eb17(%rip), %rdx     # 0x73dcc
leaq 0x28(%rsp), %rdi
callq 0x2f1b2
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2eafe(%rip), %rsi     # 0x73dcd
leaq 0x2eb19(%rip), %rdx     # 0x73def
leaq 0x8(%rsp), %rdi
callq 0x2f1b2
leaq 0x58(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x2eb00(%rip), %rsi     # 0x73df0
leaq 0x2eb6d(%rip), %rdx     # 0x73e64
leaq 0x48(%rsp), %rdi
callq 0x2f1b2
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x48(%rsp), %rdx
callq 0x646a4
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
je 0x45324
callq 0x27560
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x45333
callq 0x27560
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45342
callq 0x27560
leaq 0x28(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x2d1c0(%rip), %rsi     # 0x72511
leaq 0x2d1c7(%rip), %rdx     # 0x7251f
callq 0x2f1b2
leaq 0x28(%rsp), %rdi
callq 0x63a0c
movq %rax, %r14
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45379
callq 0x27560
leaq 0x28(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x2d198(%rip), %rsi     # 0x72520
leaq 0x2d194(%rip), %rdx     # 0x72523
callq 0x2f1b2
leaq 0x8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x2d181(%rip), %rsi     # 0x72524
leaq 0x2d186(%rip), %rdx     # 0x72530
callq 0x2f1b2
leaq 0x48(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x31400(%rip), %rsi     # 0x767be
leaq 0x3140b(%rip), %rdx     # 0x767d0
callq 0x2f1b2
leaq 0x78(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x32441(%rip), %rdx     # 0x7781b
leaq 0x68(%rsp), %rdi
movq %rdx, %rsi
callq 0x2f1b2
movq 0x8(%rbx), %r15
callq 0x646e2
leaq 0x10(%r15), %r9
incq %r15
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x48(%rsp), %rdx
leaq 0x68(%rsp), %rcx
movq %r15, %r8
pushq %rax
pushq %r14
callq 0x2e4f6
addq $0x10, %rsp
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x45429
callq 0x27560
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
leaq 0x18(%rsp), %r15
je 0x4543d
callq 0x27560
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x4544c
callq 0x27560
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x4545b
callq 0x27560
leaq 0x28(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x2d0dd(%rip), %rsi     # 0x72547
leaq 0x2d0db(%rip), %rdx     # 0x7254c
callq 0x2f1b2
leaq 0x8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x2d181(%rip), %rsi     # 0x72606
leaq 0x2d182(%rip), %rdx     # 0x7260e
callq 0x2f1b2
leaq 0x48(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x2d0ad(%rip), %rsi     # 0x7254d
leaq 0x2d0d0(%rip), %rdx     # 0x72577
callq 0x2f1b2
leaq 0x68(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x32360(%rip), %rdx     # 0x7781b
movq %rdx, %rsi
callq 0x2f1b2
movq 0x8(%rbx), %r9
leaq 0x2(%r9), %r8
addq $0x28, %r9
subq $0x8, %rsp
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x70(%rsp), %rcx
pushq %r14
callq 0x2e8ba
addq $0x10, %rsp
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x45501
callq 0x27560
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
je 0x45510
callq 0x27560
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x4551f
callq 0x27560
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x4552e
callq 0x27560
leaq 0x28(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x2d03b(%rip), %rsi     # 0x72578
leaq 0x2d038(%rip), %rdx     # 0x7257c
callq 0x2f1b2
leaq 0x8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x2cfcc(%rip), %rsi     # 0x72524
leaq 0x2cfd1(%rip), %rdx     # 0x72530
callq 0x2f1b2
leaq 0x48(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x2d00a(%rip), %rsi     # 0x7257d
leaq 0x2d016(%rip), %rdx     # 0x72590
callq 0x2f1b2
leaq 0x68(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x3228d(%rip), %rdx     # 0x7781b
movq %rdx, %rsi
callq 0x2f1b2
movq 0x8(%rbx), %r15
callq 0x646ea
leaq 0x48(%r15), %r9
addq $0x3, %r15
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x48(%rsp), %rdx
leaq 0x68(%rsp), %rcx
movq %r15, %r8
pushq %rax
pushq %r14
callq 0x2ebcc
addq $0x10, %rsp
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x455d9
callq 0x27560
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
leaq 0x18(%rsp), %r15
je 0x455ed
callq 0x27560
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x455fc
callq 0x27560
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x4560b
callq 0x27560
leaq 0x28(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x2cfc1(%rip), %rsi     # 0x725db
leaq 0x2cfc1(%rip), %rdx     # 0x725e2
callq 0x2f1b2
leaq 0x8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x2cfae(%rip), %rsi     # 0x725e3
leaq 0x2cfad(%rip), %rdx     # 0x725e9
callq 0x2f1b2
leaq 0x48(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x2e815(%rip), %rsi     # 0x73e65
leaq 0x2e8df(%rip), %rdx     # 0x73f36
callq 0x2f1b2
leaq 0x68(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x321b0(%rip), %rdx     # 0x7781b
movq %rdx, %rsi
callq 0x2f1b2
movq 0x8(%rbx), %r9
leaq 0x5(%r9), %r8
addq $0x70, %r9
subq $0x8, %rsp
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x70(%rsp), %rcx
pushq %r14
callq 0x2e8ba
addq $0x10, %rsp
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x456b1
callq 0x27560
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
je 0x456c0
callq 0x27560
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x456cf
callq 0x27560
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x456de
callq 0x27560
leaq 0x28(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x2da0a(%rip), %rsi     # 0x730f7
leaq 0x2da14(%rip), %rdx     # 0x73108
callq 0x2f1b2
leaq 0x8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x2d943(%rip), %rsi     # 0x7304b
leaq 0x2d9df(%rip), %rdx     # 0x730ee
callq 0x2f1b2
movq 0x8(%rbx), %rdx
addq $0x6, %rdx
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rsi
movq %r14, %rcx
callq 0x63808
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x4573d
callq 0x27560
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x4574c
callq 0x27560
leaq 0x28(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x304ae(%rip), %rsi     # 0x75c09
leaq 0x304af(%rip), %rdx     # 0x75c11
callq 0x2f1b2
leaq 0x28(%rsp), %rdi
callq 0x63a0c
movq %rax, %r14
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45783
callq 0x27560
leaq 0x28(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x2e7a5(%rip), %rsi     # 0x73f37
leaq 0x2e7a0(%rip), %rdx     # 0x73f39
callq 0x2f1b2
leaq 0x8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x2d21b(%rip), %rsi     # 0x729c8
leaq 0x2d219(%rip), %rdx     # 0x729cd
callq 0x2f1b2
leaq 0x48(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x2e772(%rip), %rsi     # 0x73f3a
leaq 0x2e7b2(%rip), %rdx     # 0x73f81
callq 0x2f1b2
leaq 0x68(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x32038(%rip), %rdx     # 0x7781b
movq %rdx, %rsi
callq 0x2f1b2
movq 0x8(%rbx), %r8
leaq 0x8(%r8), %r9
leaq 0x2e7fa(%rip), %rax     # 0x73ff4
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x48(%rsp), %rdx
leaq 0x68(%rsp), %rcx
pushq %rax
pushq %r14
callq 0x45de2
addq $0x10, %rsp
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x45829
callq 0x27560
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
je 0x45838
callq 0x27560
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x45847
callq 0x27560
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45856
callq 0x27560
leaq 0x28(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x2e71d(%rip), %rsi     # 0x73f82
leaq 0x2e71b(%rip), %rdx     # 0x73f87
callq 0x2f1b2
leaq 0x8(%rsp), %rdi
movq %r15, (%rdi)
leaq 0x31e42(%rip), %rsi     # 0x776c2
leaq 0x31e4b(%rip), %rdx     # 0x776d2
callq 0x2f1b2
leaq 0x48(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x2e6ed(%rip), %rsi     # 0x73f88
leaq 0x2e74f(%rip), %rdx     # 0x73ff1
callq 0x2f1b2
leaq 0x68(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x31f65(%rip), %rdx     # 0x7781b
movq %rdx, %rsi
callq 0x2f1b2
movq 0x8(%rbx), %r9
leaq 0x4(%r9), %r8
addq $0x68, %r9
subq $0x8, %rsp
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x70(%rsp), %rcx
pushq %r14
callq 0x460da
addq $0x10, %rsp
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x458fc
callq 0x27560
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
je 0x4590b
callq 0x27560
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x4591a
callq 0x27560
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45929
callq 0x27560
addq $0x88, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x45952
callq 0x27560
jmp 0x45952
movq %rax, %rbx
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
je 0x45966
callq 0x27560
jmp 0x45966
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x4597f
callq 0x27560
jmp 0x4597f
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45c1c
jmp 0x45c17
jmp 0x45b84
movq %rax, %rbx
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x459ae
callq 0x27560
jmp 0x459ae
movq %rax, %rbx
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
je 0x459c2
callq 0x27560
jmp 0x459c2
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x459db
callq 0x27560
jmp 0x459db
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45c1c
jmp 0x45c17
jmp 0x45b84
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45c1c
jmp 0x45c17
jmp 0x45b84
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x45a25
callq 0x27560
jmp 0x45a25
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45c1c
jmp 0x45c17
jmp 0x45b84
movq %rax, %rbx
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x45a54
callq 0x27560
jmp 0x45a54
movq %rax, %rbx
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
je 0x45a68
callq 0x27560
jmp 0x45a68
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x45a81
callq 0x27560
jmp 0x45a81
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45c1c
jmp 0x45c17
jmp 0x45b84
movq %rax, %rbx
jmp 0x45ba9
movq %rax, %rbx
jmp 0x45bb8
movq %rax, %rbx
jmp 0x45bcc
jmp 0x45b84
movq %rax, %rbx
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x45acd
callq 0x27560
jmp 0x45acd
movq %rax, %rbx
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
je 0x45ae1
callq 0x27560
jmp 0x45ae1
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x45afa
callq 0x27560
jmp 0x45afa
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45c1c
jmp 0x45c17
jmp 0x45b84
movq %rax, %rbx
jmp 0x45bea
movq %rax, %rbx
jmp 0x45bf9
movq %rax, %rbx
jmp 0x45c0d
jmp 0x45b84
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45c1c
jmp 0x45c17
jmp 0x45b84
movq %rax, %rbx
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
je 0x45b58
callq 0x27560
jmp 0x45b58
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x45b71
callq 0x27560
jmp 0x45b71
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45c1c
jmp 0x45c17
movq %rax, %rbx
jmp 0x45c1c
movq %rax, %rbx
movq %r14, %rdi
jmp 0x45c17
movq %rax, %rbx
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x45ba9
callq 0x27560
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
je 0x45bb8
callq 0x27560
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x45bcc
callq 0x27560
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45c1c
jmp 0x45c17
movq %rax, %rbx
movq 0x68(%rsp), %rdi
cmpq %r13, %rdi
je 0x45bea
callq 0x27560
movq 0x48(%rsp), %rdi
cmpq %rbp, %rdi
je 0x45bf9
callq 0x27560
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x45c0d
callq 0x27560
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x45c1c
callq 0x27560
movq %rbx, %rdi
callq 0x27b20