// File: daklqw[P]beepmania/main.cpp
// Function: main
int main(int argc, char ** argv) {
	if (argc <= 1) return 0;
	gamecore gm;
	FILE * fin = fopen(argc < 3 ? "track.ini" : argv[2], "r");
	if (fin == NULL) {
		std::cerr << "Cannot open config file" << std::endl;
		return -1;
	}
	char keybd[1024], beep[1024];
	fgets(keybd, 1024, fin);
	keybd[strlen(keybd) - 1] = 0;
	fgets(beep, 1024, fin);
	beep[strlen(beep) - 1] = 0;
	if (gm.registerkeybd(keybd) < 0) {
		std::cerr << "Open keyboard event error" << std::endl;
		return -1;
	}
	if (gm.configsound(beep) < 0) {
		std::cerr << "Open beep device error" << std::endl;
		return -1;
	}
	gm.configscore();
	gm.configtrack(fin);
	gm.configui();
	fin = fopen(argv[1], "r");
	if (fin == NULL) {
		std::cerr << "Cannot open " << argv[1] << std::endl;
		return -1;
	}
	gm.readbeatmap(fin);
	fclose(fin);
	gm.setsound(true);
	gm.warn();
	gm.start();
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xe40, %rsp            # imm = 0xE40
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpl $0x1, -0x8(%rbp)
jg 0xc8ab
movl $0x0, -0x4(%rbp)
jmp 0xcbfc
leaq -0x5c0(%rbp), %rdi
callq 0x2900
cmpl $0x3, -0x8(%rbp)
jge 0xc8cd
leaq 0x4959(%rip), %rax      # 0x1121d
movq %rax, -0xde8(%rbp)
jmp 0xc8dc
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0xde8(%rbp)
movq -0xde8(%rbp), %rdi
leaq 0x4984(%rip), %rsi      # 0x1126e
callq 0x21f0
movq %rax, -0xdf0(%rbp)
jmp 0xc8f8
movq -0xdf0(%rbp), %rax
movq %rax, -0x5c8(%rbp)
cmpq $0x0, -0x5c8(%rbp)
jne 0xc97a
movq 0xe6d9(%rip), %rdi      # 0x1aff0
leaq 0x4909(%rip), %rsi      # 0x11227
callq 0x2160
movq %rax, -0xdf8(%rbp)
jmp 0xc92c
movq -0xdf8(%rbp), %rdi
movq 0xe67e(%rip), %rsi      # 0x1afb8
callq 0x21d0
jmp 0xc941
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x5d8(%rbp)
jmp 0xcbf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x5d0(%rbp)
movl %eax, -0x5d4(%rbp)
leaq -0x5c0(%rbp), %rdi
callq 0x2a50
jmp 0xcc08
movq -0x5c8(%rbp), %rdx
leaq -0x9e0(%rbp), %rdi
movl $0x400, %esi            # imm = 0x400
callq 0x22a0
jmp 0xc994
leaq -0x9e0(%rbp), %rdi
movq %rdi, -0xe00(%rbp)
callq 0x20b0
movq -0xe00(%rbp), %rcx
movb $0x0, -0x1(%rax,%rcx)
movq -0x5c8(%rbp), %rdx
leaq -0xde0(%rbp), %rdi
movl $0x400, %esi            # imm = 0x400
callq 0x22a0
jmp 0xc9cd
leaq -0xde0(%rbp), %rdi
movq %rdi, -0xe10(%rbp)
callq 0x20b0
movq -0xe10(%rbp), %rcx
movb $0x0, -0x1(%rax,%rcx)
leaq -0x5c0(%rbp), %rdi
leaq -0x9e0(%rbp), %rsi
callq 0x2ae0
movl %eax, -0xe04(%rbp)
jmp 0xca07
movl -0xe04(%rbp), %eax
cmpl $0x0, %eax
jge 0xca59
movq 0xe5d7(%rip), %rdi      # 0x1aff0
leaq 0x481f(%rip), %rsi      # 0x1123f
callq 0x2160
movq %rax, -0xe18(%rbp)
jmp 0xca2e
movq -0xe18(%rbp), %rdi
movq 0xe57c(%rip), %rsi      # 0x1afb8
callq 0x21d0
jmp 0xca43
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x5d8(%rbp)
jmp 0xcbf0
leaq -0x5c0(%rbp), %rdi
leaq -0xde0(%rbp), %rsi
callq 0x2b10
movl %eax, -0xe1c(%rbp)
jmp 0xca74
movl -0xe1c(%rbp), %eax
cmpl $0x0, %eax
jge 0xcac6
movq 0xe56a(%rip), %rdi      # 0x1aff0
leaq 0x47cc(%rip), %rsi      # 0x11259
callq 0x2160
movq %rax, -0xe28(%rbp)
jmp 0xca9b
movq -0xe28(%rbp), %rdi
movq 0xe50f(%rip), %rsi      # 0x1afb8
callq 0x21d0
jmp 0xcab0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x5d8(%rbp)
jmp 0xcbf0
leaq -0x5c0(%rbp), %rdi
callq 0x2b40
jmp 0xcad4
movq -0x5c8(%rbp), %rsi
leaq -0x5c0(%rbp), %rdi
callq 0x30a0
jmp 0xcae9
leaq -0x5c0(%rbp), %rdi
callq 0x3390
jmp 0xcaf7
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x4768(%rip), %rsi      # 0x1126e
callq 0x21f0
movq %rax, -0xe30(%rbp)
jmp 0xcb14
movq -0xe30(%rbp), %rax
movq %rax, -0x5c8(%rbp)
cmpq $0x0, -0x5c8(%rbp)
jne 0xcb8d
movq 0xe4bd(%rip), %rdi      # 0x1aff0
leaq 0x4736(%rip), %rsi      # 0x11270
callq 0x2160
movq %rax, -0xe38(%rbp)
jmp 0xcb48
movq -0xe38(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x2160
movq %rax, -0xe40(%rbp)
jmp 0xcb65
movq -0xe40(%rbp), %rdi
movq 0xe445(%rip), %rsi      # 0x1afb8
callq 0x21d0
jmp 0xcb7a
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl $0x1, -0x5d8(%rbp)
jmp 0xcbf0
movq -0x5c8(%rbp), %rsi
leaq -0x5c0(%rbp), %rdi
callq 0x2b80
jmp 0xcba2
movq -0x5c8(%rbp), %rdi
callq 0x2170
jmp 0xcbb0
leaq -0x5c0(%rbp), %rdi
movl $0x1, %esi
callq 0x3760
jmp 0xcbc3
leaq -0x5c0(%rbp), %rdi
callq 0x3730
jmp 0xcbd1
leaq -0x5c0(%rbp), %rdi
callq 0x35b0
jmp 0xcbdf
movl $0x0, -0x4(%rbp)
movl $0x1, -0x5d8(%rbp)
leaq -0x5c0(%rbp), %rdi
callq 0x2a50
movl -0x4(%rbp), %eax
addq $0xe40, %rsp            # imm = 0xE40
popq %rbp
retq
movq -0x5d0(%rbp), %rdi
callq 0x2300
nopw %cs:(%rax,%rax)
nop