#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ fh_cli_write(char *);
void fh_cli_help() {
  fh_cli_write("\n");
  fh_cli_write(
      "+--- Key controls ------------------------------------------+\n");
  fh_cli_write(
      "|                                                           |\n");
  fh_cli_write(
      "| Ctrl-A                :  Go to the start of the line      |\n");
  fh_cli_write(
      "| Ctrl-E                :  Go to the end of the line        |\n");
  fh_cli_write(
      "| Ctrl-K                :  Delete end of the line           |\n");
  fh_cli_write(
      "| Ctrl-Q                :  Quit the CLI session             |\n");
  fh_cli_write(
      "| Ctrl-Y                :  Paste a buffer previous yank'ed  |\n");
  fh_cli_write(
      "| Ctrl-U                :  Clear complete line              |\n");
  fh_cli_write(
      "| Esc-Backspace         :  Delete a full word before cursor |\n");
  fh_cli_write(
      "| Left                  :  Go left on the command line      |\n");
  fh_cli_write(
      "| Right                 :  Go Right on the command line     |\n");
  fh_cli_write(
      "| Up                    :  Go up in the history stack       |\n");
  fh_cli_write(
      "| Down                  :  Go down in the history stack     |\n");
  fh_cli_write(
      "|                                                           |\n");
  fh_cli_write(
      "+--- Command History ---------------------------------------+\n");
  fh_cli_write(
      "|                                                           |\n");
  fh_cli_write(
      "| # hi[story] [ Count ] :  Show last 'Count' from history   |\n");
  fh_cli_write(
      "| # !<N>                :  Call history entry 'N'           |\n");
  fh_cli_write(
      "| # !!                  :  Call last history entry          |\n");
  fh_cli_write(
      "| # !<cmd>              :  Call history starting with <cmd> |\n");
  fh_cli_write(
      "| Ctrl-R                :  Reverse history search           |\n");
  fh_cli_write(
      "|                                                           |\n");
  fh_cli_write(
      "+--- Command filtering -------------------------------------+\n");
  fh_cli_write(
      "|                                                           |\n");
  fh_cli_write(
      "| > Include matching lines (equivalent to 'egrep <RE>')     |\n");
  fh_cli_write(
      "| # <cmd> | include \"<Regex>\"                               |\n");
  fh_cli_write(
      "|                                                           |\n");
  fh_cli_write(
      "| > Exclude matching lines (equivalent to 'egrep -v <RE>')  |\n");
  fh_cli_write(
      "| # <cmd> | exclude \"<Regex>\"                               |\n");
  fh_cli_write(
      "|                                                           |\n");
  fh_cli_write(
      "+-----------------------------------------------------------+\n");
  fh_cli_write("\n");
}


