// File: /workspace/github_cpp_makefile_star2_O1/Infinidat[P]slimfastq/usrs.cpp
// Function: UsrSave::get_record()
bool UsrSave::get_record() {

    load_check();

#define CHECK_OVERFLOW rarely_if (m_cur >= m_end) return mid_rec_msg()

    if (m_cur >= m_end) return m_valid = false;

    int currec = m_cur;
    expect('@');
    int sanity = MAX_ID_LLEN;
    while (--  sanity and m_buff[m_cur] != '\n')
        m_cur ++ ;
    rarely_if( not sanity)
        // croak("record %llu: rec line too long", g_record_count);
        return get_oversized_record(currec);

    mp.rec_end = &(m_buff[m_cur]);
    CHECK_OVERFLOW ;
    expect('\n');

    UCHAR update_solid_pf = 0;
    if (m_solid) {
        rarely_if (m_last.solid_pf_gen != m_buff[m_cur])
            update_solid_pf = m_buff[m_cur];
        m_cur++;
    }

    mp.gen = &(m_buff[m_cur]);
    const int gi = m_cur ;
    sanity = MAX_GN_LLEN;
    while (-- sanity and m_buff[m_cur] != '\n')
        m_cur ++;

    rarely_if( not sanity)
        return get_oversized_record(currec);

    rarely_if(update_solid_pf)  // update only after last potential get_oversized_record
        update(ET_SOLPF_GEN, update_solid_pf);

    CHECK_OVERFLOW;
    rarely_if(m_llen != m_cur-gi)
        update(ET_LLEN, m_cur-gi);

    expect('\n');
    expect('+' );
    for (sanity = MAX_ID_LLEN;
         --  sanity and m_buff[m_cur] != '\n';
         m_cur ++ );
    CHECK_OVERFLOW;
    rarely_if(not sanity)
        croak("wierd second id at record %llu", g_record_count);

    expect('\n');

    if (m_solid) {
        rarely_if (m_last.solid_pf_qlt != m_buff[m_cur])
            update(ET_SOLPF_QLT, m_buff[m_cur]);

        m_cur++;
    }

    mp.qlt = &(m_buff[m_cur]);
    // m_cur += m_llen;
    m_qlen = 0;
    for (sanity = MAX_GN_LLEN;
         -- sanity and m_buff[m_cur+m_qlen] != '\n';
         m_qlen++);

    rarely_if( not sanity)
        return get_oversized_record(currec);

    rarely_if( m_qlen != m_llen)
        update(ET_QLEN, m_qlen);

    m_cur += m_qlen;
    CHECK_OVERFLOW;

    expect('\n');

    mp.prev_rec = mp.rec;
    mp.prev_rec_end = mp.rec_end;
    mp.rec = &(m_buff[currec+1]);

    return true;

#undef  CHECK_OVERFLOW
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
movl 0x124048(%rdi), %edi
movl 0x12404c(%rbx), %esi
leal 0x24000(%rdi), %eax
cmpl %esi, %eax
jge 0x8dac
movslq 0x124048(%rbx), %r14
movl 0x12404c(%rbx), %esi
cmpl %esi, %r14d
jge 0x8b5f
leal 0x1(%r14), %ebp
movl %ebp, 0x124048(%rbx)
movzbl 0x31(%rbx,%r14), %edx
cmpl $0x40, %edx
jne 0x8dd1
leaq 0x31(%rbx), %r15
movslq 0x124048(%rbx), %rdx
movl %edx, %eax
leaq (%rdx,%rbx), %rdi
addq $0x31, %rdi
xorl %ecx, %ecx
cmpb $0xa, (%rdi,%rcx)
je 0x8b6e
leal (%rax,%rcx), %r8d
incl %r8d
movl %r8d, 0x124048(%rbx)
incq %rcx
cmpl $0x1fff, %ecx           # imm = 0x1FFF
jne 0x8b3b
jmp 0x8d30
movb $0x0, 0x30(%rbx)
xorl %eax, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leal (%rdx,%rcx), %edi
addq %rbx, %rdx
addq %rcx, %rdx
addq $0x31, %rdx
movq %rdx, 0x1240a8(%rbx)
cmpl %edi, %esi
jle 0x8de9
leaq (%rax,%rcx), %rsi
incq %rsi
movl %esi, 0x124048(%rbx)
movzbl (%rdx), %edx
cmpl $0xa, %edx
jne 0x8db9
cmpb $0x1, 0x124064(%rbx)
jne 0x8bc7
movslq %esi, %rdx
movb 0x31(%rbx,%rdx), %dl
cmpb %dl, 0x28(%rbx)
jne 0x8bba
xorl %edx, %edx
addl %ecx, %eax
addl $0x2, %eax
movl %eax, 0x124048(%rbx)
jmp 0x8bc9
xorl %edx, %edx
movslq 0x124048(%rbx), %r12
leaq (%r15,%r12), %rax
movq %rax, 0x1240c0(%rbx)
leaq (%r12,%rbx), %rax
addq $0x31, %rax
leal 0x1(%r12), %ecx
xorl %esi, %esi
cmpb $0xa, (%rax,%rsi)
je 0x8c09
leal (%rcx,%rsi), %edi
movl %edi, 0x124048(%rbx)
incq %rsi
cmpl $0xffff, %esi           # imm = 0xFFFF
jne 0x8bea
jmp 0x8d30
testb %dl, %dl
jne 0x8dee
movl 0x124048(%rbx), %eax
cmpl 0x12404c(%rbx), %eax
jge 0x8e03
subl %r12d, %eax
cmpl %eax, 0x12405c(%rbx)
jne 0x8e08
movslq 0x124048(%rbx), %rcx
leaq 0x1(%rcx), %rax
movl %eax, 0x124048(%rbx)
movzbl 0x31(%rbx,%rcx), %edx
cmpl $0xa, %edx
jne 0x8db9
addl $0x2, %ecx
movl %ecx, 0x124048(%rbx)
movzbl 0x31(%rbx,%rax), %edx
cmpl $0x2b, %edx
jne 0x8e1a
movslq 0x124048(%rbx), %rcx
cmpb $0xa, 0x31(%rbx,%rcx)
jne 0x8c7a
xorl %edx, %edx
jmp 0x8ca4
leaq (%rcx,%rbx), %rax
addq $0x32, %rax
incl %ecx
xorl %esi, %esi
leal (%rcx,%rsi), %edx
movl %edx, 0x124048(%rbx)
cmpl $0x1ffe, %esi           # imm = 0x1FFE
sete %dl
je 0x8ca4
cmpb $0xa, (%rax,%rsi)
leaq 0x1(%rsi), %rsi
jne 0x8c86
movslq 0x124048(%rbx), %rax
cmpl 0x12404c(%rbx), %eax
jge 0x8e37
testb %dl, %dl
jne 0x8e3c
leaq 0x1(%rax), %rcx
movl %ecx, 0x124048(%rbx)
movzbl 0x31(%rbx,%rax), %edx
cmpl $0xa, %edx
jne 0x8db9
cmpb $0x1, 0x124064(%rbx)
jne 0x8cf4
movzbl 0x31(%rbx,%rcx), %eax
cmpb %al, 0x29(%rbx)
jne 0x8e5b
incl 0x124048(%rbx)
movslq 0x124048(%rbx), %rax
leaq (%r15,%rax), %rcx
movq %rcx, 0x1240c8(%rbx)
movl $0x0, 0x124060(%rbx)
leaq (%rax,%rbx), %rcx
addq $0x31, %rcx
xorl %eax, %eax
cmpb $0xa, (%rcx,%rax)
je 0x8d48
incq %rax
movl %eax, 0x124060(%rbx)
cmpl $0xffff, %eax           # imm = 0xFFFF
jne 0x8d1a
movq %rbx, %rdi
movl %r14d, %esi
movl $0x1, %edx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x88f0
cmpl %eax, 0x12405c(%rbx)
jne 0x8e41
movslq 0x124060(%rbx), %rcx
movslq 0x124048(%rbx), %rax
addq %rcx, %rax
movl %eax, 0x124048(%rbx)
cmpl 0x12404c(%rbx), %eax
jge 0x8e56
leal 0x1(%rax), %ecx
movl %ecx, 0x124048(%rbx)
movzbl 0x31(%rbx,%rax), %edx
cmpl $0xa, %edx
jne 0x8db9
movups 0x1240a0(%rbx), %xmm0
movups %xmm0, 0x1240b0(%rbx)
movslq %ebp, %rax
addq %rax, %r15
movq %r15, 0x1240a0(%rbx)
movb $0x1, %al
jmp 0x8b65
movq %rbx, %rdx
callq 0x2b07
jmp 0x8af9
leaq 0x73e0(%rip), %rax      # 0x101a0
movq (%rax), %rcx
leaq 0x257b(%rip), %rdi      # 0xb345
movl $0xa, %esi
jmp 0x8e30
leaq 0x73c8(%rip), %rax      # 0x101a0
movq (%rax), %rcx
leaq 0x2563(%rip), %rdi      # 0xb345
movl $0x40, %esi
jmp 0x8e30
callq 0x2b5b
movzbl %dl, %edx
movq %rbx, %rdi
movl $0x2, %esi
callq 0x87a8
jmp 0x8c11
callq 0x2b61
movzwl %ax, %edx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x87a8
jmp 0x8c32
leaq 0x737f(%rip), %rax      # 0x101a0
movq (%rax), %rcx
leaq 0x251a(%rip), %rdi      # 0xb345
movl $0x2b, %esi
xorl %eax, %eax
callq 0x2320
callq 0x2b67
callq 0x2b73
movzwl %ax, %edx
movq %rbx, %rdi
movl $0x1, %esi
callq 0x87a8
jmp 0x8d54
callq 0x2b6d
movzwl %ax, %edx
movq %rbx, %rdi
movl $0x3, %esi
callq 0x87a8
jmp 0x8cee