// File: /workspace/github_c_makefile_star2_O0/samtools[P]htslib/synced_bcf_reader.c
// Function: bcf_sr_regions_init
bcf_sr_regions_t *bcf_sr_regions_init(const char *regions, int is_file, int ichr, int ifrom, int ito)
{
    bcf_sr_regions_t *reg;
    if ( !is_file )
    {
        reg = _regions_init_string(regions);
        _regions_sort_and_merge(reg);
        return reg;
    }

    reg = bcf_sr_regions_alloc();
    if ( !reg ) return NULL;

    reg->file = hts_open(regions, "rb");
    if ( !reg->file )
    {
        hts_log_error("Could not open file: %s", regions);
        free(reg);
        return NULL;
    }

    reg->tbx = tbx_index_load3(regions, NULL, HTS_IDX_SAVE_REMOTE|HTS_IDX_SILENT_FAIL);
    if ( !reg->tbx )
    {
        size_t iline = 0;
        int len = strlen(regions);
        int is_bed  = strcasecmp(".bed",regions+len-4) ? 0 : 1;
        if ( !is_bed && !strcasecmp(".bed.gz",regions+len-7) ) is_bed = 1;

        if ( reg->file->format.format==vcf ) ito = 1;

        // read the whole file, tabix index is not present
        while ( hts_getline(reg->file, KS_SEP_LINE, &reg->line) > 0 )
        {
            iline++;
            char *chr, *chr_end;
            hts_pos_t from, to;
            int ret;
            ret = _regions_parse_line(reg->line.s, ichr,ifrom,abs(ito), &chr,&chr_end,&from,&to);
            if ( ret < 0 )
            {
                if ( ito<0 )
                    ret = _regions_parse_line(reg->line.s, ichr,ifrom,ifrom, &chr,&chr_end,&from,&to);
                if ( ret<0 )
                {
                    hts_log_error("Could not parse %zu-th line of file %s, using the columns %d,%d[,%d]",
                        iline, regions,ichr+1,ifrom+1,ito+1);
                    hts_close(reg->file); reg->file = NULL; free(reg);
                    return NULL;
                }
                ito = ifrom;
            }
            else if ( ito<0 )
                ito = abs(ito);
            if ( !ret ) continue;
            if ( is_bed ) from++;
            *chr_end = 0;
            _regions_add(reg, chr, from, to);
            *chr_end = '\t';
        }
        hts_close(reg->file); reg->file = NULL;
        if ( !reg->nseqs ) { free(reg); return NULL; }
        _regions_sort_and_merge(reg);
        return reg;
    }

    reg->seq_names = (char**) tbx_seqnames(reg->tbx, &reg->nseqs);
    if ( !reg->seq_hash )
        reg->seq_hash = khash_str2int_init();
    int i;
    for (i=0; i<reg->nseqs; i++)
    {
        khash_str2int_set(reg->seq_hash,reg->seq_names[i],i);
    }
    reg->fname  = strdup(regions);
    reg->is_bin = 1;
    return reg;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movl %edx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movl %r8d, -0x20(%rbp)
cmpl $0x0, -0x14(%rbp)
jne 0x38242
movq -0x10(%rbp), %rdi
callq 0x3ae90
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
callq 0x39510
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x385ef
callq 0x39200
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x3825f
movq $0x0, -0x8(%rbp)
jmp 0x385ef
movq -0x10(%rbp), %rdi
leaq 0xd9f6d(%rip), %rsi     # 0x1121d7
callq 0xa8b0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x28(%rax)
jne 0x382b9
movq -0x10(%rbp), %rcx
movl $0x1, %edi
leaq 0xd9f45(%rip), %rsi     # 0x1121da
leaq 0xd9f52(%rip), %rdx     # 0x1121ee
movb $0x0, %al
callq 0xa790
movq -0x28(%rbp), %rdi
callq 0x45a0
movq $0x0, -0x8(%rbp)
jmp 0x385ef
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x3, %edx
callq 0x3f190
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x3853b
movq $0x0, -0x30(%rbp)
movq -0x10(%rbp), %rdi
callq 0x41a0
movl %eax, -0x34(%rbp)
movq -0x10(%rbp), %rsi
movslq -0x34(%rbp), %rax
addq %rax, %rsi
addq $-0x4, %rsi
leaq 0xd9ef9(%rip), %rdi     # 0x112206
callq 0x4500
movl %eax, %edx
movl $0x1, %eax
xorl %ecx, %ecx
cmpl $0x0, %edx
cmovnel %ecx, %eax
movl %eax, -0x38(%rbp)
cmpl $0x0, -0x38(%rbp)
jne 0x38351
movq -0x10(%rbp), %rsi
movslq -0x34(%rbp), %rax
addq %rax, %rsi
addq $-0x7, %rsi
leaq 0xd9ecb(%rip), %rdi     # 0x11220b
callq 0x4500
cmpl $0x0, %eax
jne 0x38351
movl $0x1, -0x38(%rbp)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
cmpl $0x8, 0x4c(%rax)
jne 0x38366
movl $0x1, -0x20(%rbp)
jmp 0x38368
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdi
movq -0x28(%rbp), %rdx
addq $0x10, %rdx
movl $0x2, %esi
callq 0xd730
cmpl $0x0, %eax
jle 0x384e9
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rdi
movl -0x18(%rbp), %esi
movl -0x1c(%rbp), %edx
movl -0x20(%rbp), %ecx
movl %ecx, %eax
negl %eax
cmovnsl %eax, %ecx
leaq -0x40(%rbp), %r8
leaq -0x48(%rbp), %r9
leaq -0x50(%rbp), %r10
leaq -0x58(%rbp), %rax
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x3b200
movl %eax, -0x5c(%rbp)
cmpl $0x0, -0x5c(%rbp)
jge 0x3848f
cmpl $0x0, -0x20(%rbp)
jge 0x38412
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rdi
movl -0x18(%rbp), %esi
movl -0x1c(%rbp), %edx
movl -0x1c(%rbp), %ecx
leaq -0x40(%rbp), %r8
leaq -0x48(%rbp), %r9
leaq -0x50(%rbp), %r10
leaq -0x58(%rbp), %rax
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x3b200
movl %eax, -0x5c(%rbp)
cmpl $0x0, -0x5c(%rbp)
jge 0x38487
movq -0x30(%rbp), %rcx
movq -0x10(%rbp), %r8
movl -0x18(%rbp), %r9d
addl $0x1, %r9d
movl -0x1c(%rbp), %r10d
addl $0x1, %r10d
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl $0x1, %edi
leaq 0xd9d98(%rip), %rsi     # 0x1121da
leaq 0xd9dca(%rip), %rdx     # 0x112213
movl %r10d, (%rsp)
movl %eax, 0x8(%rsp)
movb $0x0, %al
callq 0xa790
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0xc9d0
movq -0x28(%rbp), %rax
movq $0x0, 0x28(%rax)
movq -0x28(%rbp), %rdi
callq 0x45a0
movq $0x0, -0x8(%rbp)
jmp 0x385ef
movl -0x1c(%rbp), %eax
movl %eax, -0x20(%rbp)
jmp 0x384a4
cmpl $0x0, -0x20(%rbp)
jge 0x384a2
movl -0x20(%rbp), %eax
movl %eax, %ecx
negl %ecx
cmovnsl %ecx, %eax
movl %eax, -0x20(%rbp)
jmp 0x384a4
cmpl $0x0, -0x5c(%rbp)
jne 0x384af
jmp 0x38368
cmpl $0x0, -0x38(%rbp)
je 0x384c1
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
movb $0x0, (%rax)
movq -0x28(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x50(%rbp), %rdx
movq -0x58(%rbp), %rcx
callq 0x39290
movq -0x48(%rbp), %rax
movb $0x9, (%rax)
jmp 0x38368
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0xc9d0
movq -0x28(%rbp), %rax
movq $0x0, 0x28(%rax)
movq -0x28(%rbp), %rax
cmpl $0x0, 0x98(%rax)
jne 0x38525
movq -0x28(%rbp), %rdi
callq 0x45a0
movq $0x0, -0x8(%rbp)
jmp 0x385ef
movq -0x28(%rbp), %rdi
callq 0x39510
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x385ef
movq -0x28(%rbp), %rax
movq (%rax), %rdi
movq -0x28(%rbp), %rsi
addq $0x98, %rsi
callq 0x3f440
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x90(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x88(%rax)
jne 0x38581
callq 0x3ad60
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x88(%rax)
movl $0x0, -0x60(%rbp)
movl -0x60(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl 0x98(%rcx), %eax
jge 0x385c8
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x90(%rax), %rax
movslq -0x60(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movl -0x60(%rbp), %edx
callq 0x3b5f0
movl -0x60(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x60(%rbp)
jmp 0x38588
movq -0x10(%rbp), %rdi
callq 0x4930
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x28(%rbp), %rax
movl $0x1, 0x38(%rax)
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x70, %rsp
popq %rbp
retq
nopl (%rax)