// File: /workspace/github_c_makefile_star2_O0/perdisci[P]LSH/lsh_example.cpp
// Function: main
int main(int argc, char* argv[]) {
    
    unsigned mh_sig_len;
    unsigned lsh_bands;
    unsigned ngram_len;
    std::string corpus_dir;
    
    namespace po = boost::program_options;
    po::options_description desc("Options");
    desc.add_options()
    ("help,h", "Help message")
    ("mh_sig_len,l", po::value<unsigned>(&mh_sig_len)->default_value(240), "Length of minhash signature")
    ("lsh_bands,b", po::value<unsigned>(&lsh_bands)->default_value(80), "Number of bands used for LSH")
    ("ngram_len,n", po::value<unsigned>(&ngram_len)->default_value(1), "ngram length (number of grams)")
    ("corpus_dir,d", po::value<std::string>(), "Directory containing the documents")
    ;
    
    po::variables_map vm;
    po::store(po::parse_command_line(argc, argv, desc), vm);
    po::notify(vm);
    
    if (vm.count("help")) {
        std::cout << desc << std::endl;
        return 1;
    }
    

    if (!vm.count("corpus_dir")) {
        std::cout << "Error: corpus_dir must be provided!" << std::endl;
        std::cout << desc << std::endl;
        return 1;
    }

    corpus_dir = vm["corpus_dir"].as<std::string>();
    
    rp::LSH lsh(mh_sig_len,lsh_bands,ngram_len);
    std::cerr << "parameters:" << mh_sig_len << " | " << lsh_bands << " | " << ngram_len << std::endl;
    
    
    std::cerr << "Computing minhash for files in : " << corpus_dir << std::endl;
    lsh.minhash_corpus(corpus_dir,true,true);
    std::ofstream of;
    of.open("minhash_sigs.csv");
    rp::MinHashMap mh_map = lsh.get_minhash_signatures();
    for (rp::MinHashMap::value_type itm : mh_map) {
        of << itm.first;
        for(uint32_t v : itm.second)
            of << ", " << v;
        of << std::endl;
    }
    of.close();
    
    std::cerr << "Computing bands  " << lsh_bands << std::endl;
    lsh.compute_bands();
    std::cerr << "Computing candidates " << std::endl;
    lsh.compute_candidate_pairs();
    std::vector<rp::CandidatePair> cpv = lsh.get_candidate_pairs();
    
    std::cerr << "Computing minhash similarity: " << cpv.size() << std::endl;
    lsh.compute_minhash_similarities();
    of.open("minhash_sim.csv");
    std::vector<float> jsvmh = lsh.get_minhash_similarities();
    for(int i=0; i<cpv.size(); i++)
        of << cpv[i].first << "," << cpv[i].second << "," << jsvmh[i] << std::endl;
    of.close();
    
    // we can also compute the similarity based on the 
    // original document ngrams
    // this is available if lsh.minhash_corpus() was called with keep_ngrams set to true
    of.open("ngram_sim.csv");
    std::cerr << "Computing ngram similarity: " << cpv.size() << std::endl;
    lsh.compute_ngram_similarities();
    std::vector<float> jsvng = lsh.get_ngram_similarities();
    for(int i=0; i<cpv.size(); i++)
        of << "ngram: " << cpv[i].first << "," << cpv[i].second << "," << jsvng[i] << std::endl;
    of.close();

}

