// File: /workspace/github_cpp_makefile_star2_O1/tenup-coin[P]seeder/util.cpp
// Function: EncodeBase32[abi:cxx11](unsigned char const*, unsigned long)
string EncodeBase32(const unsigned char* pch, size_t len)
{
    static const char *pbase32 = "abcdefghijklmnopqrstuvwxyz234567";

    string strRet="";
    strRet.reserve((len+4)/5*8);

    int mode=0, left=0;
    const unsigned char *pchEnd = pch+len;

    while (pch<pchEnd)
    {
        int enc = *(pch++);
        switch (mode)
        {
            case 0: // we have no bits
                strRet += pbase32[enc >> 3];
                left = (enc & 7) << 2;
                mode = 1;
                break;

            case 1: // we have three bits
                strRet += pbase32[left | (enc >> 6)];
                strRet += pbase32[(enc >> 1) & 31];
                left = (enc & 1) << 4;
                mode = 2;
                break;

            case 2: // we have one bit
                strRet += pbase32[left | (enc >> 4)];
                left = (enc & 15) << 1;
                mode = 3;
                break;

            case 3: // we have four bits
                strRet += pbase32[left | (enc >> 7)];
                strRet += pbase32[(enc >> 2) & 31];
                left = (enc & 3) << 3;
                mode = 4;
                break;

            case 4: // we have two bits
                strRet += pbase32[left | (enc >> 5)];
                strRet += pbase32[enc & 31];
                mode = 0;
        }
    }

    static const int nPadding[5] = {0, 6, 4, 3, 1};
    if (mode)
    {
        strRet += pbase32[left];
        for (int n=0; n<nPadding[mode]; n++)
             strRet += '=';
    }

    return strRet;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
leaq 0x10(%rdi), %r12
movq %r12, (%rdi)
leaq 0xeeb(%rip), %rdx       # 0x13745
movq %rdx, %rsi
callq 0x5b6c
leaq 0x4(%r14), %rax
movabsq $-0x3333333333333333, %rcx # imm = 0xCCCCCCCCCCCCCCCD
mulq %rcx
leaq (%rdx,%rdx), %rsi
andq $-0x8, %rsi
movq %rbx, %rdi
movq %r12, (%rsp)
callq 0x35e0
testq %r14, %r14
jle 0x129e9
addq %r15, %r14
xorl %r13d, %r13d
xorl %ebp, %ebp
cmpl $0x4, %ebp
ja 0x129d8
movzbl (%r15), %r12d
movl %ebp, %eax
leaq 0x19e2(%rip), %rcx      # 0x14290
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl %r12d, %eax
shrl $0x3, %eax
leaq 0x1e3c(%rip), %rcx      # 0x14700
movsbl (%rax,%rcx), %esi
movq %rbx, %rdi
callq 0x3370
shll $0x2, %r12d
andl $0x1c, %r12d
movl $0x1, %ebp
jmp 0x129d5
movl %r12d, %eax
shrl $0x5, %eax
orl %r13d, %eax
leaq 0x1e0e(%rip), %rcx      # 0x14700
movsbl (%rax,%rcx), %esi
movq %rbx, %rdi
callq 0x3370
andl $0x1f, %r12d
leaq 0x1df7(%rip), %rax      # 0x14700
movsbl (%r12,%rax), %esi
xorl %ebp, %ebp
movq %rbx, %rdi
callq 0x3370
jmp 0x129d8
movl %r12d, %eax
shrl $0x4, %eax
orl %r13d, %eax
leaq 0x1dd3(%rip), %rcx      # 0x14700
movsbl (%rax,%rcx), %esi
movq %rbx, %rdi
callq 0x3370
addl %r12d, %r12d
andl $0x1e, %r12d
movl $0x3, %ebp
jmp 0x129d5
movl %r12d, %eax
shrl $0x7, %eax
orl %r13d, %eax
leaq 0x1da6(%rip), %rcx      # 0x14700
movsbl (%rax,%rcx), %esi
movq %rbx, %rdi
callq 0x3370
movl %r12d, %eax
shrl $0x2, %eax
andl $0x1f, %eax
leaq 0x1d8a(%rip), %rcx      # 0x14700
movsbl (%rax,%rcx), %esi
movq %rbx, %rdi
callq 0x3370
shll $0x3, %r12d
andl $0x18, %r12d
movl $0x4, %ebp
jmp 0x129d5
movl %r12d, %eax
shrl $0x6, %eax
orl %r13d, %eax
leaq 0x1d5f(%rip), %rcx      # 0x14700
movsbl (%rax,%rcx), %esi
movq %rbx, %rdi
callq 0x3370
movl %r12d, %eax
shrl %eax
andl $0x1f, %eax
leaq 0x1d44(%rip), %rcx      # 0x14700
movsbl (%rax,%rcx), %esi
movq %rbx, %rdi
callq 0x3370
shll $0x4, %r12d
andl $0x10, %r12d
movl $0x2, %ebp
movl %r12d, %r13d
incq %r15
cmpq %r14, %r15
jb 0x12898
movl %r13d, %eax
jmp 0x129ed
xorl %ebp, %ebp
xorl %eax, %eax
testl %ebp, %ebp
je 0x12a2d
leaq 0x1d08(%rip), %rcx      # 0x14700
movsbl (%rax,%rcx), %esi
movq %rbx, %rdi
callq 0x3370
movslq %ebp, %rax
leaq 0x18d2(%rip), %rcx      # 0x142e0
movl (%rcx,%rax,4), %eax
cmpl $0x2, %eax
movl $0x1, %ebp
cmovgel %eax, %ebp
movq %rbx, %rdi
movl $0x3d, %esi
callq 0x3370
decl %ebp
jne 0x12a1c
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x12a45
jmp 0x12a45
jmp 0x12a45
movq %rax, %r14
movq (%rbx), %rdi
cmpq (%rsp), %rdi
je 0x12a56
callq 0x33d0
movq %r14, %rdi
callq 0x3650