#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*/ fprintf(int /*<<< orphan*/, char *);
int /*<<< orphan*/ stderr;
void help() {
  fprintf(
      stderr,
      "Usage: arc4 [-d] [-r count] [[-i file]|[-n]] [-k file] [-v] [-h] file\n"
      "Purpose: This is block cipher with 256 bit key\n"
      "and 64x64 bit block, based on premutation feature\n"
      "\n"
      "Options: \n"
      "  -d   --decrypt  - Decrypt Message\n"
      "  -r   --rounds   - Set rounds count (16 by default)\n"
      "  -i   --use-iv   - CBC mode with manual 512bit IV file\n"
      "  -n   --use-internal-iv - CBC mode. load/generate IV with key file\n"
      "  -k   --key      - Set manual key file structure\n"
      "  -v   --verison  - Display version cipher information\n"
      "  -h   --help     - Show this help message\n"
      "\n"
      "stdout stream - Used for encrypt/decrypt file\n"
      "stderr stream - Used for key structure or help message\n"
      "\n"
      "Example: \n"
      "arc4 message > ecnrypt_message 2> key_file\n"
      "arc4 -dk key_file encrypt_message > message\n");
}


x86 assembly (clang, -O0):
<help>:
push   %rbp
mov    %rsp,%rbp
mov    0x2ec5(%rip),%rax
mov    (%rax),%edi
lea    0xedc(%rip),%rsi
call   1030 <fprintf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<help>:
mov    0x2ec9(%rip),%rax
mov    (%rax),%edi
lea    0xee0(%rip),%rsi
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [740 x i8] c"Usage: arc4 [-d] [-r count] [[-i file]|[-n]] [-k file] [-v] [-h] file\0APurpose: This is block cipher with 256 bit key\0Aand 64x64 bit block, based on premutation feature\0A\0AOptions: \0A -d --decrypt - Decrypt Message\0A -r --rounds - Set rounds count (16 by default)\0A -i --use-iv - CBC mode with manual 512bit IV file\0A -n --use-internal-iv - CBC mode. load/generate IV with key file\0A -k --key - Set manual key file structure\0A -v --verison - Display version cipher information\0A -h --help - Show this help message\0A\0Astdout stream - Used for encrypt/decrypt file\0Astderr stream - Used for key structure or help message\0A\0AExample: \0Aarc4 message > ecnrypt_message 2> key_file\0Aarc4 -dk key_file encrypt_message > message\0A\00"
define void @help() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([740 x i8], [740 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [740 x i8] c"Usage: arc4 [-d] [-r count] [[-i file]|[-n]] [-k file] [-v] [-h] file\0APurpose: This is block cipher with 256 bit key\0Aand 64x64 bit block, based on premutation feature\0A\0AOptions: \0A -d --decrypt - Decrypt Message\0A -r --rounds - Set rounds count (16 by default)\0A -i --use-iv - CBC mode with manual 512bit IV file\0A -n --use-internal-iv - CBC mode. load/generate IV with key file\0A -k --key - Set manual key file structure\0A -v --verison - Display version cipher information\0A -h --help - Show this help message\0A\0Astdout stream - Used for encrypt/decrypt file\0Astderr stream - Used for key structure or help message\0A\0AExample: \0Aarc4 message > ecnrypt_message 2> key_file\0Aarc4 -dk key_file encrypt_message > message\0A\00"
define void @help() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([740 x i8], [740 x i8]* @.str, i64 0, i64 0))
ret void
}