x86 assembly (clang, -O0):
<fh_cli_help>:
push   %rbp
mov    %rsp,%rbp
lea    0x13cf(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xed9(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xf0c(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xf3f(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xf72(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xfa5(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xfd8(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x100b(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x103e(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1071(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x10a4(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x10d7(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x110a(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x113d(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xe7c(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1164(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xe64(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x118b(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x11be(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x11f1(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1224(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1257(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xe1c(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x127e(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xe04(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x12a5(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x12d8(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xde0(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x12ff(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1332(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xdbc(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1359(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x124f(%rip),%rdi
call   1030 <fh_cli_write@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<fh_cli_help>:
push   %r14
push   %rbx
push   %rax
lea    0x13cf(%rip),%r14
mov    %r14,%rdi
call   1030 <fh_cli_write@plt>
lea    0xed6(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xf09(%rip),%rbx
mov    %rbx,%rdi
call   1030 <fh_cli_write@plt>
lea    0xf39(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xf6c(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xf9f(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0xfd2(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1005(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1038(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x106b(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x109e(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x10d1(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1104(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1137(%rip),%rdi
call   1030 <fh_cli_write@plt>
mov    %rbx,%rdi
call   1030 <fh_cli_write@plt>
lea    0x1162(%rip),%rdi
call   1030 <fh_cli_write@plt>
mov    %rbx,%rdi
call   1030 <fh_cli_write@plt>
lea    0x118d(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x11c0(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x11f3(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1226(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1259(%rip),%rdi
call   1030 <fh_cli_write@plt>
mov    %rbx,%rdi
call   1030 <fh_cli_write@plt>
lea    0x1284(%rip),%rdi
call   1030 <fh_cli_write@plt>
mov    %rbx,%rdi
call   1030 <fh_cli_write@plt>
lea    0x12af(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x12e2(%rip),%rdi
call   1030 <fh_cli_write@plt>
mov    %rbx,%rdi
call   1030 <fh_cli_write@plt>
lea    0x130d(%rip),%rdi
call   1030 <fh_cli_write@plt>
lea    0x1340(%rip),%rdi
call   1030 <fh_cli_write@plt>
mov    %rbx,%rdi
call   1030 <fh_cli_write@plt>
lea    0x136b(%rip),%rdi
call   1030 <fh_cli_write@plt>
mov    %r14,%rdi
add    $0x8,%rsp
pop    %rbx
pop    %r14
jmp    1030 <fh_cli_write@plt>

LLVM IR (-O0):
@.str = [2 x i8] c"\0A\00"
@.str.1 = [63 x i8] c"+--- Key controls ------------------------------------------+\0A\00"
@.str.2 = [63 x i8] c"| |\0A\00"
@.str.3 = [63 x i8] c"| Ctrl-A : Go to the start of the line |\0A\00"
@.str.4 = [63 x i8] c"| Ctrl-E : Go to the end of the line |\0A\00"
@.str.5 = [63 x i8] c"| Ctrl-K : Delete end of the line |\0A\00"
@.str.6 = [63 x i8] c"| Ctrl-Q : Quit the CLI session |\0A\00"
@.str.7 = [63 x i8] c"| Ctrl-Y : Paste a buffer previous yank'ed |\0A\00"
@.str.8 = [63 x i8] c"| Ctrl-U : Clear complete line |\0A\00"
@.str.9 = [63 x i8] c"| Esc-Backspace : Delete a full word before cursor |\0A\00"
@.str.10 = [63 x i8] c"| Left : Go left on the command line |\0A\00"
@.str.11 = [63 x i8] c"| Right : Go Right on the command line |\0A\00"
@.str.12 = [63 x i8] c"| Up : Go up in the history stack |\0A\00"
@.str.13 = [63 x i8] c"| Down : Go down in the history stack |\0A\00"
@.str.14 = [63 x i8] c"+--- Command History ---------------------------------------+\0A\00"
@.str.15 = [63 x i8] c"| # hi[story] [ Count ] : Show last 'Count' from history |\0A\00"
@.str.16 = [63 x i8] c"| # !<N> : Call history entry 'N' |\0A\00"
@.str.17 = [63 x i8] c"| # !! : Call last history entry |\0A\00"
@.str.18 = [63 x i8] c"| # !<cmd> : Call history starting with <cmd> |\0A\00"
@.str.19 = [63 x i8] c"| Ctrl-R : Reverse history search |\0A\00"
@.str.20 = [63 x i8] c"+--- Command filtering -------------------------------------+\0A\00"
@.str.21 = [63 x i8] c"| > Include matching lines (equivalent to 'egrep <RE>') |\0A\00"
@.str.22 = [63 x i8] c"| # <cmd> | include \22<Regex>\22 |\0A\00"
@.str.23 = [63 x i8] c"| > Exclude matching lines (equivalent to 'egrep -v <RE>') |\0A\00"
@.str.24 = [63 x i8] c"| # <cmd> | exclude \22<Regex>\22 |\0A\00"
@.str.25 = [63 x i8] c"+-----------------------------------------------------------+\0A\00"
define void @fh_cli_help() {
%1 = call i32 @fh_cli_write(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%4 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.3, i64 0, i64 0))
%5 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.4, i64 0, i64 0))
%6 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.5, i64 0, i64 0))
%7 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.6, i64 0, i64 0))
%8 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.7, i64 0, i64 0))
%9 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.8, i64 0, i64 0))
%10 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.9, i64 0, i64 0))
%11 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.10, i64 0, i64 0))
%12 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.11, i64 0, i64 0))
%13 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.12, i64 0, i64 0))
%14 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.13, i64 0, i64 0))
%15 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%16 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.14, i64 0, i64 0))
%17 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%18 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.15, i64 0, i64 0))
%19 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.16, i64 0, i64 0))
%20 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.17, i64 0, i64 0))
%21 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.18, i64 0, i64 0))
%22 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.19, i64 0, i64 0))
%23 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%24 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.20, i64 0, i64 0))
%25 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%26 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.21, i64 0, i64 0))
%27 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.22, i64 0, i64 0))
%28 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%29 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.23, i64 0, i64 0))
%30 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.24, i64 0, i64 0))
%31 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%32 = call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.25, i64 0, i64 0))
%33 = call i32 @fh_cli_write(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [2 x i8] c"\0A\00"
@.str.1 = [63 x i8] c"+--- Key controls ------------------------------------------+\0A\00"
@.str.2 = [63 x i8] c"| |\0A\00"
@.str.3 = [63 x i8] c"| Ctrl-A : Go to the start of the line |\0A\00"
@.str.4 = [63 x i8] c"| Ctrl-E : Go to the end of the line |\0A\00"
@.str.5 = [63 x i8] c"| Ctrl-K : Delete end of the line |\0A\00"
@.str.6 = [63 x i8] c"| Ctrl-Q : Quit the CLI session |\0A\00"
@.str.7 = [63 x i8] c"| Ctrl-Y : Paste a buffer previous yank'ed |\0A\00"
@.str.8 = [63 x i8] c"| Ctrl-U : Clear complete line |\0A\00"
@.str.9 = [63 x i8] c"| Esc-Backspace : Delete a full word before cursor |\0A\00"
@.str.10 = [63 x i8] c"| Left : Go left on the command line |\0A\00"
@.str.11 = [63 x i8] c"| Right : Go Right on the command line |\0A\00"
@.str.12 = [63 x i8] c"| Up : Go up in the history stack |\0A\00"
@.str.13 = [63 x i8] c"| Down : Go down in the history stack |\0A\00"
@.str.14 = [63 x i8] c"+--- Command History ---------------------------------------+\0A\00"
@.str.15 = [63 x i8] c"| # hi[story] [ Count ] : Show last 'Count' from history |\0A\00"
@.str.16 = [63 x i8] c"| # !<N> : Call history entry 'N' |\0A\00"
@.str.17 = [63 x i8] c"| # !! : Call last history entry |\0A\00"
@.str.18 = [63 x i8] c"| # !<cmd> : Call history starting with <cmd> |\0A\00"
@.str.19 = [63 x i8] c"| Ctrl-R : Reverse history search |\0A\00"
@.str.20 = [63 x i8] c"+--- Command filtering -------------------------------------+\0A\00"
@.str.21 = [63 x i8] c"| > Include matching lines (equivalent to 'egrep <RE>') |\0A\00"
@.str.22 = [63 x i8] c"| # <cmd> | include \22<Regex>\22 |\0A\00"
@.str.23 = [63 x i8] c"| > Exclude matching lines (equivalent to 'egrep -v <RE>') |\0A\00"
@.str.24 = [63 x i8] c"| # <cmd> | exclude \22<Regex>\22 |\0A\00"
@.str.25 = [63 x i8] c"+-----------------------------------------------------------+\0A\00"
define void @fh_cli_help() {
%1 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%2 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%4 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.3, i64 0, i64 0))
%5 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.4, i64 0, i64 0))
%6 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.5, i64 0, i64 0))
%7 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.6, i64 0, i64 0))
%8 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.7, i64 0, i64 0))
%9 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.8, i64 0, i64 0))
%10 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.9, i64 0, i64 0))
%11 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.10, i64 0, i64 0))
%12 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.11, i64 0, i64 0))
%13 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.12, i64 0, i64 0))
%14 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.13, i64 0, i64 0))
%15 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%16 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.14, i64 0, i64 0))
%17 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%18 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.15, i64 0, i64 0))
%19 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.16, i64 0, i64 0))
%20 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.17, i64 0, i64 0))
%21 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.18, i64 0, i64 0))
%22 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.19, i64 0, i64 0))
%23 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%24 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.20, i64 0, i64 0))
%25 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%26 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.21, i64 0, i64 0))
%27 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.22, i64 0, i64 0))
%28 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%29 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.23, i64 0, i64 0))
%30 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.24, i64 0, i64 0))
%31 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0))
%32 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.25, i64 0, i64 0))
%33 = tail call i32 @fh_cli_write(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
ret void
}