// File: /workspace/github_cpp_makefile_star2_O2/yanlinlin82[P]icpp/icpp.cpp
// Function: init_symbol()
void init_symbol()
{
	log<3>("[DEBUG] prepare external symbols\n");
	add_external_symbol("cout", "ostream");
	add_external_symbol("cerr", "ostream");
	add_external_symbol("endl", "endl_t", "void", 1);
	add_external_symbol("operator<<", "ostream,int", "ostream", 2);
	add_external_symbol("operator<<", "ostream,double", "ostream", 2);
	add_external_symbol("operator<<", "ostream,const char*", "ostream", 2);
	add_external_symbol("operator<<", "ostream,(*)(endl_t)", "ostream", 2);
	add_external_symbol("printf", "const char*,...", "int", -1);
	log<3>("[DEBUG] total %zd symbols are prepared\n", symbols.size());
	external_data_size = data_sec.size();
	external_code_size = code_sec.size();
	if (verbose >= 3) {
		size_t i = 0;
		for (auto it = symbols.begin(); it != symbols.end(); ++it) {
			auto name = it->first;
			auto [ is_code, offset, size, type_name, ret_type, arg_count ] = it->second;
			log("[DEBUG] [%zd] '%s': %s, offset=%zd, size=%zd, type='%s', ret_type='%s', arg_count=%d\n",
					i++, name.c_str(), (is_code ? "code" : "data"), offset, size, type_name.c_str(), ret_type.c_str(), arg_count);
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x388, %rsp            # imm = 0x388
leaq 0x9ebb(%rip), %rdi      # 0x16e8c
xorl %eax, %eax
callq 0xf138
leaq 0x9ecf(%rip), %rsi      # 0x16eae
leaq -0x3b0(%rbp), %rdi
leaq -0xb0(%rbp), %rdx
callq 0xf1f8
leaq 0x9eba(%rip), %rsi      # 0x16eb3
leaq -0x390(%rbp), %rdi
leaq -0x50(%rbp), %rdx
callq 0xf1f8
leaq 0xa474(%rip), %rsi      # 0x17484
leaq -0x370(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xf1f8
leaq -0x3b0(%rbp), %rdi
leaq -0x390(%rbp), %rsi
leaq -0x370(%rbp), %rdx
xorl %ecx, %ecx
callq 0x4c49
leaq -0x370(%rbp), %rdi
callq 0x3368
leaq -0x390(%rbp), %rdi
callq 0x3368
leaq -0x3b0(%rbp), %rdi
callq 0x3368
leaq 0x9e54(%rip), %rsi      # 0x16ebb
leaq -0x350(%rbp), %rdi
leaq -0xb0(%rbp), %rdx
callq 0xf1f8
leaq 0x9e32(%rip), %rsi      # 0x16eb3
leaq -0x330(%rbp), %rdi
leaq -0x50(%rbp), %rdx
callq 0xf1f8
leaq 0xa3ec(%rip), %rsi      # 0x17484
leaq -0x310(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xf1f8
leaq -0x350(%rbp), %rdi
leaq -0x330(%rbp), %rsi
leaq -0x310(%rbp), %rdx
xorl %ecx, %ecx
callq 0x4c49
leaq -0x310(%rbp), %rdi
callq 0x3368
leaq -0x330(%rbp), %rdi
callq 0x3368
leaq -0x350(%rbp), %rdi
callq 0x3368
leaq 0x9dd1(%rip), %rsi      # 0x16ec0
leaq -0x2f0(%rbp), %rdi
leaq -0xb0(%rbp), %rdx
callq 0xf1f8
leaq 0x9dbc(%rip), %rsi      # 0x16ec5
leaq -0x2d0(%rbp), %rdi
leaq -0x50(%rbp), %rdx
callq 0xf1f8
leaq 0x9dac(%rip), %rsi      # 0x16ecc
leaq -0x2b0(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xf1f8
leaq -0x2f0(%rbp), %rdi
leaq -0x2d0(%rbp), %rsi
leaq -0x2b0(%rbp), %rdx
pushq $0x1
popq %rcx
callq 0x4c49
leaq -0x2b0(%rbp), %rdi
callq 0x3368
leaq -0x2d0(%rbp), %rdi
callq 0x3368
leaq -0x2f0(%rbp), %rdi
callq 0x3368
leaq 0x9d59(%rip), %rsi      # 0x16ed1
leaq -0x290(%rbp), %rdi
leaq -0xb0(%rbp), %rdx
callq 0xf1f8
leaq 0x9d4a(%rip), %rsi      # 0x16edc
leaq -0x270(%rbp), %rdi
leaq -0x50(%rbp), %rdx
callq 0xf1f8
leaq 0x9d0a(%rip), %rsi      # 0x16eb3
leaq -0x250(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xf1f8
leaq -0x290(%rbp), %rdi
leaq -0x270(%rbp), %rsi
leaq -0x250(%rbp), %rdx
pushq $0x2
popq %rcx
callq 0x4c49
leaq -0x250(%rbp), %rdi
callq 0x3368
leaq -0x270(%rbp), %rdi
callq 0x3368
leaq -0x290(%rbp), %rdi
callq 0x3368
leaq 0x9cd0(%rip), %rsi      # 0x16ed1
leaq -0x230(%rbp), %rdi
leaq -0xb0(%rbp), %rdx
callq 0xf1f8
leaq 0x9ccd(%rip), %rsi      # 0x16ee8
leaq -0x210(%rbp), %rdi
leaq -0x50(%rbp), %rdx
callq 0xf1f8
leaq 0x9c81(%rip), %rsi      # 0x16eb3
leaq -0x1f0(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xf1f8
leaq -0x230(%rbp), %rdi
leaq -0x210(%rbp), %rsi
leaq -0x1f0(%rbp), %rdx
pushq $0x2
popq %rcx
callq 0x4c49
leaq -0x1f0(%rbp), %rdi
callq 0x3368
leaq -0x210(%rbp), %rdi
callq 0x3368
leaq -0x230(%rbp), %rdi
callq 0x3368
leaq 0x9c47(%rip), %rsi      # 0x16ed1
leaq -0x1d0(%rbp), %rdi
leaq -0xb0(%rbp), %rdx
callq 0xf1f8
leaq 0x9c53(%rip), %rsi      # 0x16ef7
leaq -0x1b0(%rbp), %rdi
leaq -0x50(%rbp), %rdx
callq 0xf1f8
leaq 0x9bf8(%rip), %rsi      # 0x16eb3
leaq -0x190(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xf1f8
leaq -0x1d0(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
leaq -0x190(%rbp), %rdx
pushq $0x2
popq %rcx
callq 0x4c49
leaq -0x190(%rbp), %rdi
callq 0x3368
leaq -0x1b0(%rbp), %rdi
callq 0x3368
leaq -0x1d0(%rbp), %rdi
callq 0x3368
leaq 0x9bbe(%rip), %rsi      # 0x16ed1
leaq -0x170(%rbp), %rdi
leaq -0xb0(%rbp), %rdx
callq 0xf1f8
leaq 0x9bde(%rip), %rsi      # 0x16f0b
leaq -0x150(%rbp), %rdi
leaq -0x50(%rbp), %rdx
callq 0xf1f8
leaq 0x9b6f(%rip), %rsi      # 0x16eb3
leaq -0x130(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xf1f8
leaq -0x170(%rbp), %rdi
leaq -0x150(%rbp), %rsi
leaq -0x130(%rbp), %rdx
pushq $0x2
popq %rcx
callq 0x4c49
leaq -0x130(%rbp), %rdi
callq 0x3368
leaq -0x150(%rbp), %rdi
callq 0x3368
leaq -0x170(%rbp), %rdi
callq 0x3368
leaq 0x9217(%rip), %rsi      # 0x165b3
leaq -0x110(%rbp), %rdi
leaq -0xb0(%rbp), %rdx
callq 0xf1f8
leaq 0x9b69(%rip), %rsi      # 0x16f1f
leaq -0xf0(%rbp), %rdi
leaq -0x50(%rbp), %rdx
callq 0xf1f8
leaq 0x9b17(%rip), %rsi      # 0x16ee4
leaq -0xd0(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xf1f8
leaq -0x110(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
leaq -0xd0(%rbp), %rdx
pushq $-0x1
popq %rcx
callq 0x4c49
leaq -0xd0(%rbp), %rdi
callq 0x3368
leaq -0xf0(%rbp), %rdi
callq 0x3368
leaq -0x110(%rbp), %rdi
callq 0x3368
movq 0x13f83(%rip), %rsi     # 0x213a8
leaq 0x9b03(%rip), %rdi      # 0x16f2f
xorl %eax, %eax
callq 0xf138
movq 0x13ee6(%rip), %rax     # 0x21320
subq 0x13ed7(%rip), %rax     # 0x21318
sarq $0x2, %rax
movq %rax, 0x13ee4(%rip)     # 0x21330
movq 0x13eb5(%rip), %rax     # 0x21308
subq 0x13ea6(%rip), %rax     # 0x21300
sarq $0x2, %rax
movq %rax, 0x13ed3(%rip)     # 0x21338
cmpl $0x3, 0x14164(%rip)     # 0x215d0
jl 0xd519
leaq 0x13f27(%rip), %r13     # 0x213a0
leaq -0x50(%rbp), %rbx
leaq -0xb0(%rbp), %r14
xorl %r12d, %r12d
movq (%r13), %r13
testq %r13, %r13
je 0xd519
leaq 0x8(%r13), %rsi
movq %rbx, %rdi
callq 0x3270
leaq 0x28(%r13), %rsi
movq %r14, %rdi
callq 0x104b4
cmpb $0x0, -0x58(%rbp)
leaq 0x1(%r12), %r15
leaq 0x8e42(%rip), %rcx      # 0x162fe
leaq 0x8e36(%rip), %rax      # 0x162f9
cmovneq %rax, %rcx
movq -0x50(%rbp), %rdx
movq -0x60(%rbp), %r8
movq -0x68(%rbp), %r9
movl -0xb0(%rbp), %r10d
subq $0x8, %rsp
leaq 0x9a72(%rip), %rdi      # 0x16f57
movq %r12, %rsi
xorl %eax, %eax
pushq %r10
pushq -0xa8(%rbp)
pushq -0x88(%rbp)
callq 0xf09e
addq $0x20, %rsp
movq %r14, %rdi
callq 0xf1d4
movq %rbx, %rdi
callq 0x3368
movq %r15, %r12
jmp 0xd487
addq $0x388, %rsp            # imm = 0x388
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq -0xd0(%rbp), %rdi
callq 0x3368
jmp 0xd53f
movq %rax, %rbx
leaq -0xf0(%rbp), %rdi
callq 0x3368
jmp 0xd550
movq %rax, %rbx
leaq -0x110(%rbp), %rdi
jmp 0xd6d3
jmp 0xd6c7
movq %rax, %rbx
leaq -0x130(%rbp), %rdi
callq 0x3368
jmp 0xd575
movq %rax, %rbx
leaq -0x150(%rbp), %rdi
callq 0x3368
jmp 0xd586
movq %rax, %rbx
leaq -0x170(%rbp), %rdi
jmp 0xd6d3
jmp 0xd6c7
movq %rax, %rbx
leaq -0x190(%rbp), %rdi
callq 0x3368
jmp 0xd5ab
movq %rax, %rbx
leaq -0x1b0(%rbp), %rdi
callq 0x3368
jmp 0xd5bc
movq %rax, %rbx
leaq -0x1d0(%rbp), %rdi
jmp 0xd6d3
jmp 0xd6c7
movq %rax, %rbx
leaq -0x1f0(%rbp), %rdi
callq 0x3368
jmp 0xd5e1
movq %rax, %rbx
leaq -0x210(%rbp), %rdi
callq 0x3368
jmp 0xd5f2
movq %rax, %rbx
leaq -0x230(%rbp), %rdi
jmp 0xd6d3
jmp 0xd6c7
movq %rax, %rbx
leaq -0x250(%rbp), %rdi
callq 0x3368
jmp 0xd617
movq %rax, %rbx
leaq -0x270(%rbp), %rdi
callq 0x3368
jmp 0xd628
movq %rax, %rbx
leaq -0x290(%rbp), %rdi
jmp 0xd6d3
jmp 0xd6c7
movq %rax, %rbx
leaq -0x2b0(%rbp), %rdi
callq 0x3368
jmp 0xd64d
movq %rax, %rbx
leaq -0x2d0(%rbp), %rdi
callq 0x3368
jmp 0xd65e
movq %rax, %rbx
leaq -0x2f0(%rbp), %rdi
jmp 0xd6d3
jmp 0xd6c7
movq %rax, %rbx
leaq -0x310(%rbp), %rdi
callq 0x3368
jmp 0xd67d
movq %rax, %rbx
leaq -0x330(%rbp), %rdi
callq 0x3368
jmp 0xd68e
movq %rax, %rbx
leaq -0x350(%rbp), %rdi
jmp 0xd6d3
jmp 0xd6c7
movq %rax, %rbx
leaq -0x370(%rbp), %rdi
callq 0x3368
jmp 0xd6ad
movq %rax, %rbx
leaq -0x390(%rbp), %rdi
callq 0x3368
jmp 0xd6be
movq %rax, %rbx
leaq -0x3b0(%rbp), %rdi
jmp 0xd6d3
movq %rax, %rbx
jmp 0xd6d8
movq %rax, %rbx
leaq -0x50(%rbp), %rdi
callq 0x3368
movq %rbx, %rdi
callq 0x3310