// File: /workspace/github_c_makefile_star2_O2/genometools[P]genometools/src/extended/anno_db_gfflike.c
// Function: anno_db_gfflike_build
GtFeatureIndex* anno_db_gfflike_build(GtAnnoDBSchema *schema, GtRDB *db,
                                      GtError *err)
{
  int had_err = 0;
  GtFeatureIndex *fi = NULL;
  GtFeatureIndexGFFlike *fis;
  GtAnnoDBGFFlike *adg;
  ObserverCallbackInfo *oci;
  gt_assert(schema && db);
  gt_error_check(err);

  adg = anno_db_gfflike_cast(schema);
  had_err = gt_rdb_accept(db, adg->visitor, err);

  if (!had_err) {
    fi = gt_feature_index_create(feature_index_gfflike_class());
    fis = feature_index_gfflike_cast(fi);
    fis->obs = gt_feature_node_observer_new();
    fis->obs->data = oci = gt_calloc(1, sizeof (ObserverCallbackInfo));
    fis->node_to_parent_array = gt_hashmap_new(GT_HASH_DIRECT, NULL,
                                               (GtFree) gt_array_delete);
    fis->cache_node2id = node_ul_gt_hashmap_new();
    fis->cache_id2node = ul_node_gt_hashmap_new();
    fis->string_caches = gt_hashmap_new(GT_HASH_DIRECT,
                                        NULL,
                                        (GtFree) gt_hashmap_delete);
    fis->seqid_cache = gt_hashmap_new(GT_HASH_STRING, NULL,
                                      (GtFree) gt_str_delete);
    fis->ref_nodes   = gt_hashmap_new(GT_HASH_DIRECT, (GtFree) delete_ref_node,
                                      NULL);
    fis->source_cache = gt_hashmap_new(GT_HASH_STRING, NULL,
                                       (GtFree) gt_str_delete);
    fis->dblock = gt_mutex_new();

    /* set up callbacks */
    oci->fis = fis;
    fis->changed = gt_hashmap_new(GT_HASH_DIRECT, NULL, NULL);
    fis->deleted = gt_hashmap_new(GT_HASH_DIRECT, NULL, NULL);
    fis->added = gt_hashmap_new(GT_HASH_DIRECT, NULL, NULL);
    oci->had_err = 0;
    oci->err = err;
    fis->obs->deleted = NULL;
    fis->obs->score_changed = node_score_changed_callback;
    fis->obs->strand_changed = node_strand_changed_callback;
    fis->obs->phase_changed = node_phase_changed_callback;
    fis->obs->attribute_changed = node_attribute_change_callback;
    fis->obs->attribute_deleted = node_attribute_delete_callback;
    fis->obs->child_added = node_child_add_callback;
    fis->db = gt_rdb_ref(db);

    if (prepstmt_init(fis, err)) {
      gt_feature_index_delete(fi);
      fi = NULL;
    }
  }
  return fi;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
testq %rdi, %rdi
je 0xb8e72
movq %rsi, %r12
testq %rsi, %rsi
je 0xb8e72
movq %rdx, %rbx
movq %rdi, %r14
testq %rdx, %rdx
je 0xb87c3
movq %rbx, %rdi
callq 0x89eb7
testb %al, %al
jne 0xb8ea0
callq 0xb733d
movq %rax, %rdi
movq %r14, %rsi
callq 0xba63c
movq 0x18(%rax), %rsi
movq %r12, %rdi
movq %rbx, %rdx
callq 0x10d291
testl %eax, %eax
jne 0xb8e61
callq 0xb7471
movq %rax, %rdi
callq 0xd7677
movq %rax, %r14
callq 0xb7471
movq %rax, %rdi
movq %r14, 0x30(%rsp)
movq %r14, %rsi
callq 0xd80e5
movq %rax, %r15
callq 0xdca20
movq %rax, 0x160(%r15)
leaq 0x25ccf1(%rip), %rdx    # 0x315516
pushq $0x1
popq %rdi
pushq $0x18
popq %rsi
movl $0x79e, %ecx            # imm = 0x79E
callq 0x9334a
movq %rax, %rbp
movq 0x160(%r15), %rax
movq %rbp, 0x60(%rax)
leaq -0x5f991(%rip), %rdx    # 0x58eb9
xorl %edi, %edi
xorl %esi, %esi
callq 0x8f330
movq %rax, 0x10(%r15)
movups 0x38083a(%rip), %xmm0   # 0x439098
movups %xmm0, 0x20(%rsp)
movups 0x38081e(%rip), %xmm0   # 0x439088
movups %xmm0, 0x10(%rsp)
movups 0x380802(%rip), %xmm0   # 0x439078
movups %xmm0, (%rsp)
callq 0x8fac7
movq %rax, 0x50(%r15)
movups 0x38083e(%rip), %xmm0   # 0x4390c8
movups %xmm0, 0x20(%rsp)
movups 0x380822(%rip), %xmm0   # 0x4390b8
movups %xmm0, 0x10(%rsp)
movups 0x380806(%rip), %xmm0   # 0x4390a8
movups %xmm0, (%rsp)
callq 0x8fac7
movq %rax, 0x58(%r15)
leaq -0x28f83(%rip), %rdx    # 0x8f933
xorl %edi, %edi
xorl %esi, %esi
callq 0x8f330
movq %rax, 0x28(%r15)
leaq -0xa7c7(%rip), %r13     # 0xae103
pushq $0x1
popq %r14
movl %r14d, %edi
xorl %esi, %esi
movq %r13, %rdx
callq 0x8f330
movq %rax, 0x18(%r15)
leaq 0x5f2(%rip), %rsi       # 0xb8ed8
xorl %edi, %edi
xorl %edx, %edx
callq 0x8f330
movq %rax, 0x30(%r15)
movl %r14d, %edi
xorl %esi, %esi
movq %r13, %rdx
callq 0x8f330
movq %rax, 0x20(%r15)
callq 0xaf2c3
movq %rax, 0x170(%r15)
movq %r15, 0x8(%rbp)
xorl %edi, %edi
xorl %esi, %esi
xorl %edx, %edx
callq 0x8f330
movq %rax, 0x48(%r15)
xorl %edi, %edi
xorl %esi, %esi
xorl %edx, %edx
callq 0x8f330
movq %rax, 0x40(%r15)
xorl %edi, %edi
xorl %esi, %esi
xorl %edx, %edx
callq 0x8f330
movq %rax, 0x38(%r15)
andl $0x0, 0x10(%rbp)
movq %rbx, (%rbp)
movq 0x160(%r15), %rax
andq $0x0, 0x58(%rax)
leaq 0x586(%rip), %rcx       # 0xb8ee2
movq %rcx, (%rax)
leaq 0x5fa(%rip), %rcx       # 0xb8f60
movq %rcx, 0x10(%rax)
leaq 0x630(%rip), %rcx       # 0xb8fa1
movq %rcx, 0x8(%rax)
leaq 0x666(%rip), %rcx       # 0xb8fe2
movq %rcx, 0x28(%rax)
leaq 0x6d9(%rip), %rcx       # 0xb9060
movq %rcx, 0x30(%rax)
leaq 0x74c(%rip), %rcx       # 0xb90de
movq %rcx, 0x50(%rax)
movq %r12, %rdi
callq 0x10d160
movq %rax, 0x168(%r15)
leaq 0x25de9a(%rip), %rsi    # 0x316846
movq %rax, %rdi
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x70(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25dea5(%rip), %rsi    # 0x31687a
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x78(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25deac(%rip), %rsi    # 0x3168a7
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x88(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25decf(%rip), %rsi    # 0x3168f3
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x90(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25deec(%rip), %rsi    # 0x316939
pushq $0x3
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x98(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25df13(%rip), %rsi    # 0x316989
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x60(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25df1b(%rip), %rsi    # 0x3169b7
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x68(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25df1e(%rip), %rsi    # 0x3169e0
pushq $0x2
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x80(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25df17(%rip), %rsi    # 0x316a02
pushq $0xc
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0xa0(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25df9d(%rip), %rsi    # 0x316ab1
pushq $0x4
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0xa8(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25dfb7(%rip), %rsi    # 0x316af4
pushq $0x3
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0xb8(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25dfd2(%rip), %rsi    # 0x316b38
pushq $0x3
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0xc8(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e138(%rip), %rsi    # 0x316cc7
xorl %edx, %edx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0xc0(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e25e(%rip), %rsi    # 0x316e15
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0xd0(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e26f(%rip), %rsi    # 0x316e4f
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0xd8(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e276(%rip), %rsi    # 0x316e7f
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0xe0(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e284(%rip), %rsi    # 0x316eb6
xorl %edx, %edx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0xe8(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e295(%rip), %rsi    # 0x316eef
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0xf0(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e3d9(%rip), %rsi    # 0x31705c
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0xf8(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e405(%rip), %rsi    # 0x3170b1
xorl %edx, %edx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x100(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e415(%rip), %rsi    # 0x3170e9
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x108(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e40f(%rip), %rsi    # 0x31710c
pushq $0x2
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x118(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e41d(%rip), %rsi    # 0x317143
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x120(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e419(%rip), %rsi    # 0x317168
pushq $0x2
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x128(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e41c(%rip), %rsi    # 0x317194
pushq $0x2
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x130(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e420(%rip), %rsi    # 0x3171c1
pushq $0x2
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x138(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e423(%rip), %rsi    # 0x3171ed
pushq $0x3
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x140(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e442(%rip), %rsi    # 0x317231
pushq $0x2
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x148(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e458(%rip), %rsi    # 0x31726c
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x150(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x168(%r15), %rdi
leaq 0x25e460(%rip), %rsi    # 0x317299
pushq $0x2
popq %rdx
movq %rbx, %rcx
callq 0x10d490
movq %rax, 0x158(%r15)
testq %rax, %rax
je 0xb8e57
movq 0x30(%rsp), %rax
jmp 0xb8e63
movq 0x30(%rsp), %rdi
callq 0xd7777
xorl %eax, %eax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x37f0ef(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x22c190(%rip), %rsi    # 0x2e5013
leaq 0x25c975(%rip), %rdx    # 0x3157ff
leaq 0x25c97b(%rip), %rcx    # 0x31580c
leaq 0x25c67e(%rip), %r8     # 0x315516
movl $0x794, %r9d            # imm = 0x794
jmp 0xb8ecc
movq 0x37f0c1(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x22c162(%rip), %rsi    # 0x2e5013
leaq 0x22c307(%rip), %rdx    # 0x2e51bf
leaq 0x25c94d(%rip), %rcx    # 0x31580c
leaq 0x25c650(%rip), %r8     # 0x315516
movl $0x795, %r9d            # imm = 0x795
xorl %eax, %eax
callq 0x17a50
callq 0x17390