// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/extended/csa_visitor.c
// Function: gt_csa_visitor_process_cluster
void gt_csa_visitor_process_cluster(GtNodeVisitor *nv, bool final_cluster)
{
  CSAVisitor *csa_visitor = csa_visitor_cast(nv);
  GT_UNUSED GtFeatureNode *first_feature;
  GtArray *csa_genes;
  GtUword i;

  if (final_cluster) {
    gt_assert(!gt_array_size(csa_visitor->cluster) ||
              !csa_visitor->buffered_feature);
    if (csa_visitor->buffered_feature) {
      gt_array_add(csa_visitor->cluster, csa_visitor->buffered_feature);
      csa_visitor->buffered_feature = NULL;
    }
  }

  if (!gt_array_size(csa_visitor->cluster)) {
    gt_assert(final_cluster);
    return;
  }

  /* compute the consensus spliced alignments */
  first_feature = *(GtFeatureNode**)
                  gt_array_get_first(csa_visitor->cluster);
  csa_genes = gt_csa_variable_strands(gt_array_get_space(csa_visitor->cluster),
                                      gt_array_size(csa_visitor->cluster),
                                      sizeof (GtFeatureNode*),
                                      get_genomic_range,
                                      get_strand, get_exons);

  process_csa_genes(csa_visitor->gt_genome_node_buffer, csa_genes,
                    csa_visitor->gt_csa_source_str);

  for (i = 0; i < gt_array_size(csa_genes); i++)
    gt_csa_gene_delete(*(GtCSAGene**) gt_array_get(csa_genes, i));
  gt_array_delete(csa_genes);

  /* remove the cluster genome nodes */
  for (i = 0; i < gt_array_size(csa_visitor->cluster); i++) {
    gt_genome_node_delete(*(GtGenomeNode**)
                              gt_array_get(csa_visitor->cluster, i));
  }
  gt_array_reset(csa_visitor->cluster);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movl %esi, %ebx
movq %rdi, %r14
callq 0xd9d14
movq %rax, %rdi
movq %r14, %rsi
callq 0x49c1d
testl %ebx, %ebx
je 0xda0e0
movq 0x20(%rax), %rdi
movq %rax, %r14
callq 0x6ecda
testq %rax, %rax
movq %r14, %rax
je 0xda0b9
cmpq $0x0, 0x28(%rax)
jne 0xda8d9
cmpq $0x0, 0x28(%rax)
je 0xda0e0
movq %rax, %rsi
addq $0x28, %rsi
movq 0x20(%rax), %rdi
movl $0x8, %edx
callq 0x6ec0e
movq %r14, %rax
movq $0x0, 0x28(%r14)
movq 0x20(%rax), %rdi
movq %rax, %r14
callq 0x6ecda
testq %rax, %rax
je 0xda878
movq 0x20(%r14), %rdi
callq 0x6ea17
movq 0x20(%r14), %rdi
callq 0x6ebe9
movq %rax, %rbx
movq 0x20(%r14), %rdi
callq 0x6ecda
leaq 0x7c4(%rip), %rcx       # 0xda8de
leaq 0x7e7(%rip), %r8        # 0xda908
leaq 0x80a(%rip), %r9        # 0xda932
movl $0x8, %edx
movq %rbx, %rdi
movq %rax, %rsi
callq 0xdf250
testq %rax, %rax
je 0xda8cf
movq %rax, %rbx
movq 0x10(%r14), %rax
movq %rax, 0x68(%rsp)
movq %r14, 0x58(%rsp)
movq 0x60(%r14), %r12
movq %rbx, %rdi
callq 0x6ecda
testq %rax, %rax
je 0xda7f6
xorl %esi, %esi
movq %rbx, 0x60(%rsp)
movq %r12, 0x80(%rsp)
movq %rbx, %rdi
movq %rsi, 0x70(%rsp)
callq 0x6e9fa
testq %r12, %r12
je 0xda8ca
movq (%rax), %r15
testq %r15, %r15
je 0xda8ca
movq %r15, %rdi
callq 0xdefa5
movq %rax, %rbx
movq %rdx, %r14
movq %r15, %rdi
callq 0xdf035
movq (%rax), %rdi
callq 0x41f3f
movq %r15, 0x10(%rsp)
movq %rax, %r15
movq 0x10(%rsp), %rdi
callq 0xdf017
movq %r15, %rdi
movq 0x10(%rsp), %r15
leaq 0x326c9(%rip), %rsi     # 0x10c8a0
movq %rbx, %rdx
movq %r14, %rcx
movl %eax, %r8d
callq 0x3fbf0
movq %rax, 0x38(%rsp)
movq %rax, %rdi
movq %r12, %rsi
callq 0x3f8b5
movq %r15, %rdi
callq 0xdef92
testq %rax, %rax
je 0xda7c6
xorl %ebx, %ebx
movq %r15, %rdi
movq %rbx, %rsi
callq 0xdef7a
testq %rax, %rax
je 0xda8b6
movq %rax, %r13
movq %rbx, 0x78(%rsp)
movq %rax, %rdi
callq 0xdf233
movq (%rax), %rdi
callq 0x41f3f
movq %rax, %r15
movq %r13, %rdi
callq 0xdf1c0
movq %rax, %rbx
movq %rdx, %r14
movq %r13, %rdi
callq 0xdf170
movq %r15, 0xa0(%rsp)
movq %r15, %rdi
leaq 0xa9eb(%rip), %rsi      # 0xe4c4a
movq %rbx, %rdx
movq %r14, %rcx
movl %eax, 0x4(%rsp)
movl %eax, %r8d
callq 0x3fbf0
movq %rax, %rbx
movq %rax, %rdi
movq %r12, %rsi
callq 0x3f8b5
testq %rbx, %rbx
je 0xda8bb
movq %rbx, 0x40(%rsp)
callq 0x3bfe0
movq %rax, %rbx
movq %r13, %rdi
callq 0xdf1ad
testq %rax, %rax
je 0xda30b
xorl %r14d, %r14d
movq %r13, %rdi
movq %r14, %rsi
callq 0xdf195
movq (%rax), %r15
movq %r15, %rdi
leaq 0xd529(%rip), %rsi      # 0xe77e6
callq 0x3f850
testq %rax, %rax
je 0xda2fb
movq %rbx, %rdi
callq 0x3c434
testq %rax, %rax
je 0xda2e1
movq %rbx, %rdi
movl $0x2c, %esi
callq 0x3c28d
movq %r15, %rdi
leaq 0xd4fb(%rip), %rsi      # 0xe77e6
callq 0x3f850
movq %rbx, %rdi
movq %rax, %rsi
callq 0x3c067
incq %r14
movq %r13, %rdi
callq 0xdf1ad
cmpq %rax, %r14
jb 0xda2a5
movq %rbx, %rdi
callq 0x3c434
testq %rax, %rax
je 0xda334
movq %rbx, %rdi
callq 0x3c40b
movq 0x40(%rsp), %rdi
leaq 0xd4ba(%rip), %rsi      # 0xe77e6
movq %rax, %rdx
callq 0x40b96
movq %rbx, %rdi
callq 0x3d1eb
movl $0x8, %edi
callq 0x6e93c
movq %rax, %rbp
movq %r13, %rdi
callq 0xdf1ad
testq %rax, %rax
leaq 0x20(%rsp), %r15
je 0xda6d5
xorl %r14d, %r14d
movq %r13, 0x88(%rsp)
movq %rbp, 0x98(%rsp)
movq %r13, %rdi
movq %r14, %rsi
callq 0xdf195
testq %rbp, %rbp
je 0xda8a2
movq (%rax), %rbx
testq %rbx, %rbx
je 0xda8a2
cmpl $0x2, 0x4(%rsp)
je 0xda8a7
movq %r14, 0x90(%rsp)
movl $0x8, %edi
callq 0x6e93c
movq %rax, %r14
movq %rbx, %rdi
movq %rax, %rsi
callq 0x40640
movq %r14, 0x8(%rsp)
movq %r14, %rdi
callq 0x4216d
movq %rbp, %rdi
callq 0x6ecda
testq %rax, %rax
je 0xda5ef
xorl %r12d, %r12d
xorl %r13d, %r13d
movq %r15, %r14
movq 0x8(%rsp), %r15
movq %r15, %rdi
callq 0x6ecda
cmpq %rax, %r13
jae 0xda5fa
movq %rbp, %rdi
movq %r12, %rsi
callq 0x6e9fa
movq (%rax), %rbp
movq %r15, %rdi
movq %r13, %rsi
callq 0x6e9fa
movq (%rax), %rbx
movq %rbp, %rdi
callq 0x41f83
movq %rax, 0x20(%rsp)
movq %rdx, 0x28(%rsp)
movq %rbx, %rdi
callq 0x41f83
movq %rax, 0x48(%rsp)
movq %rdx, 0x50(%rsp)
movq %r14, %rdi
leaq 0x48(%rsp), %rsi
callq 0x7df58
cmpl $0x1, %eax
je 0xda547
testl %eax, %eax
je 0xda4cd
cmpl $-0x1, %eax
jne 0xda88e
movq %r14, %rdi
movq %r14, %r15
leaq 0x48(%rsp), %r14
movq %r14, %rsi
callq 0x7e06e
testb %al, %al
je 0xda5c9
movq %r15, %rdi
movq %r14, %rsi
callq 0x7e11d
testb %al, %al
movq 0x8(%rsp), %r15
jne 0xda5bf
movq %rbp, %rdi
callq 0x41f7e
movq %rax, %r14
movq %rbx, %rdi
callq 0x41f7e
cmpq %rax, %r14
ja 0xda8ac
movq %rbp, %rdi
callq 0x41fa1
movq %rax, %r14
movq %rbx, %rdi
callq 0x41fa1
cmpq %rax, %r14
jb 0xda590
jmp 0xda8b1
movq %r14, %rdi
leaq 0x48(%rsp), %rsi
callq 0x7e06e
testb %al, %al
je 0xda893
movq %rbp, %rdi
callq 0x402b9
testb %al, %al
je 0xda517
movq %rbx, %rdi
callq 0x402b9
testb %al, %al
je 0xda517
movq %rbp, %rdi
callq 0x405b4
movss %xmm0, 0x34(%rsp)
movq %rbx, %rdi
callq 0x405b4
ucomiss 0x34(%rsp), %xmm0
ja 0xda52f
movq %rbp, %rdi
callq 0x402b9
testb %al, %al
jne 0xda53f
movq %rbx, %rdi
callq 0x402b9
testb %al, %al
je 0xda53f
movq %rbx, %rdi
callq 0x405b4
movq %rbp, %rdi
callq 0x402cd
incq %r13
jmp 0xda5d1
movq %r14, %rdi
leaq 0x48(%rsp), %rsi
callq 0x7e06e
testb %al, %al
je 0xda898
movq %rbp, %rdi
callq 0x41f7e
movq %rax, %r14
movq %rbx, %rdi
callq 0x41f7e
cmpq %rax, %r14
ja 0xda89d
movq %rbx, %rdi
callq 0x41fa1
movq %rax, %r14
movq %rbp, %rdi
callq 0x41fa1
cmpq %rax, %r14
jbe 0xda5bf
movq %rbx, %rdi
callq 0x41fa1
movq %rbp, %rdi
movq %rax, %rsi
callq 0x40aee
movq %rbx, %rdi
callq 0x402b9
testb %al, %al
je 0xda5bf
movq %rbx, %rdi
callq 0x405b4
movq %rbp, %rdi
callq 0x402cd
incq %r13
leaq 0x20(%rsp), %r14
jmp 0xda5d1
movq %r15, %r14
movq 0x8(%rsp), %r15
incq %r12
movq 0x98(%rsp), %rbp
movq %rbp, %rdi
callq 0x6ecda
cmpq %rax, %r12
jb 0xda3e9
jmp 0xda5fa
xorl %r13d, %r13d
movq %r15, %r14
movq 0x8(%rsp), %r15
movq %r15, %rdi
callq 0x6ecda
cmpq %rax, %r13
movq 0x80(%rsp), %r12
jae 0xda6a6
movq %r15, %rdi
movq %r13, %rsi
callq 0x6e9fa
movq (%rax), %rbx
movq %rbx, %rdi
callq 0x41f83
movq %rdx, %rcx
movq 0xa0(%rsp), %rdi
leaq 0x22347(%rip), %rsi     # 0xfc982
movq %rax, %rdx
movl 0x4(%rsp), %r8d
callq 0x3fbf0
movq %rax, 0x18(%rsp)
movq %rbx, %rdi
callq 0x402b9
testb %al, %al
je 0xda673
movq 0x18(%rsp), %r14
movq %rbx, %rdi
callq 0x405b4
movq %r14, %rdi
leaq 0x20(%rsp), %r14
callq 0x402cd
movq 0x18(%rsp), %rdi
movq %r12, %rsi
callq 0x3f8b5
movl $0x8, %edx
movq %rbp, %rdi
leaq 0x18(%rsp), %rsi
callq 0x6ec0e
incq %r13
movq %r15, %rdi
callq 0x6ecda
cmpq %rax, %r13
jb 0xda613
movq %r15, %rdi
movq %r14, %r15
callq 0x6f134
movq 0x90(%rsp), %r14
incq %r14
movq 0x88(%rsp), %r13
movq %r13, %rdi
callq 0xdf1ad
cmpq %rax, %r14
jb 0xda372
movl $0x10, %edi
callq 0x6e93c
testq %rbp, %rbp
je 0xda8c5
movq %rax, %rbx
movq %rbp, %rdi
callq 0x6ecda
testq %rax, %rax
je 0xda73b
movq %r15, %r14
xorl %r15d, %r15d
movq %rbp, %rdi
movq %r15, %rsi
callq 0x6e9fa
movq (%rax), %rdi
callq 0x41f83
movq %rax, 0x20(%rsp)
movq %rdx, 0x28(%rsp)
movl $0x10, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x6ec0e
incq %r15
movq %rbp, %rdi
callq 0x6ecda
cmpq %rax, %r15
jb 0xda6fe
movq %rbp, %r15
movq %rbx, %rdi
callq 0x7eb00
movl %eax, %ebp
movq %rbx, %rdi
callq 0x6f134
testb %bpl, %bpl
movq 0x40(%rsp), %r14
je 0xda8c0
movq %r15, %rdi
callq 0x6ecda
testq %rax, %rax
je 0xda793
xorl %ebx, %ebx
movq %r15, %rdi
movq %rbx, %rsi
callq 0x6e9fa
movq (%rax), %rsi
movq %r14, %rdi
callq 0x4005b
incq %rbx
movq %r15, %rdi
callq 0x6ecda
cmpq %rax, %rbx
jb 0xda76d
movq %r15, %rdi
callq 0x6f134
movq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x4005b
movq 0x78(%rsp), %rbx
incq %rbx
movq 0x10(%rsp), %r15
movq %r15, %rdi
callq 0xdef92
cmpq %rax, %rbx
jb 0xda208
movq 0x68(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0x7c043
movq 0x70(%rsp), %r14
incq %r14
movq 0x60(%rsp), %rbx
movq %rbx, %rdi
callq 0x6ecda
movq %r14, %rsi
cmpq %rax, %r14
jb 0xda176
movq %rbx, %rdi
callq 0x6ecda
testq %rax, %rax
movq %rbx, %r14
je 0xda82b
xorl %ebx, %ebx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x6e9fa
movq (%rax), %rdi
callq 0xdeec1
incq %rbx
movq %r14, %rdi
callq 0x6ecda
cmpq %rax, %rbx
jb 0xda808
movq %r14, %rdi
callq 0x6f134
movq 0x58(%rsp), %r14
movq 0x20(%r14), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xda86d
xorl %ebx, %ebx
movq 0x20(%r14), %rdi
movq %rbx, %rsi
callq 0x6e9fa
movq (%rax), %rdi
callq 0x42ade
incq %rbx
movq 0x20(%r14), %rdi
callq 0x6ecda
cmpq %rax, %rbx
jb 0xda848
movq 0x20(%r14), %rdi
callq 0x6ed13
jmp 0xda87c
testb %bl, %bl
je 0xda8d4
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x3384a
callq 0x3379f
callq 0x3372d
callq 0x33766
callq 0x336f4
callq 0x33883
callq 0x33811
callq 0x337d8
callq 0x33967
callq 0x3392e
callq 0x338bc
callq 0x338f5
callq 0x336bb
callq 0x339a0
callq 0x339d9
callq 0x33682