// File: BenLangmead[P]bowtie/./multikey_qsort.h
// Function: bool assertPartitionedSuf2<S2bDnaString>(S2bDnaString const&, unsigned long*, unsigned long, int, int, unsigned long, unsigned long, unsigned long)
bool assertPartitionedSuf2(
	const THost& host,
	TIndexOffU *s,
	size_t slen,
	int hi,
	int pivot,
	size_t begin,
	size_t end,
	size_t depth)
{
	size_t hlen = host.length();
	int state = 0; // 0 -> < section, 1 -> = section, 2 -> > section
	for(size_t i = begin; i < end; i++) {
		switch(state) {
		case 0:
			if       (CHAR_AT_SUF(i, depth) == pivot) { state = 1; break; }
			else if  (CHAR_AT_SUF(i, depth) > pivot)  { state = 2; break; }
			assert_lt(CHAR_AT_SUF(i, depth), pivot);  break;
		case 1:
			if       (CHAR_AT_SUF(i, depth) > pivot)  { state = 2; break; }
			assert_eq(CHAR_AT_SUF(i, depth), pivot);  break;
		case 2:
			assert_gt(CHAR_AT_SUF(i, depth), pivot);  break;
		}
	}
	return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movl %r8d, -0x20(%rbp)
movq %r9, -0x28(%rbp)
movq -0x8(%rbp), %rdi
callq 0x17c60
movq %rax, -0x30(%rbp)
movl $0x0, -0x34(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
cmpq 0x10(%rbp), %rax
jae 0x3a580
movl -0x34(%rbp), %eax
movl %eax, -0x44(%rbp)
testl %eax, %eax
je 0x39fdf
jmp 0x39fc0
movl -0x44(%rbp), %eax
subl $0x1, %eax
je 0x3a1c6
jmp 0x39fce
movl -0x44(%rbp), %eax
subl $0x2, %eax
je 0x3a415
jmp 0x3a56d
movq 0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x40(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
cmpq -0x30(%rbp), %rax
jae 0x3a016
movq -0x8(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x10(%rbp), %rax
movq -0x40(%rbp), %rcx
addq (%rax,%rcx,8), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x48(%rbp)
jmp 0x3a01c
movl -0x1c(%rbp), %eax
movl %eax, -0x48(%rbp)
movl -0x48(%rbp), %eax
cmpl -0x20(%rbp), %eax
jne 0x3a030
movl $0x1, -0x34(%rbp)
jmp 0x3a56d
movq 0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x40(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
cmpq -0x30(%rbp), %rax
jae 0x3a067
movq -0x8(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x10(%rbp), %rax
movq -0x40(%rbp), %rcx
addq (%rax,%rcx,8), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x4c(%rbp)
jmp 0x3a06d
movl -0x1c(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x20(%rbp), %eax
jle 0x3a081
movl $0x2, -0x34(%rbp)
jmp 0x3a56d
jmp 0x3a083
movq 0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x40(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
cmpq -0x30(%rbp), %rax
jae 0x3a0ba
movq -0x8(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x10(%rbp), %rax
movq -0x40(%rbp), %rcx
addq (%rax,%rcx,8), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x50(%rbp)
jmp 0x3a0c0
movl -0x1c(%rbp), %eax
movl %eax, -0x50(%rbp)
movl -0x50(%rbp), %eax
cmpl -0x20(%rbp), %eax
jl 0x3a1c1
movq 0xfeed(%rip), %rdi      # 0x49fc0
leaq 0x516d(%rip), %rsi      # 0x3f247
callq 0x5360
movq %rax, -0x58(%rbp)
movq 0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x40(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
cmpq -0x30(%rbp), %rax
jae 0x3a11a
movq -0x8(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x10(%rbp), %rax
movq -0x40(%rbp), %rcx
addq (%rax,%rcx,8), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x5c(%rbp)
jmp 0x3a120
movl -0x1c(%rbp), %eax
movl %eax, -0x5c(%rbp)
movq -0x58(%rbp), %rdi
movl -0x5c(%rbp), %esi
callq 0x5750
movq %rax, %rdi
leaq 0x5127(%rip), %rsi      # 0x3f25d
callq 0x5360
movq %rax, %rdi
movl -0x20(%rbp), %esi
callq 0x5750
movq %rax, %rdi
leaq 0x7468(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0xfe21(%rip), %rsi      # 0x49f80
callq 0x53c0
movq 0xfe55(%rip), %rdi      # 0x49fc0
leaq 0x7dbc(%rip), %rsi      # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x6609(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x11b, %esi            # imm = 0x11B
callq 0x5750
movq %rax, %rdi
movq 0xfde3(%rip), %rsi      # 0x49f80
callq 0x53c0
leaq 0x64c1(%rip), %rdi      # 0x4066a
leaq 0x7d7e(%rip), %rsi      # 0x41f2e
movl $0x11b, %edx            # imm = 0x11B
leaq 0x8bd7(%rip), %rcx      # 0x42d93
callq 0x51e0
jmp 0x3a56d
movq 0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x40(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
cmpq -0x30(%rbp), %rax
jae 0x3a1fd
movq -0x8(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x10(%rbp), %rax
movq -0x40(%rbp), %rcx
addq (%rax,%rcx,8), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x60(%rbp)
jmp 0x3a203
movl -0x1c(%rbp), %eax
movl %eax, -0x60(%rbp)
movl -0x60(%rbp), %eax
cmpl -0x20(%rbp), %eax
jle 0x3a217
movl $0x2, -0x34(%rbp)
jmp 0x3a56d
movq 0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x40(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
cmpq -0x30(%rbp), %rax
jae 0x3a24e
movq -0x8(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x10(%rbp), %rax
movq -0x40(%rbp), %rcx
addq (%rax,%rcx,8), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x64(%rbp)
jmp 0x3a254
movl -0x1c(%rbp), %eax
movl %eax, -0x64(%rbp)
movl -0x64(%rbp), %eax
cmpl -0x20(%rbp), %eax
je 0x3a410
movq 0xfd59(%rip), %rdi      # 0x49fc0
leaq 0x4eab(%rip), %rsi      # 0x3f119
callq 0x5360
movq %rax, -0x70(%rbp)
movq 0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x40(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
cmpq -0x30(%rbp), %rax
jae 0x3a2ae
movq -0x8(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x10(%rbp), %rax
movq -0x40(%rbp), %rcx
addq (%rax,%rcx,8), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x74(%rbp)
jmp 0x3a2b4
movl -0x1c(%rbp), %eax
movl %eax, -0x74(%rbp)
movq -0x70(%rbp), %rdi
movl -0x74(%rbp), %esi
callq 0x5750
movq %rax, %rdi
leaq 0x4e65(%rip), %rsi      # 0x3f12f
callq 0x5360
movq %rax, %rdi
leaq -0x21af9(%rip), %rsi    # 0x187e0
callq 0x5120
movq %rax, -0x80(%rbp)
movq 0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x40(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
cmpq -0x30(%rbp), %rax
jae 0x3a31c
movq -0x8(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x10(%rbp), %rax
movq -0x40(%rbp), %rcx
addq (%rax,%rcx,8), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x84(%rbp)
jmp 0x3a325
movl -0x1c(%rbp), %eax
movl %eax, -0x84(%rbp)
movq -0x80(%rbp), %rdi
movl -0x84(%rbp), %esi
callq 0x5750
movq %rax, %rdi
leaq -0x21b2e(%rip), %rsi    # 0x18810
callq 0x5120
movq %rax, %rdi
leaq 0x4de7(%rip), %rsi      # 0x3f134
callq 0x5360
movq %rax, %rdi
movl -0x20(%rbp), %esi
callq 0x5750
movq %rax, %rdi
leaq 0x4dc8(%rip), %rsi      # 0x3f12f
callq 0x5360
movq %rax, %rdi
leaq -0x21b96(%rip), %rsi    # 0x187e0
callq 0x5120
movq %rax, %rdi
movl -0x20(%rbp), %esi
callq 0x5750
movq %rax, %rdi
leaq -0x21b80(%rip), %rsi    # 0x18810
callq 0x5120
movq %rax, %rdi
leaq 0x7219(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0xfbd2(%rip), %rsi      # 0x49f80
callq 0x53c0
movq 0xfc06(%rip), %rdi      # 0x49fc0
leaq 0x7b6d(%rip), %rsi      # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x63ba(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x11e, %esi            # imm = 0x11E
callq 0x5750
movq %rax, %rdi
movq 0xfb94(%rip), %rsi      # 0x49f80
callq 0x53c0
leaq 0x6272(%rip), %rdi      # 0x4066a
leaq 0x7b2f(%rip), %rsi      # 0x41f2e
movl $0x11e, %edx            # imm = 0x11E
leaq 0x8988(%rip), %rcx      # 0x42d93
callq 0x51e0
jmp 0x3a56d
movq 0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x40(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
cmpq -0x30(%rbp), %rax
jae 0x3a44f
movq -0x8(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x10(%rbp), %rax
movq -0x40(%rbp), %rcx
addq (%rax,%rcx,8), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x88(%rbp)
jmp 0x3a458
movl -0x1c(%rbp), %eax
movl %eax, -0x88(%rbp)
movl -0x88(%rbp), %eax
cmpl -0x20(%rbp), %eax
jg 0x3a56b
movq 0xfb52(%rip), %rdi      # 0x49fc0
leaq 0x4c83(%rip), %rsi      # 0x3f0f8
callq 0x5360
movq %rax, -0x90(%rbp)
movq 0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq -0x40(%rbp), %rdx
addq (%rcx,%rdx,8), %rax
cmpq -0x30(%rbp), %rax
jae 0x3a4bb
movq -0x8(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x10(%rbp), %rax
movq -0x40(%rbp), %rcx
addq (%rax,%rcx,8), %rsi
callq 0x356a0
movsbl %al, %eax
movl %eax, -0x94(%rbp)
jmp 0x3a4c4
movl -0x1c(%rbp), %eax
movl %eax, -0x94(%rbp)
movq -0x90(%rbp), %rdi
movl -0x94(%rbp), %esi
callq 0x5750
movq %rax, %rdi
leaq 0x4c2e(%rip), %rsi      # 0x3f10e
callq 0x5360
movq %rax, %rdi
movl -0x20(%rbp), %esi
callq 0x5750
movq %rax, %rdi
leaq 0x70be(%rip), %rsi      # 0x415b8
callq 0x5360
movq %rax, %rdi
movq 0xfa77(%rip), %rsi      # 0x49f80
callq 0x53c0
movq 0xfaab(%rip), %rdi      # 0x49fc0
leaq 0x7a12(%rip), %rsi      # 0x41f2e
callq 0x5360
movq %rax, %rdi
leaq 0x625f(%rip), %rsi      # 0x4078a
callq 0x5360
movq %rax, %rdi
movl $0x120, %esi            # imm = 0x120
callq 0x5750
movq %rax, %rdi
movq 0xfa39(%rip), %rsi      # 0x49f80
callq 0x53c0
leaq 0x6117(%rip), %rdi      # 0x4066a
leaq 0x79d4(%rip), %rsi      # 0x41f2e
movl $0x120, %edx            # imm = 0x120
leaq 0x882d(%rip), %rcx      # 0x42d93
callq 0x51e0
jmp 0x3a56d
jmp 0x3a56f
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x39fa6
movb $0x1, %al
andb $0x1, %al
addq $0xa0, %rsp
popq %rbp
retq
nopl (%rax)