// File: /workspace/github_cpp_makefile_star2_O2/pranavmodx[P]modlang/test/lexer_test.cpp
// Function: testNextToken()
void testNextToken()
{
	std::string input =
		"let five = 5; "
		"let ten = 10; "

		"let add = def(x, y) { "
		"x + y; "
		"}; "
		"let result = add(five, ten); "

		"!-/*5; "
		"5 < 10 > 5; "

		"if (5 < 10) { "
		"return true; "
		"} else { "
		"return false; "
		"} "

		"10 == 10; "
		"10 != 9; "

		"\"foobar\" "
		"\"foo bar\" "

		"[1, 2]; "
		"{\"foo\": \"bar\"} ";

	std::vector<std::pair<TokenType, std::string>> tests;
	tests.reserve(100);

	tests = {
		{LET, "let"},
		{IDENT, "five"},
		{ASSIGN, "="},
		{INTEGER, "5"},
		{SEMICOLON, ";"},
		{LET, "let"},
		{IDENT, "ten"},
		{ASSIGN, "="},
		{INTEGER, "10"},
		{SEMICOLON, ";"},
		{LET, "let"},
		{IDENT, "add"},
		{ASSIGN, "="},
		{FUNCTION, "def"},
		{LPAREN, "("},
		{IDENT, "x"},
		{COMMA, ","},
		{IDENT, "y"},
		{RPAREN, ")"},
		{LBRACE, "{"},
		{IDENT, "x"},
		{PLUS, "+"},
		{IDENT, "y"},
		{SEMICOLON, ";"},
		{RBRACE, "}"},
		{SEMICOLON, ";"},
		{LET, "let"},
		{IDENT, "result"},
		{ASSIGN, "="},
		{IDENT, "add"},
		{LPAREN, "("},
		{IDENT, "five"},
		{COMMA, ","},
		{IDENT, "ten"},
		{RPAREN, ")"},
		{SEMICOLON, ";"},
		{BANG, "!"},
		{MINUS, "-"},
		{SLASH, "/"},
		{ASTERISK, "*"},
		{INTEGER, "5"},
		{SEMICOLON, ";"},
		{INTEGER, "5"},
		{LT, "<"},
		{INTEGER, "10"},
		{GT, ">"},
		{INTEGER, "5"},
		{SEMICOLON, ";"},
		{IF, "if"},
		{LPAREN, "("},
		{INTEGER, "5"},
		{LT, "<"},
		{INTEGER, "10"},
		{RPAREN, ")"},
		{LBRACE, "{"},
		{RETURN, "return"},
		{TRUE, "true"},
		{SEMICOLON, ";"},
		{RBRACE, "}"},
		{ELSE, "else"},
		{LBRACE, "{"},
		{RETURN, "return"},
		{FALSE, "false"},
		{SEMICOLON, ";"},
		{RBRACE, "}"},
		{INTEGER, "10"},
		{EQ, "=="},
		{INTEGER, "10"},
		{SEMICOLON, ";"},
		{INTEGER, "10"},
		{NEQ, "!="},
		{INTEGER, "9"},
		{SEMICOLON, ";"},
		{STRING, "foobar"},
		{STRING, "foo bar"},
		{LBRACKET, "["},
		{INTEGER, "1"},
		{COMMA, ","},
		{INTEGER, "2"},
		{RBRACKET, "]"},
		{SEMICOLON, ";"},
		{LBRACE, "{"},
		{STRING, "foo"},
		{COLON, ":"},
		{STRING, "bar"},
		{RBRACE, "}"},
		{END, ""}};

	Lexer lexer;
	lexer.New(input);

	Token token;
	for (int i = 0; i < tests.size(); i++)
	{
		token = lexer.nextToken();

		if (token.type != tests[i].first)
			std::cout << i << "expected " << tests[i].first << ", got " << token.type << std::endl;

		if (token.literal != tests[i].second)
			std::cout << i << "expected " << tests[i].second << ", got " << token.literal << std::endl;
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1668, %rsp           # imm = 0x1668
leaq 0x369c(%rip), %rsi      # 0x70aa
leaq 0x18(%rsp), %rdi
leaq 0x68(%rsp), %rdx
callq 0x46b0
xorps %xmm0, %xmm0
movq %rsp, %rdi
movaps %xmm0, (%rdi)
andq $0x0, 0x10(%rdi)
pushq $0x64
popq %rsi
callq 0x46ec
leaq 0x6a9e(%rip), %rsi      # 0xa4d8
leaq 0x3747(%rip), %rdx      # 0x7188
leaq 0x68(%rsp), %rbx
movq %rbx, %rdi
callq 0x4780
leaq 0xa8(%rsp), %r14
leaq 0x671b(%rip), %rsi      # 0xa178
leaq 0x3728(%rip), %rdx      # 0x718c
movq %r14, %rdi
callq 0x47bc
leaq 0xe8(%rsp), %r14
leaq 0x675d(%rip), %rsi      # 0xa1d8
leaq 0x35bd(%rip), %rdx      # 0x703f
movq %r14, %rdi
callq 0x47f8
leaq 0x128(%rsp), %r14
leaq 0x66ff(%rip), %rsi      # 0xa198
leaq 0x36f1(%rip), %rdx      # 0x7191
movq %r14, %rdi
callq 0x47f8
leaq 0x168(%rsp), %r14
leaq 0x68e1(%rip), %rsi      # 0xa398
leaq 0x3585(%rip), %rdx      # 0x7043
movq %r14, %rdi
callq 0x47f8
leaq 0x1a8(%rsp), %r14
leaq 0x6a03(%rip), %rsi      # 0xa4d8
leaq 0x36ac(%rip), %rdx      # 0x7188
movq %r14, %rdi
callq 0x4780
leaq 0x1e8(%rsp), %r14
leaq 0x6685(%rip), %rsi      # 0xa178
leaq 0x3699(%rip), %rdx      # 0x7193
movq %r14, %rdi
callq 0x4780
leaq 0x228(%rsp), %r14
leaq 0x66c7(%rip), %rsi      # 0xa1d8
leaq 0x3527(%rip), %rdx      # 0x703f
movq %r14, %rdi
callq 0x47f8
leaq 0x268(%rsp), %r14
leaq 0x6669(%rip), %rsi      # 0xa198
leaq 0x3661(%rip), %rdx      # 0x7197
movq %r14, %rdi
callq 0x4834
leaq 0x2a8(%rsp), %r14
leaq 0x684b(%rip), %rsi      # 0xa398
leaq 0x34ef(%rip), %rdx      # 0x7043
movq %r14, %rdi
callq 0x47f8
leaq 0x2e8(%rsp), %r14
leaq 0x696d(%rip), %rsi      # 0xa4d8
leaq 0x3616(%rip), %rdx      # 0x7188
movq %r14, %rdi
callq 0x4780
leaq 0x328(%rsp), %r14
leaq 0x65ef(%rip), %rsi      # 0xa178
leaq 0x360a(%rip), %rdx      # 0x719a
movq %r14, %rdi
callq 0x4780
leaq 0x368(%rsp), %r14
leaq 0x6631(%rip), %rsi      # 0xa1d8
leaq 0x3491(%rip), %rdx      # 0x703f
movq %r14, %rdi
callq 0x47f8
leaq 0x3a8(%rsp), %r14
leaq 0x6993(%rip), %rsi      # 0xa558
leaq 0x35d2(%rip), %rdx      # 0x719e
movq %r14, %rdi
callq 0x4780
leaq 0x3e8(%rsp), %r14
leaq 0x67f5(%rip), %rsi      # 0xa3d8
leaq 0x345d(%rip), %rdx      # 0x7047
movq %r14, %rdi
callq 0x47f8
leaq 0x428(%rsp), %r14
leaq 0x6577(%rip), %rsi      # 0xa178
leaq 0x359a(%rip), %rdx      # 0x71a2
movq %r14, %rdi
callq 0x47f8
leaq 0x468(%rsp), %r14
leaq 0x6759(%rip), %rsi      # 0xa378
leaq 0x341b(%rip), %rdx      # 0x7041
movq %r14, %rdi
callq 0x47f8
leaq 0x4a8(%rsp), %r14
leaq 0x653b(%rip), %rsi      # 0xa178
leaq 0x3560(%rip), %rdx      # 0x71a4
movq %r14, %rdi
callq 0x47f8
leaq 0x4e8(%rsp), %r14
leaq 0x679d(%rip), %rsi      # 0xa3f8
leaq 0x35f8(%rip), %rdx      # 0x725a
movq %r14, %rdi
callq 0x47f8
leaq 0x528(%rsp), %r14
leaq 0x679f(%rip), %rsi      # 0xa418
leaq 0x33c9(%rip), %rdx      # 0x7049
movq %r14, %rdi
callq 0x47f8
leaq 0x568(%rsp), %r14
leaq 0x64e1(%rip), %rsi      # 0xa178
leaq 0x3504(%rip), %rdx      # 0x71a2
movq %r14, %rdi
callq 0x47f8
leaq 0x5a8(%rsp), %r14
leaq 0x6543(%rip), %rsi      # 0xa1f8
leaq 0x3369(%rip), %rdx      # 0x7025
movq %r14, %rdi
callq 0x47f8
leaq 0x5e8(%rsp), %r14
leaq 0x64a5(%rip), %rsi      # 0xa178
leaq 0x34ca(%rip), %rdx      # 0x71a4
movq %r14, %rdi
callq 0x47f8
leaq 0x628(%rsp), %r14
leaq 0x66a7(%rip), %rsi      # 0xa398
leaq 0x334b(%rip), %rdx      # 0x7043
movq %r14, %rdi
callq 0x47f8
leaq 0x668(%rsp), %r14
leaq 0x6729(%rip), %rsi      # 0xa438
leaq 0x3335(%rip), %rdx      # 0x704b
movq %r14, %rdi
callq 0x47f8
leaq 0x6a8(%rsp), %r14
leaq 0x666b(%rip), %rsi      # 0xa398
leaq 0x330f(%rip), %rdx      # 0x7043
movq %r14, %rdi
callq 0x47f8
leaq 0x6e8(%rsp), %r14
leaq 0x678d(%rip), %rsi      # 0xa4d8
leaq 0x3436(%rip), %rdx      # 0x7188
movq %r14, %rdi
callq 0x4780
leaq 0x728(%rsp), %r14
leaq 0x640f(%rip), %rsi      # 0xa178
leaq 0x3436(%rip), %rdx      # 0x71a6
movq %r14, %rdi
callq 0x4870
leaq 0x768(%rsp), %r14
leaq 0x6451(%rip), %rsi      # 0xa1d8
leaq 0x32b1(%rip), %rdx      # 0x703f
movq %r14, %rdi
callq 0x47f8
leaq 0x7a8(%rsp), %r14
leaq 0x63d3(%rip), %rsi      # 0xa178
leaq 0x33ee(%rip), %rdx      # 0x719a
movq %r14, %rdi
callq 0x4780
leaq 0x7e8(%rsp), %r14
leaq 0x6615(%rip), %rsi      # 0xa3d8
leaq 0x327d(%rip), %rdx      # 0x7047
movq %r14, %rdi
callq 0x47f8
leaq 0x828(%rsp), %r14
leaq 0x6397(%rip), %rsi      # 0xa178
leaq 0x33a4(%rip), %rdx      # 0x718c
movq %r14, %rdi
callq 0x47bc
leaq 0x868(%rsp), %r14
leaq 0x6579(%rip), %rsi      # 0xa378
leaq 0x323b(%rip), %rdx      # 0x7041
movq %r14, %rdi
callq 0x47f8
leaq 0x8a8(%rsp), %r14
leaq 0x635b(%rip), %rsi      # 0xa178
leaq 0x336f(%rip), %rdx      # 0x7193
movq %r14, %rdi
callq 0x4780
leaq 0x8e8(%rsp), %r14
leaq 0x65bd(%rip), %rsi      # 0xa3f8
leaq 0x3418(%rip), %rdx      # 0x725a
movq %r14, %rdi
callq 0x47f8
leaq 0x928(%rsp), %r14
leaq 0x653f(%rip), %rsi      # 0xa398
leaq 0x31e3(%rip), %rdx      # 0x7043
movq %r14, %rdi
callq 0x47f8
leaq 0x968(%rsp), %r14
leaq 0x63c1(%rip), %rsi      # 0xa238
leaq 0x31ab(%rip), %rdx      # 0x7029
movq %r14, %rdi
callq 0x47f8
leaq 0x9a8(%rsp), %r14
leaq 0x6383(%rip), %rsi      # 0xa218
leaq 0x318b(%rip), %rdx      # 0x7027
movq %r14, %rdi
callq 0x47f8
leaq 0x9e8(%rsp), %r14
leaq 0x63c5(%rip), %rsi      # 0xa278
leaq 0x3173(%rip), %rdx      # 0x702d
movq %r14, %rdi
callq 0x47f8
leaq 0xa28(%rsp), %r14
leaq 0x6387(%rip), %rsi      # 0xa258
leaq 0x3153(%rip), %rdx      # 0x702b
movq %r14, %rdi
callq 0x47f8
leaq 0xa68(%rsp), %r14
leaq 0x62a9(%rip), %rsi      # 0xa198
leaq 0x329b(%rip), %rdx      # 0x7191
movq %r14, %rdi
callq 0x47f8
leaq 0xaa8(%rsp), %r14
leaq 0x648b(%rip), %rsi      # 0xa398
leaq 0x312f(%rip), %rdx      # 0x7043
movq %r14, %rdi
callq 0x47f8
leaq 0xae8(%rsp), %r14
leaq 0x626d(%rip), %rsi      # 0xa198
leaq 0x325f(%rip), %rdx      # 0x7191
movq %r14, %rdi
callq 0x47f8
leaq 0xb28(%rsp), %r14
leaq 0x636f(%rip), %rsi      # 0xa2b8
leaq 0x30e1(%rip), %rdx      # 0x7031
movq %r14, %rdi
callq 0x47f8
leaq 0xb68(%rsp), %r14
leaq 0x6231(%rip), %rsi      # 0xa198
leaq 0x3229(%rip), %rdx      # 0x7197
movq %r14, %rdi
callq 0x4834
leaq 0xba8(%rsp), %r14
leaq 0x6353(%rip), %rsi      # 0xa2d8
leaq 0x30a7(%rip), %rdx      # 0x7033
movq %r14, %rdi
callq 0x47f8
leaq 0xbe8(%rsp), %r14
leaq 0x61f5(%rip), %rsi      # 0xa198
leaq 0x31e7(%rip), %rdx      # 0x7191
movq %r14, %rdi
callq 0x47f8
leaq 0xc28(%rsp), %r14
leaq 0x63d7(%rip), %rsi      # 0xa398
leaq 0x307b(%rip), %rdx      # 0x7043
movq %r14, %rdi
callq 0x47f8
leaq 0xc68(%rsp), %r14
leaq 0x6519(%rip), %rsi      # 0xa4f8
leaq 0x31c7(%rip), %rdx      # 0x71ad
movq %r14, %rdi
callq 0x4834
leaq 0xca8(%rsp), %r14
leaq 0x63db(%rip), %rsi      # 0xa3d8
leaq 0x3043(%rip), %rdx      # 0x7047
movq %r14, %rdi
callq 0x47f8
leaq 0xce8(%rsp), %r14
leaq 0x617d(%rip), %rsi      # 0xa198
leaq 0x316f(%rip), %rdx      # 0x7191
movq %r14, %rdi
callq 0x47f8
leaq 0xd28(%rsp), %r14
leaq 0x627f(%rip), %rsi      # 0xa2b8
leaq 0x2ff1(%rip), %rdx      # 0x7031
movq %r14, %rdi
callq 0x47f8
leaq 0xd68(%rsp), %r14
leaq 0x6141(%rip), %rsi      # 0xa198
leaq 0x3139(%rip), %rdx      # 0x7197
movq %r14, %rdi
callq 0x4834
leaq 0xda8(%rsp), %r14
leaq 0x6383(%rip), %rsi      # 0xa3f8
leaq 0x31de(%rip), %rdx      # 0x725a
movq %r14, %rdi
callq 0x47f8
leaq 0xde8(%rsp), %r14
leaq 0x6385(%rip), %rsi      # 0xa418
leaq 0x2faf(%rip), %rdx      # 0x7049
movq %r14, %rdi
callq 0x47f8
leaq 0xe28(%rsp), %r14
leaq 0x64c7(%rip), %rsi      # 0xa578
leaq 0x30f8(%rip), %rdx      # 0x71b0
movq %r14, %rdi
callq 0x4870
leaq 0xe68(%rsp), %r14
leaq 0x63c9(%rip), %rsi      # 0xa498
leaq 0x30e1(%rip), %rdx      # 0x71b7
movq %r14, %rdi
callq 0x47bc
leaq 0xea8(%rsp), %r14
leaq 0x62ab(%rip), %rsi      # 0xa398
leaq 0x2f4f(%rip), %rdx      # 0x7043
movq %r14, %rdi
callq 0x47f8
leaq 0xee8(%rsp), %r14
leaq 0x632d(%rip), %rsi      # 0xa438
leaq 0x2f39(%rip), %rdx      # 0x704b
movq %r14, %rdi
callq 0x47f8
leaq 0xf28(%rsp), %r14
leaq 0x63ef(%rip), %rsi      # 0xa518
leaq 0x308c(%rip), %rdx      # 0x71bc
movq %r14, %rdi
callq 0x47bc
leaq 0xf68(%rsp), %r14
leaq 0x62d1(%rip), %rsi      # 0xa418
leaq 0x2efb(%rip), %rdx      # 0x7049
movq %r14, %rdi
callq 0x47f8
leaq 0xfa8(%rsp), %r14
leaq 0x6413(%rip), %rsi      # 0xa578
leaq 0x3044(%rip), %rdx      # 0x71b0
movq %r14, %rdi
callq 0x4870
leaq 0xfe8(%rsp), %r14
leaq 0x6335(%rip), %rsi      # 0xa4b8
leaq 0x3037(%rip), %rdx      # 0x71c1
movq %r14, %rdi
callq 0x48ac
leaq 0x1028(%rsp), %r14
leaq 0x61f7(%rip), %rsi      # 0xa398
leaq 0x2e9b(%rip), %rdx      # 0x7043
movq %r14, %rdi
callq 0x47f8
leaq 0x1068(%rsp), %r14
leaq 0x6279(%rip), %rsi      # 0xa438
leaq 0x2e85(%rip), %rdx      # 0x704b
movq %r14, %rdi
callq 0x47f8
leaq 0x10a8(%rsp), %r14
leaq 0x5fbb(%rip), %rsi      # 0xa198
leaq 0x2fb3(%rip), %rdx      # 0x7197
movq %r14, %rdi
callq 0x4834
leaq 0x10e8(%rsp), %r14
leaq 0x613d(%rip), %rsi      # 0xa338
leaq 0x2e39(%rip), %rdx      # 0x703b
movq %r14, %rdi
callq 0x4834
leaq 0x1128(%rsp), %r14
leaq 0x5f7f(%rip), %rsi      # 0xa198
leaq 0x2f77(%rip), %rdx      # 0x7197
movq %r14, %rdi
callq 0x4834
leaq 0x1168(%rsp), %r14
leaq 0x6161(%rip), %rsi      # 0xa398
leaq 0x2e05(%rip), %rdx      # 0x7043
movq %r14, %rdi
callq 0x47f8
leaq 0x11a8(%rsp), %r14
leaq 0x5f43(%rip), %rsi      # 0xa198
leaq 0x2f3b(%rip), %rdx      # 0x7197
movq %r14, %rdi
callq 0x4834
leaq 0x11e8(%rsp), %r14
leaq 0x60e5(%rip), %rsi      # 0xa358
leaq 0x2dc4(%rip), %rdx      # 0x703e
movq %r14, %rdi
callq 0x4834
leaq 0x1228(%rsp), %r14
leaq 0x5f07(%rip), %rsi      # 0xa198
leaq 0x2f2f(%rip), %rdx      # 0x71c7
movq %r14, %rdi
callq 0x47f8
leaq 0x1268(%rsp), %r14
leaq 0x60e9(%rip), %rsi      # 0xa398
leaq 0x2d8d(%rip), %rdx      # 0x7043
movq %r14, %rdi
callq 0x47f8
leaq 0x12a8(%rsp), %r14
leaq 0x5eeb(%rip), %rsi      # 0xa1b8
leaq 0x2ef5(%rip), %rdx      # 0x71c9
movq %r14, %rdi
callq 0x4870
leaq 0x12e8(%rsp), %r14
leaq 0x5ecd(%rip), %rsi      # 0xa1b8
leaq 0x2ede(%rip), %rdx      # 0x71d0
movq %r14, %rdi
callq 0x48e8
leaq 0x1328(%rsp), %r14
leaq 0x614f(%rip), %rsi      # 0xa458
leaq 0x2d3d(%rip), %rdx      # 0x704d
movq %r14, %rdi
callq 0x47f8
leaq 0x1368(%rsp), %r14
leaq 0x5e71(%rip), %rsi      # 0xa198
leaq 0x2eaa(%rip), %rdx      # 0x71d8
movq %r14, %rdi
callq 0x47f8
leaq 0x13a8(%rsp), %r14
leaq 0x6033(%rip), %rsi      # 0xa378
leaq 0x2cf5(%rip), %rdx      # 0x7041
movq %r14, %rdi
callq 0x47f8
leaq 0x13e8(%rsp), %r14
leaq 0x5e35(%rip), %rsi      # 0xa198
leaq 0x2e70(%rip), %rdx      # 0x71da
movq %r14, %rdi
callq 0x47f8
leaq 0x1428(%rsp), %r14
leaq 0x60f7(%rip), %rsi      # 0xa478
leaq 0x2cc7(%rip), %rdx      # 0x704f
movq %r14, %rdi
callq 0x47f8
leaq 0x1468(%rsp), %r14
leaq 0x5ff9(%rip), %rsi      # 0xa398
leaq 0x2c9d(%rip), %rdx      # 0x7043
movq %r14, %rdi
callq 0x47f8
leaq 0x14a8(%rsp), %r14
leaq 0x605b(%rip), %rsi      # 0xa418
leaq 0x2c85(%rip), %rdx      # 0x7049
movq %r14, %rdi
callq 0x47f8
leaq 0x14e8(%rsp), %r14
leaq 0x5ddd(%rip), %rsi      # 0xa1b8
leaq 0x2dfa(%rip), %rdx      # 0x71dc
movq %r14, %rdi
callq 0x4780
leaq 0x1528(%rsp), %r14
leaq 0x5fbf(%rip), %rsi      # 0xa3b8
leaq 0x2c45(%rip), %rdx      # 0x7045
movq %r14, %rdi
callq 0x47f8
leaq 0x1568(%rsp), %r14
leaq 0x5da1(%rip), %rsi      # 0xa1b8
leaq 0x2db6(%rip), %rdx      # 0x71d4
movq %r14, %rdi
callq 0x4780
leaq 0x15a8(%rsp), %r14
leaq 0x6003(%rip), %rsi      # 0xa438
leaq 0x2c0f(%rip), %rdx      # 0x704b
movq %r14, %rdi
callq 0x47f8
leaq 0x15e8(%rsp), %r14
leaq 0x5d05(%rip), %rsi      # 0xa158
leaq 0x2d8f(%rip), %rdx      # 0x71e9
movq %r14, %rdi
callq 0x4924
leaq 0x1628(%rsp), %rdx
movq %rsp, %rdi
leaq 0x68(%rsp), %rsi
callq 0x4b94
movl $0x1580, %ebx           # imm = 0x1580
leaq (%rsp,%rbx), %rdi
addq $0x68, %rdi
callq 0x4960
addq $-0x40, %rbx
cmpq $-0x40, %rbx
jne 0x447c
leaq 0x48(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x38(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x57f2
leaq 0x78(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ebp, %ebp
movb %bpl, (%rax)
leaq 0x88(%rsp), %rbx
leaq 0x98(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %bpl, (%rax)
leaq 0x1628(%rsp), %r14
leaq 0x68(%rsp), %r12
leaq 0x2cf4(%rip), %r15      # 0x71ea
xorl %r13d, %r13d
movq 0x8(%rsp), %rax
subq (%rsp), %rax
sarq $0x6, %rax
cmpq %r13, %rax
jbe 0x4601
movq %r14, %rdi
leaq 0x38(%rsp), %rsi
callq 0x582a
movq %r12, %rdi
movq %r14, %rsi
callq 0x4976
movq %r14, %rdi
callq 0x49a0
movq (%rsp), %rsi
addq %rbp, %rsi
movq %r12, %rdi
callq 0x49b6
testb %al, %al
je 0x458d
movq 0x5a8f(%rip), %rdi      # 0x9fd8
movl %r13d, %esi
callq 0x2200
movq %rax, %rdi
leaq 0x2c85(%rip), %rsi      # 0x71e0
callq 0x2130
movq (%rsp), %rsi
addq %rbp, %rsi
movq %rax, %rdi
callq 0x2120
movq %rax, %rdi
movq %r15, %rsi
callq 0x2130
movq %rax, %rdi
movq %r12, %rsi
callq 0x2120
movq %rax, %rdi
callq 0x2090
movq (%rsp), %rax
leaq (%rax,%rbp), %rsi
addq $0x20, %rsi
movq %rbx, %rdi
callq 0x49b6
testb %al, %al
je 0x45f5
movq 0x5a2c(%rip), %rdi      # 0x9fd8
movl %r13d, %esi
callq 0x2200
movq %rax, %rdi
leaq 0x2c22(%rip), %rsi      # 0x71e0
callq 0x2130
movq (%rsp), %rcx
leaq (%rcx,%rbp), %rsi
addq $0x20, %rsi
movq %rax, %rdi
callq 0x2120
movq %rax, %rdi
movq %r15, %rsi
callq 0x2130
movq %rax, %rdi
movq %rbx, %rsi
callq 0x2120
movq %rax, %rdi
callq 0x2090
incq %r13
addq $0x40, %rbp
jmp 0x44f9
leaq 0x68(%rsp), %rdi
callq 0x49a0
leaq 0x38(%rsp), %rdi
callq 0x2238
movq %rsp, %rdi
callq 0x49c0
leaq 0x18(%rsp), %rdi
callq 0x2238
addq $0x1668, %rsp           # imm = 0x1668
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r15
jmp 0x468b
movq %rax, %r15
movl $0x1580, %ebx           # imm = 0x1580
leaq (%rsp,%rbx), %rdi
addq $0x68, %rdi
callq 0x4960
addq $-0x40, %rbx
cmpq $-0x40, %rbx
jne 0x4646
jmp 0x4695
jmp 0x4661
movq %rax, %r15
jmp 0x4695
jmp 0x467e
movq %rax, %r15
addq $-0x40, %r14
movq %r14, %rdi
callq 0x4960
cmpq %rbx, %r14
jne 0x466b
jmp 0x4695
movq %rax, %r15
leaq 0x68(%rsp), %rdi
callq 0x49a0
leaq 0x38(%rsp), %rdi
callq 0x2238
movq %rsp, %rdi
callq 0x49c0
leaq 0x18(%rsp), %rdi
callq 0x2238
movq %r15, %rdi
callq 0x2210
nop