// File: /workspace/github_cpp_makefile_star2_O2/ipatix[P]wav2agb/wav_file.cpp
// Function: wav_file::wav_file(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
wav_file::wav_file(const std::string& path) : loadBuffer(loadChunkSize)
{
    ifs.exceptions(std::ios::badbit | std::ios::eofbit);
    ifs.open(path, std::ios::binary);
    if (!ifs.good())
        throw std::runtime_error("failed to open file: " + path + ", reason: " + strerror(errno));
    if (!ifs.is_open())
        throw std::runtime_error("failed to open file: " + path + ", reason: " + strerror(errno));

    ifs.seekg(0, ifs.end);
    std::streampos len = ifs.tellg();
    ifs.seekg(0, ifs.beg);

    std::string chunkId = read_str(ifs, 4);
    if (chunkId != "RIFF")
        throw std::runtime_error("RIFF ID invalid");
    uint32_t mainChunkLen = read_u32(ifs);
    if (mainChunkLen + 8 != len)
        throw std::runtime_error("RIFF chunk len (=" +
                std::to_string(mainChunkLen) +
                ") doesn't match file len (=" +
                std::to_string(len) +
                ")");
    std::string riffType = read_str(ifs, 4);
    if (riffType != "WAVE")
        throw std::runtime_error("WAVE ID invalid");

    bool dataChunkFound = false;
    bool fmtChunkFound = false;
    // search all chunks
    std::streampos curPos;
    while ((curPos = ifs.tellg()) + std::streampos(8) <= len) {
        chunkId = read_str(ifs, 4);
        uint32_t chunkLen = read_u32(ifs);
        if (curPos + std::streampos(8) + std::streampos(chunkLen) > len)
            throw std::runtime_error("ERROR: chunk goes beyond end of file: offset=" + std::to_string(curPos));

        if (chunkId == "fmt ") {
            fmtChunkFound = true;
            std::vector<uint8_t> fmtChunk = read_arr(ifs, chunkLen);
            uint16_t fmtTag = arr_u16(fmtChunk, 0);
            uint16_t numChannels = arr_u16(fmtChunk, 2);
            if (numChannels != 1)
                throw std::runtime_error("ERROR: input file is NOT mono");
            this->sampleRate = arr_u32(fmtChunk, 4);
            uint16_t block_align = arr_u16(fmtChunk, 12);
            uint16_t bits_per_sample = arr_u16(fmtChunk, 14);
            if (fmtTag == 1) {
                // integer
                if (block_align == 1 && bits_per_sample == 8)
                    this->fmt = format_type::u8;
                else if (block_align == 2 && bits_per_sample == 16)
                    this->fmt = format_type::s16;
                else if (block_align == 3 && bits_per_sample == 24)
                    this->fmt = format_type::s24;
                else if (block_align == 4 && bits_per_sample == 32)
                    this->fmt = format_type::s32;
                else
                    throw std::runtime_error("ERROR: unsupported integer format combination");
            } else if (fmtTag == 3) {
                // float
                if (block_align == 4 && bits_per_sample == 32)
                    this->fmt = format_type::f32;
                else if (block_align == 8 && bits_per_sample == 64)
                    this->fmt = format_type::f64;
                else
                    throw std::runtime_error("ERROR: unsupported float format combination");
            } else {
                throw std::runtime_error("ERROR: unsupported format code: " + std::to_string(fmtTag));
            }
        } else if (chunkId == "data") {
            dataChunkFound = true;
            dataChunkPos = ifs.tellg();
            dataChunkEndPos = dataChunkPos + std::streampos(chunkLen);
            ifs.seekg(chunkLen, ifs.cur);
        } else if (chunkId == "smpl") {
            std::vector<uint8_t> smplChunk = read_arr(ifs, chunkLen);
            uint32_t midiUnityNote = arr_u32(smplChunk, 12);
            this->midiKey = static_cast<uint8_t>(std::min(midiUnityNote, 127u));
            uint32_t midiPitchFraction = arr_u32(smplChunk, 16);
            // the values below convert the uint32_t range to 0.0 to 100.0 range
            this->tuning = static_cast<double>(midiPitchFraction) / (4294967296.0 * 100.0);
            uint32_t numLoops = arr_u32(smplChunk, 28);
            if (numLoops > 1)
                throw std::runtime_error("ERROR: too many loops in smpl chunk");
            if (numLoops == 1) {
                uint32_t loopType = arr_u32(smplChunk, 36 + 4);
                if (loopType != 0)
                    throw std::runtime_error("ERROR: loop type not supported: " + std::to_string(loopType));
                this->loopStart = arr_u32(smplChunk, 36 + 8);
                // sampler chunks tell the last sample to be played (so including rather than excluding), thus +1
                this->loopEnd = arr_u32(smplChunk, 36 + 12) + 1;
                this->loopEnabled = true;
            }
        } else {
            //fprintf(stderr, "WARNING: ignoring unknown chunk type: <%s>\n", chunkId.c_str());
            ifs.seekg(chunkLen, ifs.cur);
        }

        /* https://en.wikipedia.org/wiki/Resource_Interchange_File_Format#Explanation
         * If chunk size is odd, skip the pad byte */
        if ((chunkLen % 2) == 1)
            ifs.seekg(1, ifs.cur);
    }

    if (!fmtChunkFound)
        throw std::runtime_error("ERROR: fmt chunk not found");
    if (!dataChunkFound)
        throw std::runtime_error("ERROR: data chunk not found");

    uint32_t numSamples = static_cast<uint32_t>(dataChunkEndPos - dataChunkPos) / fmt_size();
    this->loopEnd = std::min(this->loopEnd, numSamples);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %rsi, %r15
movq %rdi, %rbx
callq 0x2230
xorpd %xmm0, %xmm0
movupd %xmm0, 0x218(%rbx)
movupd %xmm0, 0x208(%rbx)
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movq %rax, 0x228(%rbx)
leaq 0x230(%rbx), %rdi
leaq 0x50(%rsp), %rdx
movl $0x800, %esi            # imm = 0x800
movq %rdi, 0xa0(%rsp)
callq 0x4fac
orq $-0x1, 0x248(%rbx)
movabsq $-0x100000000, %rax     # imm = 0xFFFFFFFF00000000
movq %rax, 0x254(%rbx)
movb $0x0, 0x25c(%rbx)
andq $0x0, 0x260(%rbx)
movb $0x3c, 0x268(%rbx)
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
pushq $0x3
popq %rsi
callq 0x20b0
pushq $0x4
popq %rdx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x21c0
movq (%rbx), %rax
movq -0x18(%rax), %rax
cmpl $0x0, 0x20(%rbx,%rax)
jne 0x42d3
leaq 0x78(%rbx), %rdi
callq 0x2060
testb %al, %al
je 0x4353
pushq $0x2
popq %rdx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x22b0
movq %rbx, %rdi
callq 0x2390
movq %rax, 0x8(%rsp)
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22b0
leaq 0x50(%rsp), %rdi
movq %rbx, %rsi
callq 0x47ac
leaq 0x29a9(%rip), %rsi      # 0x672d
leaq 0x50(%rsp), %rdi
callq 0x5073
testb %al, %al
jne 0x43d3
movq %rbx, %rdi
callq 0x4829
movl %eax, %r12d
leal 0x8(%r12), %eax
cmpq %rax, 0x8(%rsp)
jne 0x4408
leaq 0x30(%rsp), %rdi
movq %rbx, %rsi
callq 0x47ac
leaq 0x29ab(%rip), %rsi      # 0x6770
leaq 0x30(%rsp), %rdi
callq 0x5073
testb %al, %al
jne 0x44c7
movq $0x0, 0x78(%rsp)
leaq 0xa8(%rsp), %r12
movq $0x0, 0x70(%rsp)
movq %rbx, %rdi
callq 0x2390
movq %rax, %r14
leaq 0x8(%rax), %r15
cmpq 0x8(%rsp), %r15
leaq 0x10(%rsp), %r13
jg 0x40b9
movq %r13, %rdi
movq %rbx, %rsi
callq 0x47ac
leaq 0x50(%rsp), %rdi
movq %r13, %rsi
callq 0x2260
movq %r13, %rdi
callq 0x2428
movq %rbx, %rdi
callq 0x4829
movl %eax, %r13d
movl %eax, %ebp
addq %rbp, %r15
cmpq 0x8(%rsp), %r15
jg 0x4128
leaq 0x50(%rsp), %r14
movq %r14, %rdi
leaq 0x2959(%rip), %rsi      # 0x67b3
callq 0x38d1
testb %al, %al
je 0x3f36
movq %r12, %rdi
movq %rbx, %rsi
movq %rbp, %rdx
callq 0x4846
movq %r12, %rdi
xorl %esi, %esi
callq 0x4890
movl %eax, %r14d
movq %r12, %rdi
pushq $0x2
popq %rsi
callq 0x4890
cmpw $0x1, %ax
jne 0x4189
movq %r12, %rdi
pushq $0x4
popq %rsi
callq 0x48bd
movl %eax, 0x26c(%rbx)
movq %r12, %rdi
pushq $0xc
popq %rsi
callq 0x4890
movl %eax, %ebp
movq %r12, %rdi
pushq $0xe
popq %rsi
callq 0x4890
cmpw $0x3, %r14w
je 0x404e
movzwl %r14w, %r14d
cmpl $0x1, %r14d
jne 0x41be
movl %ebp, %edx
xorl $0x1, %edx
movl %eax, %esi
xorl $0x8, %esi
xorl %ecx, %ecx
orw %dx, %si
je 0x4077
movl %ebp, %ecx
xorl $0x2, %ecx
movl %eax, %edx
xorl $0x10, %edx
orw %cx, %dx
pushq $0x1
popq %rcx
je 0x4077
movl %ebp, %ecx
xorl $0x3, %ecx
movl %eax, %edx
xorl $0x18, %edx
orw %cx, %dx
pushq $0x2
popq %rcx
je 0x4077
cmpw $0x4, %bp
jne 0x4543
pushq $0x3
popq %rcx
cmpw $0x20, %ax
je 0x4077
jmp 0x4543
movq %r14, %rdi
leaq 0x2911(%rip), %rsi      # 0x6851
callq 0x38d1
testb %al, %al
je 0x3f8a
movq %rbx, %rdi
callq 0x2390
movq %rax, 0x208(%rbx)
movq %rdx, 0x210(%rbx)
addq %rbp, %rax
movq %rax, 0x218(%rbx)
movq %rdx, 0x220(%rbx)
movb $0x1, %al
movq %rax, 0x70(%rsp)
movq %rbx, %rdi
movq %rbp, %rsi
pushq $0x1
popq %rdx
callq 0x22b0
jmp 0x409c
movq %r14, %rdi
leaq 0x28c2(%rip), %rsi      # 0x6856
callq 0x38d1
testb %al, %al
je 0x408e
movq %r12, %rdi
movq %rbx, %rsi
movq %rbp, %rdx
callq 0x4846
movq %r12, %rdi
pushq $0xc
popq %rsi
callq 0x48bd
cmpl $0x7f, %eax
pushq $0x7f
popq %rcx
cmovael %ecx, %eax
movb %al, 0x268(%rbx)
movq %r12, %rdi
pushq $0x10
popq %rsi
callq 0x48bd
movl %eax, %eax
cvtsi2sd %rax, %xmm0
divsd 0x26ad(%rip), %xmm0     # 0x6690
movsd %xmm0, 0x260(%rbx)
movq %r12, %rdi
pushq $0x1c
popq %rsi
callq 0x48bd
cmpl $0x2, %eax
jae 0x423e
cmpl $0x1, %eax
jne 0x4044
movq %r12, %rdi
pushq $0x28
popq %rsi
callq 0x48bd
movl %eax, %ebp
testl %eax, %eax
jne 0x4273
movq %r12, %rdi
pushq $0x2c
popq %rsi
callq 0x48bd
movl %eax, 0x254(%rbx)
movq %r12, %rdi
pushq $0x30
popq %rsi
callq 0x48bd
incl %eax
movl %eax, 0x258(%rbx)
movb $0x1, 0x25c(%rbx)
movq %r12, %rdi
callq 0x552e
jmp 0x409c
movl %ebp, %ecx
xorl $0x4, %ecx
movl %eax, %edx
xorl $0x20, %edx
orw %cx, %dx
pushq $0x4
popq %rcx
je 0x4077
cmpw $0x8, %bp
jne 0x421f
pushq $0x5
popq %rcx
cmpw $0x40, %ax
jne 0x421f
movl %ecx, 0x250(%rbx)
movq %r12, %rdi
callq 0x552e
movb $0x1, %al
movq %rax, 0x78(%rsp)
jmp 0x409c
movq %rbx, %rdi
movq %rbp, %rsi
pushq $0x1
popq %rdx
callq 0x22b0
testb $0x1, %r13b
je 0x3df1
movq %rbx, %rdi
pushq $0x1
popq %rsi
pushq $0x1
popq %rdx
callq 0x22b0
jmp 0x3df1
testb $0x1, 0x78(%rsp)
je 0x44f7
testb $0x1, 0x70(%rsp)
je 0x4513
movq 0x208(%rbx), %r15
movq 0x218(%rbx), %r14
movq %rbx, %rdi
callq 0x3c18
movl %eax, %ecx
subl %r15d, %r14d
movl %r14d, %eax
xorl %edx, %edx
divl %ecx
movl 0x258(%rbx), %ecx
cmpl %ecx, %eax
cmovbl %eax, %ecx
movl %ecx, 0x258(%rbx)
leaq 0x30(%rsp), %rdi
callq 0x2428
leaq 0x50(%rsp), %rdi
callq 0x2428
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r12
leaq 0x80(%rsp), %rdi
movq %r14, %rsi
callq 0x5147
leaq 0x263b(%rip), %rsi      # 0x6785
leaq 0x10(%rsp), %rdi
leaq 0x80(%rsp), %rdx
callq 0x50e4
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %r12, %rdi
callq 0x2340
xorl %ebp, %ebp
movq 0x5e83(%rip), %rsi      # 0x9ff8
movq 0x5e4c(%rip), %rdx      # 0x9fc8
movq %r12, %rdi
callq 0x2380
jmp 0x44f7
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r14
leaq 0x261d(%rip), %rsi      # 0x67b8
movq %rax, %rdi
callq 0x20e0
movq 0x5e4e(%rip), %rsi      # 0x9ff8
movq 0x5e17(%rip), %rdx      # 0x9fc8
movq %r14, %rdi
callq 0x2380
jmp 0x44f7
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r12
leaq 0x80(%rsp), %rdi
movl %r14d, %esi
callq 0x51a7
leaq 0x2650(%rip), %rsi      # 0x6830
leaq 0x10(%rsp), %rdi
leaq 0x80(%rsp), %rdx
callq 0x50e4
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %r12, %rdi
callq 0x2340
xorl %ebp, %ebp
movq 0x5ded(%rip), %rsi      # 0x9ff8
movq 0x5db6(%rip), %rdx      # 0x9fc8
movq %r12, %rdi
callq 0x2380
jmp 0x44f7
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r14
leaq 0x25d3(%rip), %rsi      # 0x6804
movq %rax, %rdi
callq 0x20e0
jmp 0x455d
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r14
leaq 0x260b(%rip), %rsi      # 0x685b
movq %rax, %rdi
callq 0x20e0
movq 0x5d99(%rip), %rsi      # 0x9ff8
movq 0x5d62(%rip), %rdx      # 0x9fc8
movq %r14, %rdi
callq 0x2380
jmp 0x44f7
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r14
leaq 0x80(%rsp), %rdi
movl %ebp, %esi
callq 0x5108
leaq 0x25eb(%rip), %rsi      # 0x687f
leaq 0x10(%rsp), %rdi
leaq 0x80(%rsp), %rdx
callq 0x50e4
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0x2340
xorl %ebp, %ebp
movq 0x5d39(%rip), %rsi      # 0x9ff8
movq 0x5d02(%rip), %rdx      # 0x9fc8
movq %r14, %rdi
callq 0x2380
jmp 0x44f7
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r14
leaq 0x2427(%rip), %rsi      # 0x670c
leaq 0x10(%rsp), %rdi
movq %r15, %rdx
callq 0x4ffd
leaq 0x2429(%rip), %rdx      # 0x6722
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x392f
callq 0x2030
movl (%rax), %edi
callq 0x20c0
leaq 0x50(%rsp), %rdi
leaq 0x30(%rsp), %rsi
movq %rax, %rdx
callq 0x392f
movb $0x1, %bpl
leaq 0x50(%rsp), %rsi
movq %r14, %rdi
callq 0x2340
xorl %ebp, %ebp
movq 0x5cb9(%rip), %rsi      # 0x9ff8
movq 0x5c82(%rip), %rdx      # 0x9fc8
movq %r14, %rdi
callq 0x2380
jmp 0x44f7
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r14
leaq 0x23a7(%rip), %rsi      # 0x670c
leaq 0x10(%rsp), %rdi
movq %r15, %rdx
callq 0x4ffd
leaq 0x23a9(%rip), %rdx      # 0x6722
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x392f
callq 0x2030
movl (%rax), %edi
callq 0x20c0
leaq 0x50(%rsp), %rdi
leaq 0x30(%rsp), %rsi
movq %rax, %rdx
callq 0x392f
movb $0x1, %bpl
leaq 0x50(%rsp), %rsi
movq %r14, %rdi
callq 0x2340
xorl %ebp, %ebp
movq 0x5c39(%rip), %rsi      # 0x9ff8
movq 0x5c02(%rip), %rdx      # 0x9fc8
movq %r14, %rdi
callq 0x2380
jmp 0x44f7
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r14
leaq 0x234d(%rip), %rsi      # 0x6732
movq %rax, %rdi
callq 0x20e0
movq 0x5c04(%rip), %rsi      # 0x9ff8
movq 0x5bcd(%rip), %rdx      # 0x9fc8
movq %r14, %rdi
callq 0x2380
jmp 0x44f7
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r14
leaq 0xe8(%rsp), %rdi
movl %r12d, %esi
callq 0x5108
leaq 0x2318(%rip), %rsi      # 0x6742
leaq 0xa8(%rsp), %rdi
leaq 0xe8(%rsp), %rdx
callq 0x50e4
leaq 0x230e(%rip), %rdx      # 0x6754
leaq 0x80(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x392f
leaq 0xc8(%rsp), %rdi
movq 0x8(%rsp), %rsi
callq 0x5147
leaq 0x10(%rsp), %rdi
leaq 0x80(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
callq 0x507d
leaq 0x21b3(%rip), %rdx      # 0x6641
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x392f
movb $0x1, %bpl
leaq 0x30(%rsp), %rsi
movq %r14, %rdi
callq 0x2340
xorl %ebp, %ebp
movq 0x5b42(%rip), %rsi      # 0x9ff8
movq 0x5b0b(%rip), %rdx      # 0x9fc8
movq %r14, %rdi
callq 0x2380
jmp 0x44f7
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r14
leaq 0x229c(%rip), %rsi      # 0x6775
movq %rax, %rdi
callq 0x20e0
movq 0x5b10(%rip), %rsi      # 0x9ff8
movq 0x5ad9(%rip), %rdx      # 0x9fc8
movq %r14, %rdi
callq 0x2380
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r14
leaq 0x2397(%rip), %rsi      # 0x68a0
movq %rax, %rdi
callq 0x20e0
jmp 0x452d
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r14
leaq 0x2396(%rip), %rsi      # 0x68bb
movq %rax, %rdi
callq 0x20e0
movq 0x5ac4(%rip), %rsi      # 0x9ff8
movq 0x5a8d(%rip), %rdx      # 0x9fc8
movq %r14, %rdi
callq 0x2380
pushq $0x10
popq %rdi
callq 0x2110
movq %rax, %r14
leaq 0x2281(%rip), %rsi      # 0x67d6
movq %rax, %rdi
callq 0x20e0
movq 0x5a94(%rip), %rsi      # 0x9ff8
movq 0x5a5d(%rip), %rdx      # 0x9fc8
movq %r14, %rdi
callq 0x2380
movq %rax, %r15
leaq 0x30(%rsp), %rdi
callq 0x2428
jmp 0x4588
movq %rax, %r15
movb $0x1, %bpl
leaq 0x10(%rsp), %rdi
callq 0x2428
jmp 0x459a
movq %rax, %r15
movb $0x1, %bpl
leaq 0xc8(%rsp), %rdi
callq 0x2428
jmp 0x45af
movq %rax, %r15
movb $0x1, %bpl
leaq 0x80(%rsp), %rdi
callq 0x2428
jmp 0x45c4
movq %rax, %r15
movb $0x1, %bpl
leaq 0xa8(%rsp), %rdi
callq 0x2428
jmp 0x45fe
jmp 0x45d7
jmp 0x45e6
movq %rax, %r15
leaq 0x50(%rsp), %rdi
callq 0x2428
jmp 0x45ec
movq %rax, %r15
movb $0x1, %bpl
leaq 0x30(%rsp), %rdi
callq 0x2428
jmp 0x461d
movq %rax, %r15
movb $0x1, %bpl
leaq 0xe8(%rsp), %rdi
callq 0x2428
testb %bpl, %bpl
jne 0x467a
jmp 0x4785
jmp 0x4617
movq %rax, %r15
movb $0x1, %bpl
leaq 0x10(%rsp), %rdi
callq 0x2428
testb %bpl, %bpl
jne 0x468c
jmp 0x478f
movq %rax, %r15
leaq 0x10(%rsp), %rdi
callq 0x2428
jmp 0x4646
movq %rax, %r15
movb $0x1, %bpl
leaq 0x80(%rsp), %rdi
callq 0x2428
testb %bpl, %bpl
jne 0x4741
jmp 0x4767
jmp 0x473e
jmp 0x466a
jmp 0x466a
movq %rax, %r15
movq %r14, %rdi
jmp 0x4757
jmp 0x4677
movq %rax, %r15
movq %r14, %rdi
callq 0x2180
jmp 0x4785
jmp 0x4689
movq %rax, %r15
movq %r14, %rdi
callq 0x2180
jmp 0x478f
jmp 0x473e
jmp 0x4778
jmp 0x4778
jmp 0x46bb
jmp 0x46bb
jmp 0x46f9
movq %rax, %r15
jmp 0x479c
jmp 0x4778
movq %rax, %r15
jmp 0x4785
jmp 0x4764
jmp 0x473e
jmp 0x473e
movq %rax, %r15
leaq 0x10(%rsp), %rdi
callq 0x2428
jmp 0x46e1
movq %rax, %r15
movb $0x1, %bpl
leaq 0x80(%rsp), %rdi
callq 0x2428
testb %bpl, %bpl
jne 0x4706
jmp 0x4767
jmp 0x46f9
jmp 0x4764
movq %rax, %r15
jmp 0x478f
jmp 0x4764
movq %rax, %r15
movq %r12, %rdi
jmp 0x4744
jmp 0x4764
jmp 0x4764
jmp 0x4778
jmp 0x4764
movq %rax, %r15
leaq 0x10(%rsp), %rdi
callq 0x2428
jmp 0x4728
movq %rax, %r15
movb $0x1, %bpl
leaq 0x80(%rsp), %rdi
callq 0x2428
testb %bpl, %bpl
jne 0x4754
jmp 0x477b
jmp 0x4764
movq %rax, %r15
movq %r14, %rdi
callq 0x2180
jmp 0x4767
jmp 0x4778
jmp 0x4764
jmp 0x4764
movq %rax, %r15
movq %r12, %rdi
callq 0x2180
jmp 0x477b
jmp 0x4764
jmp 0x4778
jmp 0x4778
movq %rax, %r15
leaq 0xa8(%rsp), %rdi
callq 0x552e
jmp 0x477b
jmp 0x4778
movq %rax, %r15
leaq 0x30(%rsp), %rdi
callq 0x2428
leaq 0x50(%rsp), %rdi
callq 0x2428
movq 0xa0(%rsp), %rdi
callq 0x55d4
movq %rbx, %rdi
callq 0x2080
movq %r15, %rdi
callq 0x23a0