// File: chhylp123[P]hifiasm/inter.cpp
// Function: push_ctg_res(ul_vec_t*, vec_mg_lchain_t*, unsigned long)
void push_ctg_res(ul_vec_t *rch, vec_mg_lchain_t *uc, uint64_t id)
{
	// fprintf(stderr, "\n++[M::%s::%.*s(id:%ld), len:%u]\n", __func__, 
	// UL_INF.nid.a[ulid].n, UL_INF.nid.a[ulid].a, ulid, rch->rlen);

	uint64_t k, ucn = uc->n; uint64_t tt, s, e, z, rrn; mg_lchain_t *ix; uc_block_t *p; uc_block_t *rr; mg_lchain_t *src; 
	for (k = 0, rch->bb.n = 0, tt = 0; k < ucn; k += ix->cnt + 1) {
		ix = &(uc->a[k]); assert(ix->v == (uint32_t)-1);
		kv_pushp(uc_block_t, rch->bb, &p); memset(p, 0, sizeof((*p))); 
		p->hid = k/**(uint32_t)-1**/; p->qs = ix->qs; p->qe = ix->qe; p->ts = ix->cnt; tt += ix->cnt;

		// if(id == 206) {
		// 	fprintf(stderr, "init->[M::%s::ucn->%lu, k->%lu, kcnt->%d]\n", __func__, ucn, k, ix->cnt);
		// }
	}
	radix_sort_uc_block_t_qe_srt(rch->bb.a, rch->bb.a + rch->bb.n);

	kv_resize(uc_block_t, rch->bb, rch->bb.n + tt); 
	memset(rch->bb.a + rch->bb.n, 0, tt * sizeof(*(rch->bb.a)));
	for (k = 0, tt = rch->bb.n; k < rch->bb.n; k++) {
		s = tt; e = tt + rch->bb.a[k].ts; 
		rch->bb.a[k].ts = s; rch->bb.a[k].te = e;
		tt = e; 
		// if(id == 206) {
		// 	fprintf(stderr, "mid->[M::%s::rch->bb.n->%u, k->%lu] [%lu, %lu)\n", 
		// 	__func__, (uint32_t)rch->bb.n, k, s, e);
		// }

		ix = &(uc->a[rch->bb.a[k].hid]); assert(ix->v == (uint32_t)-1);
		rr = rch->bb.a + rch->bb.a[k].ts; rrn = rch->bb.a[k].te - rch->bb.a[k].ts;
		src = uc->a + rch->bb.a[k].hid + 1; assert((uint32_t)ix->cnt == rrn);
		for(z = 0; z < rrn; z++) {
			rr[z].hid = src[z].v>>1;
			rr[z].rev = src[z].v&1;
			rr[z].qs = src[z].qs; rr[z].qe = src[z].qe;
			rr[z].ts = src[z].rs; rr[z].te = src[z].re; 
			rr[z].aidx = rch->bb.a[k].hid;
		}
		rch->bb.a[k].hid = (uint32_t)-1;

	}
	assert(tt <= rch->bb.m);

	// for (k = 0, tt = 0; k < ucn; k += ix->cnt + 1, tt++) {
	// 	ix = &(uc->a[k]); assert(ix->v == (uint32_t)-1);
	// 	rr = rch->bb.a + rch->bb.a[tt].ts; rrn = rch->bb.a[tt].te - rch->bb.a[tt].ts;
	// 	src = uc->a + k + 1; 
	// 	if(!((uint32_t)ix->cnt == rrn)) {
	// 		fprintf(stderr, "\n++[M::%s::(id::%lu)] ix->cnt::%d, rrn::%lu\n", __func__, id, ix->cnt, rrn);
	// 	}
	// 	assert((uint32_t)ix->cnt == rrn);
	// 	for(z = 0; z < rrn; z++) {
	// 		rr[z].hid = src[z].v>>1;
	// 		rr[z].rev = src[z].v&1;
	// 		rr[z].qs = src[z].qs; rr[z].qe = src[z].qe;
	// 		rr[z].ts = src[z].rs; rr[z].te = src[z].re; 
	// 		rr[z].aidx = k;
	// 	}
	// }
	///up to now, given a <x> in swap
	///x->ts and x->te are the coordinates in unitig (x->score>>1), instead of HiFi read (x->v>>1)
	///x->qs and x->qe are the coordinates in UL
	///x->dist_pre is the idx of this chain at rch 
	// debug_intermediate_chain(uref->ug, swap->a, swap->n);
	// dd_ul_vec_t(uref, swap->a, swap->n, rch, ulid);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x28(%rbp)
movq $0x0, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq $0x0, 0x20(%rax)
movq $0x0, -0x30(%rbp)
movq -0x20(%rbp), %rax
cmpq -0x28(%rbp), %rax
jae 0x2dc645
movq -0x10(%rbp), %rax
movq (%rax), %rax
imulq $0x28, -0x20(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
cmpl $-0x1, 0x8(%rax)
jne 0x2dc51c
jmp 0x2dc53b
leaq 0xb5228(%rip), %rdi     # 0x39174b
leaq 0xb4305(%rip), %rsi     # 0x39082f
movl $0x3ebe, %edx           # imm = 0x3EBE
leaq 0xb7900(%rip), %rcx     # 0x393e36
callq 0x2130
jmp 0x2dc53d
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x28(%rcx), %rax
jne 0x2dc5a3
movq -0x8(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x2dc56b
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
shlq %rax
movq %rax, -0x78(%rbp)
jmp 0x2dc576
movl $0x2, %eax
movq %rax, -0x78(%rbp)
jmp 0x2dc576
movq -0x78(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x8(%rbp), %rax
imulq $0x24, 0x28(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x8(%rbp), %rdx
movq 0x20(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x20(%rdx)
imulq $0x24, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rdi
xorl %esi, %esi
movl $0x24, %edx
callq 0x2100
movq -0x20(%rbp), %rax
movl %eax, %ecx
movq -0x60(%rbp), %rax
movl %ecx, (%rax)
movq -0x58(%rbp), %rax
movl 0x14(%rax), %ecx
movq -0x60(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x58(%rbp), %rax
movl 0x18(%rax), %ecx
movq -0x60(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x58(%rbp), %rax
movl 0x4(%rax), %ecx
shll %ecx
sarl %ecx
movq -0x60(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x58(%rbp), %rax
movl 0x4(%rax), %eax
shll %eax
sarl %eax
cltq
addq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x58(%rbp), %rax
movl 0x4(%rax), %eax
shll %eax
sarl %eax
addl $0x1, %eax
cltq
addq -0x20(%rbp), %rax
movq %rax, -0x20(%rbp)
jmp 0x2dc4ef
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rsi
movq -0x8(%rbp), %rax
imulq $0x24, 0x20(%rax), %rax
addq %rax, %rsi
callq 0x27d610
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x8(%rbp), %rcx
movq 0x20(%rcx), %rcx
addq -0x30(%rbp), %rcx
cmpq %rcx, %rax
jae 0x2dc74f
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rcx
addq -0x30(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x28(%rax)
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rcx
shrq %rcx
movq -0x8(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x2, %rcx
movq -0x8(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x4, %rcx
movq -0x8(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x8, %rcx
movq -0x8(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x10, %rcx
movq -0x8(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x8(%rbp), %rax
imulq $0x24, 0x28(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x2dc751
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x8(%rbp), %rax
imulq $0x24, 0x20(%rax), %rax
addq %rax, %rdi
imulq $0x24, -0x30(%rbp), %rdx
xorl %esi, %esi
callq 0x2100
movq $0x0, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jae 0x2dca2b
movq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rax
movq -0x8(%rbp), %rcx
movq 0x30(%rcx), %rcx
imulq $0x24, -0x20(%rbp), %rdx
addq %rdx, %rcx
movl 0xc(%rcx), %ecx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
movl %eax, %ecx
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
imulq $0x24, -0x20(%rbp), %rdx
addq %rdx, %rax
movl %ecx, 0xc(%rax)
movq -0x40(%rbp), %rax
movl %eax, %ecx
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
imulq $0x24, -0x20(%rbp), %rdx
addq %rdx, %rax
movl %ecx, 0x10(%rax)
movq -0x40(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
movq 0x30(%rcx), %rcx
imulq $0x24, -0x20(%rbp), %rdx
addq %rdx, %rcx
movl (%rcx), %ecx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
cmpl $-0x1, 0x8(%rax)
jne 0x2dc827
jmp 0x2dc846
leaq 0xb4f1d(%rip), %rdi     # 0x39174b
leaq 0xb3ffa(%rip), %rsi     # 0x39082f
movl $0x3ed3, %edx           # imm = 0x3ED3
leaq 0xb75f5(%rip), %rcx     # 0x393e36
callq 0x2130
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x8(%rbp), %rcx
movq 0x30(%rcx), %rcx
imulq $0x24, -0x20(%rbp), %rdx
addq %rdx, %rcx
movl 0xc(%rcx), %ecx
imulq $0x24, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x68(%rbp)
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
imulq $0x24, -0x20(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movq -0x8(%rbp), %rcx
movq 0x30(%rcx), %rcx
imulq $0x24, -0x20(%rbp), %rdx
addq %rdx, %rcx
subl 0xc(%rcx), %eax
movl %eax, %eax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
movq 0x30(%rcx), %rcx
imulq $0x24, -0x20(%rbp), %rdx
addq %rdx, %rcx
movl (%rcx), %ecx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
addq $0x28, %rax
movq %rax, -0x70(%rbp)
movq -0x58(%rbp), %rax
movl 0x4(%rax), %eax
shll %eax
sarl %eax
movl %eax, %eax
cmpq -0x50(%rbp), %rax
jne 0x2dc8d5
jmp 0x2dc8f4
leaq 0xb7595(%rip), %rdi     # 0x393e71
leaq 0xb3f4c(%rip), %rsi     # 0x39082f
movl $0x3ed5, %edx           # imm = 0x3ED5
leaq 0xb7547(%rip), %rcx     # 0x393e36
callq 0x2130
movq $0x0, -0x48(%rbp)
movq -0x48(%rbp), %rax
cmpq -0x50(%rbp), %rax
jae 0x2dca04
movq -0x70(%rbp), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %ecx
shrl %ecx
movq -0x68(%rbp), %rax
imulq $0x24, -0x48(%rbp), %rdx
addq %rdx, %rax
movl %ecx, (%rax)
movq -0x70(%rbp), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
andl $0x1, %eax
movb %al, %dl
movq -0x68(%rbp), %rax
imulq $0x24, -0x48(%rbp), %rcx
addq %rcx, %rax
movb 0x20(%rax), %cl
andb $0x1, %dl
shlb $0x5, %dl
andb $-0x21, %cl
orb %dl, %cl
movb %cl, 0x20(%rax)
movq -0x70(%rbp), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %ecx
movq -0x68(%rbp), %rax
imulq $0x24, -0x48(%rbp), %rdx
addq %rdx, %rax
movl %ecx, 0x4(%rax)
movq -0x70(%rbp), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movl 0x18(%rax), %ecx
movq -0x68(%rbp), %rax
imulq $0x24, -0x48(%rbp), %rdx
addq %rdx, %rax
movl %ecx, 0x8(%rax)
movq -0x70(%rbp), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movl 0xc(%rax), %ecx
movq -0x68(%rbp), %rax
imulq $0x24, -0x48(%rbp), %rdx
addq %rdx, %rax
movl %ecx, 0xc(%rax)
movq -0x70(%rbp), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %ecx
movq -0x68(%rbp), %rax
imulq $0x24, -0x48(%rbp), %rdx
addq %rdx, %rax
movl %ecx, 0x10(%rax)
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
imulq $0x24, -0x20(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %ecx
movq -0x68(%rbp), %rax
imulq $0x24, -0x48(%rbp), %rdx
addq %rdx, %rax
movl %ecx, 0x1c(%rax)
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x2dc8fc
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
imulq $0x24, -0x20(%rbp), %rcx
addq %rcx, %rax
movl $0xffffffff, (%rax)     # imm = 0xFFFFFFFF
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x2dc785
movq -0x30(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x28(%rcx), %rax
ja 0x2dca3b
jmp 0x2dca5a
leaq 0xb7448(%rip), %rdi     # 0x393e8a
leaq 0xb3de6(%rip), %rsi     # 0x39082f
movl $0x3ee0, %edx           # imm = 0x3EE0
leaq 0xb73e1(%rip), %rcx     # 0x393e36
callq 0x2130
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)