// Assembly:
subq $0x8b8, %rsp            # imm = 0x8B8
movl $0x0, 0x8b4(%rsp)
movl %edi, 0x8b0(%rsp)
movq %rsi, 0x8a8(%rsp)
leaq 0x878(%rsp), %rdi
callq 0x8680
leaq 0x7d7(%rsp), %rdi
movq %rdi, 0x1e8(%rsp)
callq 0x8840
movq 0x1e8(%rsp), %rdx
leaq 0x294d2(%rip), %rsi     # 0x32004
leaq 0x7d8(%rsp), %rdi
callq 0x8650
jmp 0x8b41
movq 0x3c428(%rip), %rax     # 0x44f70
movl (%rax), %edx
movl %edx, %ecx
shrl %ecx
leaq 0x7f8(%rsp), %rdi
leaq 0x7d8(%rsp), %rsi
callq 0x8670
jmp 0x8b65
leaq 0x7d8(%rsp), %rdi
callq 0x8928
leaq 0x7d7(%rsp), %rdi
callq 0x84e0
leaq 0x7f8(%rsp), %rdi
callq 0x8550
movq %rax, 0x1e0(%rsp)
jmp 0x8b96
movq 0x1e0(%rsp), %rax
movq %rax, 0x7b8(%rsp)
leaq 0x2945f(%rip), %rsi     # 0x3200c
leaq 0x2945f(%rip), %rdx     # 0x32013
leaq 0x7b8(%rsp), %rdi
callq 0x8870
movq %rax, 0x1d8(%rsp)
jmp 0x8bcb
leaq 0x8a4(%rsp), %rdi
callq 0x9c30
movq %rax, 0x1d0(%rsp)
jmp 0x8be2
movq 0x1d0(%rsp), %rdi
movl $0xf0, 0x7b4(%rsp)
leaq 0x7b4(%rsp), %rsi
callq 0x9c90
movq %rax, 0x1c8(%rsp)
jmp 0x8c0c
movq 0x1c8(%rsp), %rdx
movq 0x1d8(%rsp), %rdi
leaq 0x293fd(%rip), %rsi     # 0x32020
leaq 0x29403(%rip), %rcx     # 0x3202d
callq 0x88c0
movq %rax, 0x1c0(%rsp)
jmp 0x8c39
leaq 0x8a0(%rsp), %rdi
callq 0x9c30
movq %rax, 0x1b8(%rsp)
jmp 0x8c50
movq 0x1b8(%rsp), %rdi
movl $0x50, 0x7b0(%rsp)
leaq 0x7b0(%rsp), %rsi
callq 0x9c90
movq %rax, 0x1b0(%rsp)
jmp 0x8c7a
movq 0x1b0(%rsp), %rdx
movq 0x1c0(%rsp), %rdi
leaq 0x293b8(%rip), %rsi     # 0x32049
leaq 0x293bd(%rip), %rcx     # 0x32055
callq 0x88c0
movq %rax, 0x1a8(%rsp)
jmp 0x8ca7
leaq 0x89c(%rsp), %rdi
callq 0x9c30
movq %rax, 0x1a0(%rsp)
jmp 0x8cbe
movq 0x1a0(%rsp), %rdi
movl $0x1, 0x7ac(%rsp)
leaq 0x7ac(%rsp), %rsi
callq 0x9c90
movq %rax, 0x198(%rsp)
jmp 0x8ce8
movq 0x198(%rsp), %rdx
movq 0x1a8(%rsp), %rdi
leaq 0x29373(%rip), %rsi     # 0x32072
leaq 0x29378(%rip), %rcx     # 0x3207e
callq 0x88c0
movq %rax, 0x190(%rsp)
jmp 0x8d15
callq 0x9d10
movq %rax, 0x188(%rsp)
jmp 0x8d24
movq 0x188(%rsp), %rdx
movq 0x190(%rsp), %rdi
leaq 0x29362(%rip), %rsi     # 0x3209d
leaq 0x29368(%rip), %rcx     # 0x320aa
callq 0x88c0
jmp 0x8d49
leaq 0x708(%rsp), %rdi
callq 0x8190
jmp 0x8d58
movl 0x8b0(%rsp), %eax
movl %eax, 0x17c(%rsp)
movq 0x8a8(%rsp), %rax
movq %rax, 0x180(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x6d0(%rsp)
movaps %xmm0, 0x6c0(%rsp)
leaq 0x6c0(%rsp), %rdi
callq 0x9e50
jmp 0x8d98
movq 0x180(%rsp), %rdx
movl 0x17c(%rsp), %esi
leaq 0x6e0(%rsp), %rdi
leaq 0x7f8(%rsp), %rcx
xorl %r8d, %r8d
leaq 0x6c0(%rsp), %r9
callq 0x9d20
jmp 0x8dc9
leaq 0x6e0(%rsp), %rdi
leaq 0x708(%rsp), %rsi
xorl %edx, %edx
callq 0x8810
jmp 0x8de2
leaq 0x6e0(%rsp), %rdi
callq 0x9e60
leaq 0x6c0(%rsp), %rdi
callq 0x9e70
leaq 0x708(%rsp), %rdi
callq 0x8240
jmp 0x8e0b
leaq 0x718(%rsp), %rax
movq %rax, 0x168(%rsp)
leaq 0x69f(%rsp), %rdi
movq %rdi, 0x170(%rsp)
callq 0x8840
movq 0x170(%rsp), %rdx
leaq 0x2928e(%rip), %rsi     # 0x320cd
leaq 0x6a0(%rsp), %rdi
callq 0x8650
jmp 0x8e4e
movq 0x168(%rsp), %rdi
leaq 0x6a0(%rsp), %rsi
callq 0x9e90
movq %rax, 0x160(%rsp)
jmp 0x8e6d
leaq 0x6a0(%rsp), %rdi
callq 0x8928
leaq 0x69f(%rsp), %rdi
callq 0x84e0
movq 0x160(%rsp), %rax
cmpq $0x0, %rax
je 0x8ff5
movq 0x3c118(%rip), %rdi     # 0x44fb8
leaq 0x7f8(%rsp), %rsi
callq 0x80c0
movq %rax, 0x158(%rsp)
jmp 0x8eb7
movq 0x158(%rsp), %rdi
movq 0x3c0a2(%rip), %rsi     # 0x44f68
callq 0x84c0
jmp 0x8ecd
movl $0x1, 0x8b4(%rsp)
movl $0x1, 0x698(%rsp)
jmp 0x9b7a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x8f1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x7d8(%rsp), %rdi
callq 0x8928
leaq 0x7d7(%rsp), %rdi
callq 0x84e0
jmp 0x9c0b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x9bfe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x9bf1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x8f9a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x6e0(%rsp), %rdi
callq 0x9e60
leaq 0x6c0(%rsp), %rdi
callq 0x9e70
jmp 0x9bf1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x8fe3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x6a0(%rsp), %rdi
callq 0x8928
leaq 0x69f(%rsp), %rdi
callq 0x84e0
jmp 0x9bf1
leaq 0x718(%rsp), %rax
movq %rax, 0x148(%rsp)
leaq 0x677(%rsp), %rdi
movq %rdi, 0x150(%rsp)
callq 0x8840
movq 0x150(%rsp), %rdx
leaq 0x290a9(%rip), %rsi     # 0x320d2
leaq 0x678(%rsp), %rdi
callq 0x8650
jmp 0x9038
movq 0x148(%rsp), %rdi
leaq 0x678(%rsp), %rsi
callq 0x9e90
movq %rax, 0x140(%rsp)
jmp 0x9057
movq 0x140(%rsp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, 0x13f(%rsp)
leaq 0x678(%rsp), %rdi
callq 0x8928
leaq 0x677(%rsp), %rdi
callq 0x84e0
movb 0x13f(%rsp), %al
testb $0x1, %al
jne 0x9099
jmp 0x9164
movq 0x3bf18(%rip), %rdi     # 0x44fb8
leaq 0x29036(%rip), %rsi     # 0x320dd
callq 0x8480
movq %rax, 0x130(%rsp)
jmp 0x90b6
movq 0x130(%rsp), %rdi
movq 0x3bea3(%rip), %rsi     # 0x44f68
callq 0x84c0
jmp 0x90cc
movq 0x3bee5(%rip), %rdi     # 0x44fb8
leaq 0x7f8(%rsp), %rsi
callq 0x80c0
movq %rax, 0x128(%rsp)
jmp 0x90ea
movq 0x128(%rsp), %rdi
movq 0x3be6f(%rip), %rsi     # 0x44f68
callq 0x84c0
jmp 0x9100
movl $0x1, 0x8b4(%rsp)
movl $0x1, 0x698(%rsp)
jmp 0x9b7a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x9152
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x678(%rsp), %rdi
callq 0x8928
leaq 0x677(%rsp), %rdi
callq 0x84e0
jmp 0x9bf1
leaq 0x64f(%rsp), %rdi
movq %rdi, 0x120(%rsp)
callq 0x8840
movq 0x120(%rsp), %rdx
leaq 0x28f4a(%rip), %rsi     # 0x320d2
leaq 0x650(%rsp), %rdi
callq 0x8650
jmp 0x9197
leaq 0x708(%rsp), %rdi
leaq 0x650(%rsp), %rsi
callq 0x9ef0
movq %rax, 0x118(%rsp)
jmp 0x91b6
movq 0x118(%rsp), %rdi
callq 0x9f20
movq %rax, 0x110(%rsp)
jmp 0x91cd
movq 0x110(%rsp), %rsi
leaq 0x878(%rsp), %rdi
callq 0x8040
jmp 0x91e4
leaq 0x650(%rsp), %rdi
callq 0x8928
leaq 0x64f(%rsp), %rdi
callq 0x84e0
movl 0x8a4(%rsp), %esi
movl 0x8a0(%rsp), %edx
movl 0x89c(%rsp), %ecx
leaq 0x508(%rsp), %rdi
xorl %r8d, %r8d
callq 0x21d20
jmp 0x9225
movq 0x3bdc4(%rip), %rdi     # 0x44ff0
leaq 0x28ece(%rip), %rsi     # 0x32101
callq 0x8480
movq %rax, 0x108(%rsp)
jmp 0x9242
movq 0x108(%rsp), %rdi
movl 0x8a4(%rsp), %esi
callq 0x8620
movq %rax, 0x100(%rsp)
jmp 0x9260
movq 0x100(%rsp), %rdi
leaq 0x28e9e(%rip), %rsi     # 0x3210d
callq 0x8480
movq %rax, 0xf8(%rsp)
jmp 0x927e
movq 0xf8(%rsp), %rdi
movl 0x8a0(%rsp), %esi
callq 0x8620
movq %rax, 0xf0(%rsp)
jmp 0x929c
movq 0xf0(%rsp), %rdi
leaq 0x28e62(%rip), %rsi     # 0x3210d
callq 0x8480
movq %rax, 0xe8(%rsp)
jmp 0x92ba
movq 0xe8(%rsp), %rdi
movl 0x89c(%rsp), %esi
callq 0x8620
movq %rax, 0xe0(%rsp)
jmp 0x92d8
movq 0xe0(%rsp), %rdi
movq 0x3bc81(%rip), %rsi     # 0x44f68
callq 0x84c0
jmp 0x92ee
movq 0x3bcfb(%rip), %rdi     # 0x44ff0
leaq 0x28e15(%rip), %rsi     # 0x32111
callq 0x8480
movq %rax, 0xd8(%rsp)
jmp 0x930b
movq 0xd8(%rsp), %rdi
leaq 0x878(%rsp), %rsi
callq 0x8430
movq %rax, 0xd0(%rsp)
jmp 0x932a
movq 0xd0(%rsp), %rdi
movq 0x3bc2f(%rip), %rsi     # 0x44f68
callq 0x84c0
jmp 0x9340
leaq 0x4e8(%rsp), %rdi
leaq 0x878(%rsp), %rsi
callq 0x81a0
jmp 0x9357
leaq 0x508(%rsp), %rdi
leaq 0x4e8(%rsp), %rsi
movl $0x1, %ecx
movl %ecx, %edx
callq 0x21f70
jmp 0x9375
leaq 0x4e8(%rsp), %rdi
callq 0x8928
leaq 0x2e8(%rsp), %rdi
callq 0x87b0
jmp 0x9391
leaq 0x28d9b(%rip), %rsi     # 0x32133
leaq 0x2e8(%rsp), %rdi
movl $0x10, %edx
callq 0x8050
jmp 0x93ac
leaq 0x508(%rsp), %rdi
callq 0x21ee0
movq %rax, 0xc8(%rsp)
jmp 0x93c3
movq 0xc8(%rsp), %rsi
leaq 0x2b8(%rsp), %rdi
callq 0x9f30
jmp 0x93da
leaq 0x2b8(%rsp), %rax
movq %rax, 0x2b0(%rsp)
movq 0x2b0(%rsp), %rdi
callq 0x9f60
movq %rax, 0x2a8(%rsp)
movq 0x2b0(%rsp), %rdi
callq 0x9f90
movq %rax, 0x2a0(%rsp)
leaq 0x2a8(%rsp), %rdi
leaq 0x2a0(%rsp), %rsi
callq 0x9fc0
testb $0x1, %al
jne 0x9432
jmp 0x9634
leaq 0x2a8(%rsp), %rdi
callq 0x9fe0
movq %rax, %rsi
leaq 0x268(%rsp), %rdi
callq 0xa000
jmp 0x9451
leaq 0x2e8(%rsp), %rdi
leaq 0x268(%rsp), %rsi
callq 0x8430
jmp 0x9468
leaq 0x268(%rsp), %rax
addq $0x20, %rax
movq %rax, 0x260(%rsp)
movq 0x260(%rsp), %rdi
callq 0xa060
movq %rax, 0x258(%rsp)
movq 0x260(%rsp), %rdi
callq 0xa090
movq %rax, 0x250(%rsp)
leaq 0x258(%rsp), %rdi
leaq 0x250(%rsp), %rsi
callq 0xa0c0
testb $0x1, %al
jne 0x94c4
jmp 0x95ff
leaq 0x258(%rsp), %rdi
callq 0xa100
movl (%rax), %eax
movl %eax, 0x24c(%rsp)
leaq 0x28c63(%rip), %rsi     # 0x32144
leaq 0x2e8(%rsp), %rdi
callq 0x8480
movq %rax, 0xc0(%rsp)
jmp 0x94f8
movq 0xc0(%rsp), %rdi
movl 0x24c(%rsp), %esi
callq 0x8620
jmp 0x950e
jmp 0x9510
leaq 0x258(%rsp), %rdi
callq 0xa110
jmp 0x94a6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x9556
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x650(%rsp), %rdi
callq 0x8928
leaq 0x64f(%rsp), %rdi
callq 0x84e0
jmp 0x9bf1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x9be4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x4e8(%rsp), %rdi
callq 0x8928
jmp 0x9be4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x9bd7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x9bca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x268(%rsp), %rdi
callq 0xa130
jmp 0x9bca
movq 0x3b962(%rip), %rsi     # 0x44f68
leaq 0x2e8(%rsp), %rdi
callq 0x84c0
jmp 0x9615
leaq 0x268(%rsp), %rdi
callq 0xa130
leaq 0x2a8(%rsp), %rdi
callq 0xa160
jmp 0x9414
leaq 0x2e8(%rsp), %rdi
callq 0x86b0
jmp 0x9643
movq 0x3b9a6(%rip), %rdi     # 0x44ff0
leaq 0x28af6(%rip), %rsi     # 0x32147
callq 0x8480
movq %rax, 0xb8(%rsp)
jmp 0x9660
movq 0xb8(%rsp), %rdi
movl 0x8a0(%rsp), %esi
callq 0x8620
movq %rax, 0xb0(%rsp)
jmp 0x967e
movq 0xb0(%rsp), %rdi
movq 0x3b8db(%rip), %rsi     # 0x44f68
callq 0x84c0
jmp 0x9694
leaq 0x508(%rsp), %rdi
callq 0x22ff0
jmp 0x96a3
movq 0x3b946(%rip), %rdi     # 0x44ff0
leaq 0x28aa8(%rip), %rsi     # 0x32159
callq 0x8480
movq %rax, 0xa8(%rsp)
jmp 0x96c0
movq 0xa8(%rsp), %rdi
movq 0x3b899(%rip), %rsi     # 0x44f68
callq 0x84c0
jmp 0x96d6
leaq 0x508(%rsp), %rdi
callq 0x23430
jmp 0x96e5
leaq 0x508(%rsp), %rdi
callq 0x21f10
movq %rax, 0xa0(%rsp)
jmp 0x96fc
movq 0xa0(%rsp), %rsi
leaq 0x230(%rsp), %rdi
callq 0xa190
jmp 0x9713
movq 0x3b8d6(%rip), %rdi     # 0x44ff0
leaq 0x28a4e(%rip), %rsi     # 0x3216f
callq 0x8480
movq %rax, 0x98(%rsp)
jmp 0x9730
leaq 0x230(%rsp), %rdi
callq 0xa290
movq 0x98(%rsp), %rdi
movq %rax, %rsi
callq 0x80d0
movq %rax, 0x90(%rsp)
jmp 0x9757
movq 0x90(%rsp), %rdi
movq 0x3b802(%rip), %rsi     # 0x44f68
callq 0x84c0
jmp 0x976d
leaq 0x508(%rsp), %rdi
callq 0x23860
jmp 0x977c
leaq 0x28a0b(%rip), %rsi     # 0x3218e
leaq 0x2e8(%rsp), %rdi
movl $0x10, %edx
callq 0x8050
jmp 0x9797
leaq 0x508(%rsp), %rdi
callq 0x21f30
movq %rax, 0x88(%rsp)
jmp 0x97ae
movq 0x88(%rsp), %rsi
leaq 0x218(%rsp), %rdi
callq 0xa2b0
jmp 0x97c5
movl $0x0, 0x214(%rsp)
movslq 0x214(%rsp), %rax
movq %rax, 0x80(%rsp)
leaq 0x230(%rsp), %rdi
callq 0xa290
movq %rax, %rcx
movq 0x80(%rsp), %rax
cmpq %rcx, %rax
jae 0x9911
movslq 0x214(%rsp), %rsi
leaq 0x230(%rsp), %rdi
callq 0xa3b0
movq %rax, %rsi
leaq 0x2e8(%rsp), %rdi
callq 0x8430
movq %rax, 0x78(%rsp)
jmp 0x982d
movq 0x78(%rsp), %rdi
leaq 0x28965(%rip), %rsi     # 0x3219e
callq 0x8480
movq %rax, 0x70(%rsp)
jmp 0x9845
movslq 0x214(%rsp), %rsi
leaq 0x230(%rsp), %rdi
callq 0xa3b0
movq 0x70(%rsp), %rdi
movq %rax, %rsi
addq $0x20, %rsi
callq 0x8430
movq %rax, 0x68(%rsp)
jmp 0x9872
movq 0x68(%rsp), %rdi
leaq 0x28920(%rip), %rsi     # 0x3219e
callq 0x8480
movq %rax, 0x60(%rsp)
jmp 0x988a
movslq 0x214(%rsp), %rsi
leaq 0x218(%rsp), %rdi
callq 0xa3d0
movq 0x60(%rsp), %rdi
movss (%rax), %xmm0
callq 0x8380
movq %rax, 0x58(%rsp)
jmp 0x98b4
movq 0x58(%rsp), %rdi
movq 0x3b6a8(%rip), %rsi     # 0x44f68
callq 0x84c0
jmp 0x98c7
jmp 0x98c9
movl 0x214(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x214(%rsp)
jmp 0x97d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x9bbd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
jmp 0x9bb0
leaq 0x2e8(%rsp), %rdi
callq 0x86b0
jmp 0x9920
leaq 0x28879(%rip), %rsi     # 0x321a0
leaq 0x2e8(%rsp), %rdi
movl $0x10, %edx
callq 0x8050
jmp 0x993b
movq 0x3b6ae(%rip), %rdi     # 0x44ff0
leaq 0x28865(%rip), %rsi     # 0x321ae
callq 0x8480
movq %rax, 0x50(%rsp)
jmp 0x9955
leaq 0x230(%rsp), %rdi
callq 0xa290
movq 0x50(%rsp), %rdi
movq %rax, %rsi
callq 0x80d0
movq %rax, 0x48(%rsp)
jmp 0x9976
movq 0x48(%rsp), %rdi
movq 0x3b5e6(%rip), %rsi     # 0x44f68
callq 0x84c0
jmp 0x9989
leaq 0x508(%rsp), %rdi
callq 0x23ce0
jmp 0x9998
leaq 0x508(%rsp), %rdi
callq 0x21f50
movq %rax, 0x40(%rsp)
jmp 0x99ac
movq 0x40(%rsp), %rsi
leaq 0x1f8(%rsp), %rdi
callq 0xa2b0
jmp 0x99c0
movl $0x0, 0x1f4(%rsp)
movslq 0x1f4(%rsp), %rax
movq %rax, 0x38(%rsp)
leaq 0x230(%rsp), %rdi
callq 0xa290
movq %rax, %rcx
movq 0x38(%rsp), %rax
cmpq %rcx, %rax
jae 0x9b12
leaq 0x287ce(%rip), %rsi     # 0x321cb
leaq 0x2e8(%rsp), %rdi
callq 0x8480
movq %rax, 0x30(%rsp)
jmp 0x9a11
movslq 0x1f4(%rsp), %rsi
leaq 0x230(%rsp), %rdi
callq 0xa3b0
movq 0x30(%rsp), %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, 0x28(%rsp)
jmp 0x9a3a
movq 0x28(%rsp), %rdi
leaq 0x28758(%rip), %rsi     # 0x3219e
callq 0x8480
movq %rax, 0x20(%rsp)
jmp 0x9a52
movslq 0x1f4(%rsp), %rsi
leaq 0x230(%rsp), %rdi
callq 0xa3b0
movq 0x20(%rsp), %rdi
movq %rax, %rsi
addq $0x20, %rsi
callq 0x8430
movq %rax, 0x18(%rsp)
jmp 0x9a7f
movq 0x18(%rsp), %rdi
leaq 0x28713(%rip), %rsi     # 0x3219e
callq 0x8480
movq %rax, 0x10(%rsp)
jmp 0x9a97
movslq 0x1f4(%rsp), %rsi
leaq 0x1f8(%rsp), %rdi
callq 0xa3d0
movq 0x10(%rsp), %rdi
movss (%rax), %xmm0
callq 0x8380
movq %rax, 0x8(%rsp)
jmp 0x9ac1
movq 0x8(%rsp), %rdi
movq 0x3b49b(%rip), %rsi     # 0x44f68
callq 0x84c0
jmp 0x9ad4
jmp 0x9ad6
movl 0x1f4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x1f4(%rsp)
jmp 0x99cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x7c8(%rsp)
movl %eax, 0x7c4(%rsp)
leaq 0x1f8(%rsp), %rdi
callq 0xa3f0
jmp 0x9bb0
leaq 0x2e8(%rsp), %rdi
callq 0x86b0
jmp 0x9b21
leaq 0x1f8(%rsp), %rdi
callq 0xa3f0
leaq 0x218(%rsp), %rdi
callq 0xa3f0
leaq 0x230(%rsp), %rdi
callq 0xa450
leaq 0x2b8(%rsp), %rdi
callq 0xa4b0
leaq 0x2e8(%rsp), %rdi
callq 0x86f0
leaq 0x508(%rsp), %rdi
callq 0xa4c0
movl $0x0, 0x698(%rsp)
leaq 0x708(%rsp), %rdi
callq 0xa550
leaq 0x7f8(%rsp), %rdi
callq 0xa5b0
leaq 0x878(%rsp), %rdi
callq 0x8928
movl 0x8b4(%rsp), %eax
addq $0x8b8, %rsp            # imm = 0x8B8
retq
leaq 0x218(%rsp), %rdi
callq 0xa3f0
leaq 0x230(%rsp), %rdi
callq 0xa450
leaq 0x2b8(%rsp), %rdi
callq 0xa4b0
leaq 0x2e8(%rsp), %rdi
callq 0x86f0
leaq 0x508(%rsp), %rdi
callq 0xa4c0
leaq 0x708(%rsp), %rdi
callq 0xa550
leaq 0x7f8(%rsp), %rdi
callq 0xa5b0
leaq 0x878(%rsp), %rdi
callq 0x8928
movq 0x7c8(%rsp), %rdi
callq 0x8820
nopw %cs:(%rax,%rax)
nop