// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/tools/gt_gff3.c
// Function: gt_gff3_option_parser_new
static GtOptionParser* gt_gff3_option_parser_new(void *tool_arguments)
{
  GFF3Arguments *arguments = tool_arguments;
  GtOptionParser *op;
  GtOption *sort_option, *load_option, *strict_option, *tidy_option,
           *mergefeat_option, *addintrons_option, *offset_option,
           *offsetfile_option, *setsource_option, *sortlines_option,
           *sortnum_option, *option;
  gt_assert(arguments);

  /* init */
  op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Parse, possibly "
                            "transform, and output GFF3 files.");

  /* -sort */
  sort_option = gt_option_new_bool("sort", "sort the GFF3 features (memory "
                                   "consumption is proportional to the input "
                                   "file size(s))",
                                   &arguments->sort, false);
  gt_option_parser_add_option(op, sort_option);

  /* -sortlines */
  sortlines_option = gt_option_new_bool("sortlines", "sort the GFF3 features "
                                        "on a strict line basis (not sorted as"
                                        "defined by GenomeTools)",
                                        &arguments->sortlines, false);
  gt_option_parser_add_option(op, sortlines_option);

  /* -sortnum */
  sortnum_option = gt_option_new_bool("sortnum", "enable natural numeric "
                                        "sorting for sequence regions (not "
                                        "sorted as defined by GenomeTools)",
                                        &arguments->sortnum, false);
  gt_option_parser_add_option(op, sortnum_option);
  gt_option_exclude(sortlines_option, sortnum_option);

  /* -strict */
  strict_option = gt_option_new_bool("strict", "be very strict during GFF3 "
                                     "parsing (stricter than the specification "
                                     "requires)", &arguments->strict, false);
  gt_option_is_development_option(strict_option);
  gt_option_parser_add_option(op, strict_option);

  /* -tidy */
  tidy_option = gt_option_new_bool("tidy", "try to tidy the GFF3 files up "
                                   "during parsing", &arguments->tidy, false);
  gt_option_parser_add_option(op, tidy_option);
  gt_option_exclude(strict_option, tidy_option);

  /* -retainids */
  option = gt_option_new_bool("retainids",
                              "when available, use the original IDs provided "
                              "in the source file\n"
                              "(memory consumption is proportional to the "
                              "input file size(s))", &arguments->retainids,
                              false);
  gt_option_parser_add_option(op, option);

  /* -checkids */
  option = gt_option_new_bool("checkids",
                              "make sure the ID attributes are unique "
                              "within the scope of each GFF3_file, as required "
                              "by GFF3 specification\n"
                              "(memory consumption is proportional to the "
                              "input file size(s)).\n"
                              "If features with the same "GT_GFF_PARENT" "
                              "attribute are not separated by a '"
                              GT_GFF_TERMINATOR"' line the GFF3 parser tries "
                              "to treat them as a multi-line feature. This "
                              "requires at least matching sequence IDs and "
                              "types.", &arguments->checkids, false);
  gt_option_parser_add_option(op, option);

  /* -addids */
  option = gt_option_new_bool("addids", "add missing \""
                              GT_GFF_SEQUENCE_REGION"\" lines automatically",
                              &arguments->addids, true);
  gt_option_parser_add_option(op, option);

  /* -fixregionboundaries */
  option = gt_option_new_bool("fixregionboundaries", "automatically adjust \""
                              GT_GFF_SEQUENCE_REGION"\" lines to contain all "
                              "their features (memory consumption is "
                              "proportional to the input file size(s))",
                              &arguments->fixboundaries, false);
  gt_option_parser_add_option(op, option);

  /* -mergefeat */
  mergefeat_option = gt_option_new_bool("mergefeat",
                                        "merge adjacent features of the same "
                                        "type", &arguments->mergefeat, false);
  gt_option_is_development_option(mergefeat_option);
  gt_option_imply(mergefeat_option, sort_option);
  gt_option_parser_add_option(op, mergefeat_option);

  /* -load */
  load_option = gt_option_new_bool("load", "load the GFF3 features into memory "
                                   "(requires space proportional to the input "
                                   "file size(s))",
                                   &arguments->load, false);
  gt_option_is_development_option(load_option);
  gt_option_parser_add_option(op, load_option);

  /* -addintrons */
  addintrons_option = gt_option_new_bool("addintrons", "add intron features "
                                         "between existing exon features",
                                         &arguments->addintrons, false);
  gt_option_parser_add_option(op, addintrons_option);

  /* -offset */
  offset_option = gt_option_new_word("offset", "transform all features by the "
                                     "given offset", &arguments->offset,
                                     GT_UNDEF_WORD);
  gt_option_parser_add_option(op, offset_option);

  /* -offsetfile */
  offsetfile_option = gt_option_new_filename("offsetfile", "transform all "
                                             "features by the offsets given in "
                                             "file", arguments->offsetfile);
  gt_option_parser_add_option(op, offsetfile_option);
  gt_option_exclude(offset_option, offsetfile_option);

  /* -setsource */
  setsource_option = gt_option_new_string("setsource", "set the 'source' "
                                          "value (2nd column) of each feature",
                                          arguments->newsource, NULL);
  gt_option_parser_add_option(op, setsource_option);

  /* typecheck options */
  gt_typecheck_info_register_options(arguments->tci, op);

  /* xrfcheck options */
  gt_xrfcheck_info_register_options(arguments->xci, op);

  /* -show */
  option = gt_option_new_bool("show", "show GFF3 output", &arguments->show,
                              true);
  gt_option_parser_add_option(op, option);

  /* -v */
  option = gt_option_new_verbose(&arguments->verbose);
  gt_option_parser_add_option(op, option);

  /* -width */
  option = gt_option_new_width(&arguments->width);
  gt_option_parser_add_option(op, option);

  /* output file options */
  gt_output_file_info_register_options(arguments->ofi, op, &arguments->outfp);

  /* set comment function */
  gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL);

  return op;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
