// File: chhylp123[P]hifiasm/inter.cpp
// Function: select_clean_chain(kv_ul_ov_t*, ul_ov_t*, long, long, asg64_v*)
int64_t select_clean_chain(kv_ul_ov_t *idx, ul_ov_t *res_a, int64_t res_n, int64_t ulid_local, asg64_v *b64)
{
	ul_ov_t kp, *m, *p, *idx_a = idx->a; uint64_t om, ovlp, min_sc, max_sc, ok, z;
	int64_t k, i, idx_n = idx->n, mm, n_mchain; 
	for (k = 0, mm = idx_n>>1; k < mm; k++) {
        kp = idx_a[k]; idx_a[k] = idx_a[idx_n-k-1]; idx_a[idx_n-k-1] = kp;
		idx_a[k].tn = idx_a[idx_n-k-1].tn = 1;
    }
	if(idx_n&1) idx_a[k].tn = 1;
	
	for (k = 0; k < idx_n; k++) {//filter too close chains
        m = &(idx_a[k]); om = m->qe - m->qs; ///current chain
        // fprintf(stderr, "k::%ld[M::%s::sc->%u] q::[%u, %u), set::%u\n", k, __func__, m->qn, m->qs, m->qe, m->tn);
        if(m->tn == 0) continue;
        for (i = k-1; i >= 0; i--) {
            p = &(idx_a[i]);
            ovlp = ((MIN(m->qe, p->qe) > MAX(m->qs, p->qs))? (MIN(m->qe, p->qe) - MAX(m->qs, p->qs)):0);
            if(ovlp == 0) continue;
            min_sc = MIN(p->qn, m->qn); max_sc = MAX(p->qn, m->qn);
            ok = p->qe - p->qs; ok = MAX(ok, om);
            if(min_sc < (max_sc*0.98)) break;
            if((ovlp > GC_OFFSET_POS) && (min_sc > (max_sc*0.98)) && (ovlp > (ok*0.8))) {
                // fprintf(stderr, "k::%ld[M::%s::i->%ld] min_sc::%ld, max_sc::%ld\n", 
                // k, __func__, i, min_sc, max_sc);
                m->tn = p->tn = 0;
            }
        }

        for (i = k+1; i < idx_n; i++) {
            p = &(idx_a[i]);
            ovlp = ((MIN(m->qe, p->qe) > MAX(m->qs, p->qs))? (MIN(m->qe, p->qe) - MAX(m->qs, p->qs)):0);
            if(ovlp == 0) continue;
            min_sc = MIN(p->qn, m->qn); max_sc = MAX(p->qn, m->qn);
            ok = p->qe - p->qs; ok = MAX(ok, om);
            if(min_sc < (max_sc*0.98)) break;
            if((ovlp > GC_OFFSET_POS) && (min_sc > (max_sc*0.98)) && (ovlp > (ok*0.8))) {
                // fprintf(stderr, "k::%ld[M::%s::i->%ld] min_sc::%ld, max_sc::%ld\n", 
                // k, __func__, i, min_sc, max_sc);
                m->tn = p->tn = 0;
            }
        }
    }
	
    for (k = i = 0; k < idx_n; k++) {
        m = &(idx_a[k]); if(m->tn == 0) continue;
        idx_a[i++] = idx_a[k];
    }
    // fprintf(stderr, "[M::%s::] gb_n0::%ld, gb_n::%ld\n", __func__, gb_n, i);
    idx->n = idx_n = i;
    for (k = n_mchain = 0; k < idx_n; k++) {
        m = &(idx_a[k]); om = m->qe - m->qs;
        for (i = 0; i < n_mchain; i++) {
            p = &(idx_a[i]);
            ovlp = ((MIN(m->qe, p->qe) > MAX(m->qs, p->qs))? (MIN(m->qe, p->qe) - MAX(m->qs, p->qs)):0);
            if(ovlp == 0) continue;
            ok = p->qe - p->qs;
            if((ovlp > ok*0.1) || (ovlp > om*0.1)) break;
        }
        if(i < n_mchain) continue;
        idx_a[n_mchain++] = idx_a[k];
    }
    idx->n = idx_n = n_mchain;

	b64->n = idx->n; kv_resize(uint64_t, *b64, b64->n);
	for (k = 0; k < idx_n; k++) {
		om = idx_a[k].ts; om <<= 32; om |= k; b64->a[k] = om;
	}
	radix_sort_gfa64(b64->a, b64->a + b64->n);
	for (k = res_n = 0; k < idx_n; k++) {
		m = &(idx_a[(uint32_t)(b64->a[k])]); 
		for (z = m->ts, ok = SEC_MODE; z < m->te; z++) {
			res_a[res_n] = res_a[z]; res_a[res_n].el = 1; 
			res_a[res_n].tn |= ((uint32_t)(0x80000000));
			res_a[res_n].sec = ok; 
			res_a[res_n].qn = ((idx_n<=1)?ulid_local:res_n);
			ok = res_n; res_n++;
		}
	}

	if(idx_n > 1) {
		radix_sort_ul_ov_srt_qe(res_a, res_a + res_n);
		for (i = 1, k = 0; i <= res_n; i++) {
			if (i == res_n || res_a[i].qe != res_a[k].qe) {
				if(i-k>1) radix_sort_ul_ov_srt_qs(res_a+k, res_a+i);
				k = i;
			}
		}
		b64->n = res_n; kv_resize(uint64_t, *b64, b64->n);
		for (i = 0; i < res_n; i++) b64->a[res_a[i].qn] = i;
		for (i = 0; i < res_n; i++) {
			if(res_a[b64->a[i]].sec != SEC_MODE) {
				res_a[b64->a[i]].sec = b64->a[res_a[b64->a[i]].sec];
			}
			res_a[b64->a[i]].qn = ulid_local;
		}
	}
	return res_n;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0xa8(%rbp)
movq $0x0, -0x98(%rbp)
movq -0xa8(%rbp), %rax
sarq %rax
movq %rax, -0xb0(%rbp)
movq -0x98(%rbp), %rax
cmpq -0xb0(%rbp), %rax
jge 0x2b9ca8
movq -0x60(%rbp), %rax
imulq $0x1c, -0x98(%rbp), %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq %rcx, -0x44(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x3c(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0x34(%rbp)
movl 0x18(%rax), %eax
movl %eax, -0x2c(%rbp)
movq -0x60(%rbp), %rcx
movq -0xa8(%rbp), %rax
subq -0x98(%rbp), %rax
subq $0x1, %rax
imulq $0x1c, %rax, %rax
addq %rax, %rcx
movq -0x60(%rbp), %rax
imulq $0x1c, -0x98(%rbp), %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movl 0x18(%rcx), %ecx
movl %ecx, 0x18(%rax)
movq -0x60(%rbp), %rax
movq -0xa8(%rbp), %rcx
subq -0x98(%rbp), %rcx
subq $0x1, %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movq -0x44(%rbp), %rcx
movq %rcx, (%rax)
movq -0x3c(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x34(%rbp), %rcx
movq %rcx, 0x10(%rax)
movl -0x2c(%rbp), %ecx
movl %ecx, 0x18(%rax)
movq -0x60(%rbp), %rax
movq -0xa8(%rbp), %rcx
subq -0x98(%rbp), %rcx
subq $0x1, %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movl $0x1, 0xc(%rax)
movq -0x60(%rbp), %rax
imulq $0x1c, -0x98(%rbp), %rcx
addq %rcx, %rax
movl $0x1, 0xc(%rax)
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x2b9b95
movq -0xa8(%rbp), %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0x2b9ccf
movq -0x60(%rbp), %rax
imulq $0x1c, -0x98(%rbp), %rcx
addq %rcx, %rax
movl $0x1, 0xc(%rax)
movq $0x0, -0x98(%rbp)
movq -0x98(%rbp), %rax
cmpq -0xa8(%rbp), %rax
jge 0x2ba39d
movq -0x60(%rbp), %rax
imulq $0x1c, -0x98(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x50(%rbp), %rcx
subl 0x4(%rcx), %eax
movl %eax, %eax
movq %rax, -0x68(%rbp)
movq -0x50(%rbp), %rax
cmpl $0x0, 0xc(%rax)
jne 0x2b9d24
jmp 0x2ba386
movq -0x98(%rbp), %rax
subq $0x1, %rax
movq %rax, -0xa0(%rbp)
cmpq $0x0, -0xa0(%rbp)
jl 0x2ba051
movq -0x60(%rbp), %rax
imulq $0x1c, -0xa0(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0x2b9d76
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xbc(%rbp)
jmp 0x2b9d83
movq -0x58(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xbc(%rbp)
movl -0xbc(%rbp), %eax
movl %eax, -0xc0(%rbp)
movq -0x50(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0x2b9dae
movq -0x50(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0xc4(%rbp)
jmp 0x2b9dbb
movq -0x58(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0xc4(%rbp)
movl -0xc0(%rbp), %eax
movl -0xc4(%rbp), %ecx
cmpl %ecx, %eax
jbe 0x2b9e45
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0x2b9dea
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xc8(%rbp)
jmp 0x2b9df7
movq -0x58(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xc8(%rbp)
movl -0xc8(%rbp), %eax
movl %eax, -0xcc(%rbp)
movq -0x50(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0x2b9e22
movq -0x50(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0xd0(%rbp)
jmp 0x2b9e2f
movq -0x58(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0xd0(%rbp)
movl -0xcc(%rbp), %eax
movl -0xd0(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0xd4(%rbp)
jmp 0x2b9e4f
xorl %eax, %eax
movl %eax, -0xd4(%rbp)
jmp 0x2b9e4f
movl -0xd4(%rbp), %eax
movl %eax, %eax
movq %rax, -0x70(%rbp)
cmpq $0x0, -0x70(%rbp)
jne 0x2b9e67
jmp 0x2ba03a
movq -0x58(%rbp), %rax
movl (%rax), %eax
movq -0x50(%rbp), %rcx
cmpl (%rcx), %eax
ja 0x2b9e83
movq -0x58(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xd8(%rbp)
jmp 0x2b9e8f
movq -0x50(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xd8(%rbp)
movl -0xd8(%rbp), %eax
movl %eax, %eax
movq %rax, -0x78(%rbp)
movq -0x58(%rbp), %rax
movl (%rax), %eax
movq -0x50(%rbp), %rcx
cmpl (%rcx), %eax
jb 0x2b9eb7
movq -0x58(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xdc(%rbp)
jmp 0x2b9ec3
movq -0x50(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xdc(%rbp)
movl -0xdc(%rbp), %eax
movl %eax, %eax
movq %rax, -0x80(%rbp)
movq -0x58(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x58(%rbp), %rcx
subl 0x4(%rcx), %eax
movl %eax, %eax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
cmpq -0x68(%rbp), %rax
jb 0x2b9f03
movq -0x88(%rbp), %rax
movq %rax, -0xe8(%rbp)
jmp 0x2b9f0e
movq -0x68(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rax
movq %rax, -0x88(%rbp)
movaps 0xc80ed(%rip), %xmm3    # 0x382010
movq -0x78(%rbp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
movapd 0xc80ec(%rip), %xmm2    # 0x382020
subpd %xmm2, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movq -0x80(%rbp), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
subpd %xmm2, %xmm0
movaps %xmm0, %xmm2
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm2, %xmm0
movsd 0xd67d5(%rip), %xmm2    # 0x390738
mulsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2b9f72
jmp 0x2ba051
cmpq $0x8, -0x70(%rbp)
jbe 0x2ba038
movq -0x78(%rbp), %xmm0
movaps 0xc8087(%rip), %xmm3    # 0x382010
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0xc808b(%rip), %xmm2    # 0x382020
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq -0x80(%rbp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
movsd 0xd6774(%rip), %xmm2    # 0x390738
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x2ba038
movq -0x70(%rbp), %xmm0
movaps 0xc8036(%rip), %xmm3    # 0x382010
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0xc803a(%rip), %xmm2    # 0x382020
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq -0x88(%rbp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
movsd 0xc8218(%rip), %xmm2    # 0x382230
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x2ba038
movq -0x58(%rbp), %rax
movl $0x0, 0xc(%rax)
movq -0x50(%rbp), %rax
movl $0x0, 0xc(%rax)
jmp 0x2ba03a
movq -0xa0(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xa0(%rbp)
jmp 0x2b9d36
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
cmpq -0xa8(%rbp), %rax
jge 0x2ba384
movq -0x60(%rbp), %rax
imulq $0x1c, -0xa0(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0x2ba0a9
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xec(%rbp)
jmp 0x2ba0b6
movq -0x58(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xec(%rbp)
movl -0xec(%rbp), %eax
movl %eax, -0xf0(%rbp)
movq -0x50(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0x2ba0e1
movq -0x50(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0xf4(%rbp)
jmp 0x2ba0ee
movq -0x58(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0xf4(%rbp)
movl -0xf0(%rbp), %eax
movl -0xf4(%rbp), %ecx
cmpl %ecx, %eax
jbe 0x2ba178
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0x2ba11d
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xf8(%rbp)
jmp 0x2ba12a
movq -0x58(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xf8(%rbp)
movl -0xf8(%rbp), %eax
movl %eax, -0xfc(%rbp)
movq -0x50(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0x2ba155
movq -0x50(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x100(%rbp)
jmp 0x2ba162
movq -0x58(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x100(%rbp)
movl -0xfc(%rbp), %eax
movl -0x100(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x104(%rbp)
jmp 0x2ba182
xorl %eax, %eax
movl %eax, -0x104(%rbp)
jmp 0x2ba182
movl -0x104(%rbp), %eax
movl %eax, %eax
movq %rax, -0x70(%rbp)
cmpq $0x0, -0x70(%rbp)
jne 0x2ba19a
jmp 0x2ba36d
movq -0x58(%rbp), %rax
movl (%rax), %eax
movq -0x50(%rbp), %rcx
cmpl (%rcx), %eax
ja 0x2ba1b6
movq -0x58(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x108(%rbp)
jmp 0x2ba1c2
movq -0x50(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x108(%rbp)
movl -0x108(%rbp), %eax
movl %eax, %eax
movq %rax, -0x78(%rbp)
movq -0x58(%rbp), %rax
movl (%rax), %eax
movq -0x50(%rbp), %rcx
cmpl (%rcx), %eax
jb 0x2ba1ea
movq -0x58(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x10c(%rbp)
jmp 0x2ba1f6
movq -0x50(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x10c(%rbp)
movl -0x10c(%rbp), %eax
movl %eax, %eax
movq %rax, -0x80(%rbp)
movq -0x58(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x58(%rbp), %rcx
subl 0x4(%rcx), %eax
movl %eax, %eax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
cmpq -0x68(%rbp), %rax
jb 0x2ba236
movq -0x88(%rbp), %rax
movq %rax, -0x118(%rbp)
jmp 0x2ba241
movq -0x68(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x118(%rbp), %rax
movq %rax, -0x88(%rbp)
movaps 0xc7dba(%rip), %xmm3    # 0x382010
movq -0x78(%rbp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
movapd 0xc7db9(%rip), %xmm2    # 0x382020
subpd %xmm2, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movq -0x80(%rbp), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
subpd %xmm2, %xmm0
movaps %xmm0, %xmm2
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm2, %xmm0
movsd 0xd64a2(%rip), %xmm2    # 0x390738
mulsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2ba2a5
jmp 0x2ba384
cmpq $0x8, -0x70(%rbp)
jbe 0x2ba36b
movq -0x78(%rbp), %xmm0
movaps 0xc7d54(%rip), %xmm3    # 0x382010
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0xc7d58(%rip), %xmm2    # 0x382020
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq -0x80(%rbp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
movsd 0xd6441(%rip), %xmm2    # 0x390738
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x2ba36b
movq -0x70(%rbp), %xmm0
movaps 0xc7d03(%rip), %xmm3    # 0x382010
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0xc7d07(%rip), %xmm2    # 0x382020
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq -0x88(%rbp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
movsd 0xc7ee5(%rip), %xmm2    # 0x382230
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x2ba36b
movq -0x58(%rbp), %rax
movl $0x0, 0xc(%rax)
movq -0x50(%rbp), %rax
movl $0x0, 0xc(%rax)
jmp 0x2ba36d
movq -0xa0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xa0(%rbp)
jmp 0x2ba063
jmp 0x2ba386
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x2b9cda
movq $0x0, -0xa0(%rbp)
movq $0x0, -0x98(%rbp)
movq -0x98(%rbp), %rax
cmpq -0xa8(%rbp), %rax
jge 0x2ba448
movq -0x60(%rbp), %rax
imulq $0x1c, -0x98(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
cmpl $0x0, 0xc(%rax)
jne 0x2ba3e6
jmp 0x2ba431
movq -0x60(%rbp), %rcx
imulq $0x1c, -0x98(%rbp), %rax
addq %rax, %rcx
movq -0x60(%rbp), %rax
movq -0xa0(%rbp), %rdx
movq %rdx, %rsi
addq $0x1, %rsi
movq %rsi, -0xa0(%rbp)
imulq $0x1c, %rdx, %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movl 0x18(%rcx), %ecx
movl %ecx, 0x18(%rax)
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x2ba3b3
movq -0xa0(%rbp), %rcx
movq %rcx, -0xa8(%rbp)
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
movq $0x0, -0xb8(%rbp)
movq $0x0, -0x98(%rbp)
movq -0x98(%rbp), %rax
cmpq -0xa8(%rbp), %rax
jge 0x2ba738
movq -0x60(%rbp), %rax
imulq $0x1c, -0x98(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x50(%rbp), %rcx
subl 0x4(%rcx), %eax
movl %eax, %eax
movq %rax, -0x68(%rbp)
movq $0x0, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
cmpq -0xb8(%rbp), %rax
jge 0x2ba6c4
movq -0x60(%rbp), %rax
imulq $0x1c, -0xa0(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0x2ba500
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x11c(%rbp)
jmp 0x2ba50d
movq -0x58(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x11c(%rbp)
movl -0x11c(%rbp), %eax
movl %eax, -0x120(%rbp)
movq -0x50(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0x2ba538
movq -0x50(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x124(%rbp)
jmp 0x2ba545
movq -0x58(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x124(%rbp)
movl -0x120(%rbp), %eax
movl -0x124(%rbp), %ecx
cmpl %ecx, %eax
jbe 0x2ba5cf
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0x2ba574
movq -0x50(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x128(%rbp)
jmp 0x2ba581
movq -0x58(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x128(%rbp)
movl -0x128(%rbp), %eax
movl %eax, -0x12c(%rbp)
movq -0x50(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0x2ba5ac
movq -0x50(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x130(%rbp)
jmp 0x2ba5b9
movq -0x58(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x130(%rbp)
movl -0x12c(%rbp), %eax
movl -0x130(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x134(%rbp)
jmp 0x2ba5d9
xorl %eax, %eax
movl %eax, -0x134(%rbp)
jmp 0x2ba5d9
movl -0x134(%rbp), %eax
movl %eax, %eax
movq %rax, -0x70(%rbp)
cmpq $0x0, -0x70(%rbp)
jne 0x2ba5f1
jmp 0x2ba6ad
movq -0x58(%rbp), %rax
movl 0x4(%rax), %ecx
movl 0x8(%rax), %eax
subl %ecx, %eax
movq %rax, -0x88(%rbp)
movaps 0xc7a05(%rip), %xmm3    # 0x382010
movq -0x70(%rbp), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0xc7a04(%rip), %xmm2    # 0x382020
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq -0x88(%rbp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
movsd 0xc49ca(%rip), %xmm2    # 0x37f018
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
ja 0x2ba6a9
movq -0x70(%rbp), %xmm0
movaps 0xc79ac(%rip), %xmm3    # 0x382010
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0xc79b0(%rip), %xmm2    # 0x382020
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq -0x68(%rbp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
movsd 0xc4979(%rip), %xmm2    # 0x37f018
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x2ba6ab
jmp 0x2ba6c4
jmp 0x2ba6ad
movq -0xa0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xa0(%rbp)
jmp 0x2ba4ba
movq -0xa0(%rbp), %rax
cmpq -0xb8(%rbp), %rax
jge 0x2ba6d6
jmp 0x2ba721
movq -0x60(%rbp), %rcx
imulq $0x1c, -0x98(%rbp), %rax
addq %rax, %rcx
movq -0x60(%rbp), %rax
movq -0xb8(%rbp), %rdx
movq %rdx, %rsi
addq $0x1, %rsi
movq %rsi, -0xb8(%rbp)
imulq $0x1c, %rdx, %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movl 0x18(%rcx), %ecx
movl %ecx, 0x18(%rax)
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x2ba474
movq -0xb8(%rbp), %rcx
movq %rcx, -0xa8(%rbp)
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x28(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x2ba83c
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x2, %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x4, %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x8, %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x10, %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x3, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x2ba83e
movq $0x0, -0x98(%rbp)
movq -0x98(%rbp), %rax
cmpq -0xa8(%rbp), %rax
jge 0x2ba8b5
movq -0x60(%rbp), %rax
imulq $0x1c, -0x98(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
shlq $0x20, %rax
movq %rax, -0x68(%rbp)
movq -0x98(%rbp), %rax
orq -0x68(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rdx
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x98(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x2ba849
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x28(%rbp), %rax
movq (%rax), %rax
shlq $0x3, %rax
addq %rax, %rsi
callq 0x27a9b0
movq $0x0, -0x18(%rbp)
movq $0x0, -0x98(%rbp)
movq -0x98(%rbp), %rax
cmpq -0xa8(%rbp), %rax
jge 0x2baa69
movq -0x60(%rbp), %rax
movq -0x28(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq -0x98(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movl %ecx, %ecx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movl 0x10(%rax), %eax
movq %rax, -0x90(%rbp)
movq $0x3fffffff, -0x88(%rbp) # imm = 0x3FFFFFFF
movq -0x90(%rbp), %rax
movq -0x50(%rbp), %rcx
movl 0x14(%rcx), %ecx
cmpq %rcx, %rax
jae 0x2baa50
movq -0x10(%rbp), %rcx
imulq $0x1c, -0x90(%rbp), %rax
addq %rax, %rcx
movq -0x10(%rbp), %rax
imulq $0x1c, -0x18(%rbp), %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movl 0x18(%rcx), %ecx
movl %ecx, 0x18(%rax)
movq -0x10(%rbp), %rax
imulq $0x1c, -0x18(%rbp), %rcx
addq %rcx, %rax
movl 0x18(%rax), %ecx
andl $0xbfffffff, %ecx       # imm = 0xBFFFFFFF
orl $0x40000000, %ecx       # imm = 0x40000000
movl %ecx, 0x18(%rax)
movq -0x10(%rbp), %rax
imulq $0x1c, -0x18(%rbp), %rcx
addq %rcx, %rax
movl 0xc(%rax), %ecx
orl $0x80000000, %ecx       # imm = 0x80000000
movl %ecx, 0xc(%rax)
movq -0x88(%rbp), %rax
movl %eax, %edx
movq -0x10(%rbp), %rax
imulq $0x1c, -0x18(%rbp), %rcx
addq %rcx, %rax
movl 0x18(%rax), %ecx
andl $0x3fffffff, %edx       # imm = 0x3FFFFFFF
andl $0xc0000000, %ecx       # imm = 0xC0000000
orl %edx, %ecx
movl %ecx, 0x18(%rax)
cmpq $0x1, -0xa8(%rbp)
jg 0x2baa00
movq -0x20(%rbp), %rax
movq %rax, -0x140(%rbp)
jmp 0x2baa0b
movq -0x18(%rbp), %rax
movq %rax, -0x140(%rbp)
movq -0x140(%rbp), %rax
movl %eax, %ecx
movq -0x10(%rbp), %rax
imulq $0x1c, -0x18(%rbp), %rdx
addq %rdx, %rax
movl %ecx, (%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x2ba93c
jmp 0x2baa52
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x2ba8eb
cmpq $0x1, -0xa8(%rbp)
jle 0x2bad65
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rsi
imulq $0x1c, -0x18(%rbp), %rax
addq %rax, %rsi
callq 0x27b350
movq $0x1, -0xa0(%rbp)
movq $0x0, -0x98(%rbp)
movq -0xa0(%rbp), %rax
cmpq -0x18(%rbp), %rax
jg 0x2bab44
movq -0xa0(%rbp), %rax
cmpq -0x18(%rbp), %rax
je 0x2baae6
movq -0x10(%rbp), %rax
imulq $0x1c, -0xa0(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movq -0x10(%rbp), %rcx
imulq $0x1c, -0x98(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x8(%rcx), %eax
je 0x2bab2b
movq -0xa0(%rbp), %rax
subq -0x98(%rbp), %rax
cmpq $0x1, %rax
jle 0x2bab1d
movq -0x10(%rbp), %rdi
imulq $0x1c, -0x98(%rbp), %rax
addq %rax, %rdi
movq -0x10(%rbp), %rsi
imulq $0x1c, -0xa0(%rbp), %rax
addq %rax, %rsi
callq 0x27b890
movq -0xa0(%rbp), %rax
movq %rax, -0x98(%rbp)
jmp 0x2bab2d
movq -0xa0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xa0(%rbp)
jmp 0x2baaa2
movq -0x18(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x28(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x2bac2e
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x2, %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x4, %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x8, %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x10, %rcx
movq -0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x3, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x2bac30
movq $0x0, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
cmpq -0x18(%rbp), %rax
jge 0x2bac80
movq -0xa0(%rbp), %rdx
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rcx
imulq $0x1c, -0xa0(%rbp), %rsi
addq %rsi, %rcx
movl (%rcx), %ecx
movq %rdx, (%rax,%rcx,8)
movq -0xa0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xa0(%rbp)
jmp 0x2bac3b
movq $0x0, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
cmpq -0x18(%rbp), %rax
jge 0x2bad63
movq -0x10(%rbp), %rax
movq -0x28(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq -0xa0(%rbp), %rdx
imulq $0x1c, (%rcx,%rdx,8), %rcx
addq %rcx, %rax
movl 0x18(%rax), %eax
andl $0x3fffffff, %eax       # imm = 0x3FFFFFFF
cmpl $0x3fffffff, %eax       # imm = 0x3FFFFFFF
je 0x2bad29
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rcx
movq -0x28(%rbp), %rdx
movq 0x10(%rdx), %rdx
movq -0xa0(%rbp), %rsi
imulq $0x1c, (%rdx,%rsi,8), %rdx
addq %rdx, %rcx
movl 0x18(%rcx), %ecx
andl $0x3fffffff, %ecx       # imm = 0x3FFFFFFF
movl %ecx, %ecx
movq (%rax,%rcx,8), %rax
movl %eax, %edx
movq -0x10(%rbp), %rax
movq -0x28(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq -0xa0(%rbp), %rsi
imulq $0x1c, (%rcx,%rsi,8), %rcx
addq %rcx, %rax
movl 0x18(%rax), %ecx
andl $0x3fffffff, %edx       # imm = 0x3FFFFFFF
andl $0xc0000000, %ecx       # imm = 0xC0000000
orl %edx, %ecx
movl %ecx, 0x18(%rax)
movq -0x20(%rbp), %rax
movl %eax, %ecx
movq -0x10(%rbp), %rax
movq -0x28(%rbp), %rdx
movq 0x10(%rdx), %rdx
movq -0xa0(%rbp), %rsi
imulq $0x1c, (%rdx,%rsi,8), %rdx
addq %rdx, %rax
movl %ecx, (%rax)
movq -0xa0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xa0(%rbp)
jmp 0x2bac8b
jmp 0x2bad65
movq -0x18(%rbp), %rax
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq
nopw %cs:(%rax,%rax)