// File: cristian-bicheru[P]arith/./huffman.h
// Function: huffman::UncompressFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
CodecStatusCode UncompressFile(const std::string& InFile, const std::string& OutFile) {
        std::vector<unsigned char> CompressedBuffer;
        std::vector<unsigned char> UncompressedBuffer;

        if (buffer::LoadFile(&InFile, CompressedBuffer)) {
            try {
                UncompressBuffer<unsigned char, uint64_t>(UncompressedBuffer, CompressedBuffer);
            } catch (std::exception& e) {
                std::cerr << e.what() << std::endl;
                return BadCompressionStream;
            }

            if (buffer::SaveFile(UncompressedBuffer, &OutFile)) {
                return Success;
            } else {
                std::cerr << "File Write Error." << std::endl;
                return FileWriteError;
            }
        } else {
            std::cerr << "File Read Error." << std::endl;
            return FileReadError;
        }
    }

// Assembly:
subq $0x98, %rsp
movq %rdi, 0x88(%rsp)
movq %rsi, 0x80(%rsp)
leaq 0x68(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x5790
leaq 0x50(%rsp), %rdi
callq 0x5790
movq 0x28(%rsp), %rsi
movq 0x88(%rsp), %rdi
callq 0x26a0
movb %al, 0x33(%rsp)
jmp 0x4068
movb 0x33(%rsp), %al
testb $0x1, %al
jne 0x4075
jmp 0x41b8
leaq 0x50(%rsp), %rdi
leaq 0x68(%rsp), %rsi
callq 0x5cc0
jmp 0x4086
jmp 0x413c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x48(%rsp)
movl %eax, 0x44(%rsp)
jmp 0x421b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x48(%rsp)
movl %eax, 0x44(%rsp)
movl 0x44(%rsp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x421b
movq 0x48(%rsp), %rdi
callq 0x20b0
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movq %rax, %rsi
movq 0x1df04(%rip), %rdi     # 0x21fe8
callq 0x21a0
movq %rax, 0x20(%rsp)
jmp 0x40f0
movq 0x20(%rsp), %rdi
movq 0x1dea4(%rip), %rsi     # 0x21fa0
callq 0x21d0
jmp 0x4103
movl $0x3, 0x94(%rsp)
movl $0x1, 0x34(%rsp)
callq 0x22d0
jmp 0x4132
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x48(%rsp)
movl %eax, 0x44(%rsp)
callq 0x22d0
jmp 0x4137
jmp 0x41f8
jmp 0x421b
movq 0x80(%rsp), %rsi
leaq 0x50(%rsp), %rdi
callq 0x2850
movb %al, 0x1f(%rsp)
jmp 0x4154
movb 0x1f(%rsp), %al
testb $0x1, %al
jne 0x415e
jmp 0x4176
movl $0x0, 0x94(%rsp)
movl $0x1, 0x34(%rsp)
jmp 0x41f8
movq 0x1de6b(%rip), %rdi     # 0x21fe8
leaq 0x13f48(%rip), %rsi     # 0x180cc
callq 0x21a0
movq %rax, 0x10(%rsp)
jmp 0x4190
movq 0x10(%rsp), %rdi
movq 0x1de04(%rip), %rsi     # 0x21fa0
callq 0x21d0
jmp 0x41a3
movl $0x2, 0x94(%rsp)
movl $0x1, 0x34(%rsp)
jmp 0x41f8
movq 0x1de29(%rip), %rdi     # 0x21fe8
leaq 0x13f18(%rip), %rsi     # 0x180de
callq 0x21a0
movq %rax, 0x8(%rsp)
jmp 0x41d2
movq 0x8(%rsp), %rdi
movq 0x1ddc2(%rip), %rsi     # 0x21fa0
callq 0x21d0
jmp 0x41e5
movl $0x1, 0x94(%rsp)
movl $0x1, 0x34(%rsp)
leaq 0x50(%rsp), %rdi
callq 0x5050
leaq 0x68(%rsp), %rdi
callq 0x5050
movl 0x94(%rsp), %eax
addq $0x98, %rsp
retq
leaq 0x50(%rsp), %rdi
callq 0x5050
leaq 0x68(%rsp), %rdi
callq 0x5050
movq 0x48(%rsp), %rdi
callq 0x2310
movq %rax, %rdi
callq 0x5840
nopw %cs:(%rax,%rax)