testq %rdi, %rdi
je 0xaa74f
movq %rdi, %rbx
leaq 0x2a00d4(%rip), %rdi    # 0x34a4f9
leaq 0x2a354a(%rip), %rsi    # 0x34d976
callq 0x107bfe
movq %rax, %r14
leaq 0x2fe3d9(%rip), %rdi    # 0x3a8814
leaq 0x2a3566(%rip), %rsi    # 0x34d9a8
movq %rbx, %rdx
xorl %ecx, %ecx
callq 0x10a235
movq %rax, %r15
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x1(%rbx), %rdx
leaq 0x2a3599(%rip), %rdi    # 0x34d9fe
leaq 0x2a359c(%rip), %rsi    # 0x34da08
xorl %ecx, %ecx
callq 0x10a235
movq %rax, %r12
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x2(%rbx), %rdx
leaq 0x2a35d0(%rip), %rdi    # 0x34da5c
leaq 0x2a35d1(%rip), %rsi    # 0x34da64
xorl %ecx, %ecx
callq 0x10a235
movq %rax, %r13
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
movq %r12, %rdi
movq %r13, %rsi
callq 0x10ab96
leaq 0xa(%rbx), %rdx
leaq 0x2d5637(%rip), %rdi    # 0x37faf5
leaq 0x2a35fa(%rip), %rsi    # 0x34dabf
xorl %ecx, %ecx
callq 0x10a235
movq %rax, %r12
movq %rax, %rdi
callq 0x10a9d4
movq %r14, %rdi
movq %r12, %rsi
callq 0x107cc0
leaq 0xb(%rbx), %rdx
leaq 0x2d55ce(%rip), %rdi    # 0x37fabb
leaq 0x2a3619(%rip), %rsi    # 0x34db0d
xorl %ecx, %ecx
callq 0x10a235
movq %rax, %r13
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
movq %r12, %rdi
movq %r13, %rsi
callq 0x10ab96
leaq 0x4(%rbx), %rdx
leaq 0x335edc(%rip), %rdi    # 0x3e03fb
leaq 0x2a3614(%rip), %rsi    # 0x34db3a
xorl %ecx, %ecx
callq 0x10a235
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x5(%rbx), %rdx
leaq 0x2a3677(%rip), %rdi    # 0x34dbba
leaq 0x2a3679(%rip), %rsi    # 0x34dbc3
xorl %ecx, %ecx
callq 0x10a235
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x6(%rbx), %rdx
leaq 0x2a37cb(%rip), %rdi    # 0x34dd32
leaq 0x2a37cb(%rip), %rsi    # 0x34dd39
movl $0x1, %ecx
callq 0x10a235
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0xd(%rbx), %rdx
leaq 0x2a37df(%rip), %rdi    # 0x34dd6d
leaq 0x2a37ec(%rip), %rsi    # 0x34dd81
xorl %ecx, %ecx
callq 0x10a235
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x7(%rbx), %rdx
leaq 0x29b213(%rip), %rdi    # 0x3457c5
leaq 0x2a3854(%rip), %rsi    # 0x34de0d
xorl %ecx, %ecx
callq 0x10a235
movq %rax, %r12
movq %rax, %rdi
callq 0x10a9d4
movq %r12, %rdi
movq %r15, %rsi
callq 0x10a9e4
movq %r14, %rdi
movq %r12, %rsi
callq 0x107cc0
leaq 0x3(%rbx), %rdx
leaq 0x3358de(%rip), %rdi    # 0x3dfeca
leaq 0x2a3843(%rip), %rsi    # 0x34de36
xorl %ecx, %ecx
callq 0x10a235
movq %rax, %r15
movq %rax, %rdi
callq 0x10a9d4
movq %r14, %rdi
movq %r15, %rsi
callq 0x107cc0
leaq 0x8(%rbx), %rdx
leaq 0x2a3876(%rip), %rdi    # 0x34de91
leaq 0x2a387a(%rip), %rsi    # 0x34de9c
xorl %ecx, %ecx
callq 0x10a235
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x10(%rbx), %rdx
leaq 0x2bdba8(%rip), %rdi    # 0x3681e7
leaq 0x2a3889(%rip), %rsi    # 0x34decf
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
callq 0x10a5ad
movq %rax, %r15
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
movq 0x18(%rbx), %rdx
leaq 0x2d4c33(%rip), %rdi    # 0x37f2a1
leaq 0x2a3885(%rip), %rsi    # 0x34defa
callq 0x10a7af
movq %rax, %r12
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
movq %r15, %rdi
movq %r12, %rsi
callq 0x10ab96
movq 0x20(%rbx), %rdx
leaq 0x2a3890(%rip), %rdi    # 0x34df2e
leaq 0x2a3893(%rip), %rsi    # 0x34df38
xorl %ecx, %ecx
callq 0x10a770
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
movq 0x30(%rbx), %rdi
movq %r14, %rsi
callq 0x1833b7
movq 0x38(%rbx), %rdi
movq %r14, %rsi
callq 0x186084
leaq 0xc(%rbx), %rdx
leaq 0x305e75(%rip), %rdi    # 0x3b054f
leaq 0x2a388b(%rip), %rsi    # 0x34df6c
movl $0x1, %ecx
callq 0x10a235
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x9(%rbx), %rdi
callq 0x10a257
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
leaq 0x28(%rbx), %rdi
callq 0x10a280
movq %r14, %rdi
movq %rax, %rsi
callq 0x107cc0
movq 0x40(%rbx), %rdi
addq $0x48, %rbx
movq %r14, %rsi
movq %rbx, %rdx
callq 0x10ad87
leaq 0xa218c(%rip), %rsi     # 0x14c8c4
movq %r14, %rdi
xorl %edx, %edx
callq 0x107d3d
movq %r14, %rax
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
callq 0x1b690