// File: BenLangmead[P]bowtie/./aligner.h
// Function: UnpairedAlignerV2<EbwtRangeSource>::report(Range const&, unsigned int, unsigned int, unsigned int)
inline bool report(const Range& ra,
			TIndexOffU first,
			TIndexOffU second,
	                   uint32_t tlen)
	{
		bool ebwtFw = ra.ebwt->fw();
		params_->setFw(ra.fw);
		return params_->reportHit(
				ra.fw ? (ebwtFw? bufa_->patFw    : bufa_->patFwRev) :
				        (ebwtFw? bufa_->patRc    : bufa_->patRcRev),
				ra.fw ? (ebwtFw? &bufa_->qual    : &bufa_->qualRev) :
				        (ebwtFw? &bufa_->qualRev : &bufa_->qual),
				&bufa_->name,
				ebwtFw,
				ra.mms,                   // mismatch positions
				ra.refcs,                 // reference characters for mms
				ra.numMms,                // # mismatches
				make_pair(first, second), // position
				make_pair<TIndexOffU,TIndexOffU>(0, 0),          // (bogus) mate position
				true,                     // (bogus) mate orientation
				0,                        // (bogus) mate length
				make_pair(ra.top, ra.bot),// arrows
				tlen,                     // textlen
				alen_,                    // qlen
				ra.stratum,               // alignment stratum
				ra.cost,                  // cost, including qual penalty
				ra.bot - ra.top - 1,      // # other hits
				(uint32_t)patsrc_->rdid(),// pattern id
				bufa_->seed,              // pseudo-random seed
				0);                       // mate (0 = unpaired)
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x158, %rsp            # imm = 0x158
movq %rdi, -0x30(%rbp)
movq %rsi, -0x38(%rbp)
movl %edx, -0x3c(%rbp)
movl %ecx, -0x40(%rbp)
movl %r8d, -0x44(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x38(%rbp), %rax
movq 0x58(%rax), %rdi
callq 0x402a0
movb %al, %cl
movq -0x78(%rbp), %rax
andb $0x1, %cl
movb %cl, -0x45(%rbp)
movq 0x70(%rax), %rdi
movq -0x38(%rbp), %rax
movb 0x14(%rax), %al
andb $0x1, %al
movzbl %al, %esi
callq 0x49a40
movq -0x78(%rbp), %rax
movq 0x70(%rax), %rax
movq %rax, -0x70(%rbp)
movq -0x38(%rbp), %rax
testb $0x1, 0x14(%rax)
je 0x4c0b5
testb $0x1, -0x45(%rbp)
je 0x4c096
movq -0x78(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x80(%rbp)
jmp 0x4c0a8
movq -0x78(%rbp), %rax
movq 0x18(%rax), %rax
addq $0x90, %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq %rax, -0x88(%rbp)
jmp 0x4c0f3
testb $0x1, -0x45(%rbp)
je 0x4c0d0
movq -0x78(%rbp), %rax
movq 0x18(%rax), %rax
addq $0x30, %rax
movq %rax, -0x90(%rbp)
jmp 0x4c0e5
movq -0x78(%rbp), %rax
movq 0x18(%rax), %rax
addq $0xc0, %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x38(%rbp), %rax
testb $0x1, 0x14(%rax)
je 0x4c14b
testb $0x1, -0x45(%rbp)
je 0x4c126
movq -0x78(%rbp), %rax
movq 0x18(%rax), %rax
addq $0x60, %rax
movq %rax, -0xa0(%rbp)
jmp 0x4c13b
movq -0x78(%rbp), %rax
movq 0x18(%rax), %rax
addq $0xf0, %rax
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
movq %rax, -0xa8(%rbp)
jmp 0x4c189
testb $0x1, -0x45(%rbp)
je 0x4c168
movq -0x78(%rbp), %rax
movq 0x18(%rax), %rax
addq $0xf0, %rax
movq %rax, -0xb0(%rbp)
jmp 0x4c17b
movq -0x78(%rbp), %rax
movq 0x18(%rax), %rax
addq $0x60, %rax
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x78(%rbp), %rax
movq -0xa8(%rbp), %rcx
movq %rcx, -0xf8(%rbp)
movq 0x18(%rax), %rax
addq $0x150, %rax            # imm = 0x150
movq %rax, -0xf0(%rbp)
movb -0x45(%rbp), %al
movb %al, -0xf9(%rbp)
movq -0x38(%rbp), %rax
addq $0x18, %rax
movq %rax, -0xe8(%rbp)
movq -0x38(%rbp), %rax
addq $0x38, %rax
movq %rax, -0xd8(%rbp)
movq -0x38(%rbp), %rax
movl 0x10(%rax), %eax
movq %rax, -0xd0(%rbp)
leaq -0x3c(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x4cb80
movq %rax, -0x50(%rbp)
movl $0x0, -0x5c(%rbp)
movl $0x0, -0x60(%rbp)
leaq -0x5c(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x4d4c0
movq %rax, -0x58(%rbp)
movq -0x38(%rbp), %rdi
movq -0x38(%rbp), %rsi
addq $0x4, %rsi
callq 0x4d4f0
movq %rax, %rcx
movq -0x78(%rbp), %rax
movq %rcx, -0x68(%rbp)
movl -0x44(%rbp), %r12d
movl 0x20(%rax), %r15d
movq -0x38(%rbp), %rcx
movl 0xc(%rcx), %r14d
movq -0x38(%rbp), %rcx
movw 0x8(%rcx), %bx
movq -0x38(%rbp), %rcx
movl 0x4(%rcx), %ecx
movq -0x38(%rbp), %rdx
subl (%rdx), %ecx
subl $0x1, %ecx
movl %ecx, -0xdc(%rbp)
movq 0x10(%rax), %rdi
callq 0x499a0
movq -0x78(%rbp), %rsi
movb -0xf9(%rbp), %r8b
movq -0x70(%rbp), %rdi
movq -0xf8(%rbp), %rdx
movq -0xf0(%rbp), %rcx
movq -0xe8(%rbp), %r9
movl -0xdc(%rbp), %r11d
movq %rax, %r10
movq -0xd8(%rbp), %rax
movq 0x18(%rsi), %rsi
movl 0x18c(%rsi), %esi
movl %esi, -0xb4(%rbp)
movq -0x50(%rbp), %rsi
movq %rsi, -0xc8(%rbp)
movq -0x58(%rbp), %rsi
movq %rsi, -0xc0(%rbp)
movq -0x68(%rbp), %r13
xorl %esi, %esi
movq -0x98(%rbp), %rsi
andb $0x1, %r8b
movzbl %r8b, %r8d
movq %rax, (%rsp)
movq -0xd0(%rbp), %rax
movq %rax, 0x8(%rsp)
movq -0xc8(%rbp), %rax
movq %rax, 0x10(%rsp)
movq -0xc0(%rbp), %rax
movq %rax, 0x18(%rsp)
movl -0xb4(%rbp), %eax
movl $0x1, 0x20(%rsp)
movl $0x0, 0x28(%rsp)
movq %r13, 0x30(%rsp)
movl %r12d, 0x38(%rsp)
movl %r15d, 0x40(%rsp)
movl %r14d, 0x48(%rsp)
movzwl %bx, %ebx
movl %ebx, 0x50(%rsp)
movl %r11d, 0x58(%rsp)
movl %r10d, 0x60(%rsp)
movl %eax, 0x68(%rsp)
movl $0x0, 0x70(%rsp)
callq 0x4cbe0
andb $0x1, %al
addq $0x158, %rsp            # imm = 0x158
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nopl (%rax)