// File: /workspace/github_cpp_makefile_star2_O2/AraKhachatryan[P]GraphAlgo/main.cpp
// Function: main
int main()
{
	// Printing a headline in terminal, used namespace termianl for text colors
	std::cout << std::endl;
	std::cout << "~~~~~~~~~~~~~~~ "
			  << terminal::TEXT_BOLD << terminal::TEXTCOLOR_BLUE
			  << "GraphAlgo: Algorithms library for planar graphs."
			  << terminal::RESET_ALL
			  << "~~~~~~~~~~~~~~~" << std::endl;
	
	// Initialize an empty graph object
	GraphAlgo::graph g;

	// Build a graph via adding edges
	g.add_edge(1, 2);
	g.add_edge(1, 4);	
	g.add_edge(2, 4);
	g.add_edge(2, 5);
	g.add_edge(3, 4);
	g.add_edge(3, 6);
	g.add_edge(3, 12);
	g.add_edge(3, 13);
	g.add_edge(4, 6);
	g.add_edge(4, 7);
	g.add_edge(5, 7);
	g.add_edge(6, 11);
	g.add_edge(6, 12);
	g.add_edge(7, 10);
	g.add_edge(7, 11);
	g.add_edge(8, 10);
	g.add_edge(8, 16);
	g.add_edge(9, 10);
	g.add_edge(9, 11);
	g.add_edge(9, 15);
	g.add_edge(10, 16);
	g.add_edge(11, 14);
	g.add_edge(12, 13);
	g.add_edge(14, 15);
	g.add_edge(15, 16);
	
	
	// Drawing a graph on terminal for visualisation
	draw_graph( graph_data );
	
	
	std::cout << "Printing graph as adjacency-list:" << std::endl;
	g.print_neighborhood();
	
	std::this_thread::sleep_for(std::chrono::milliseconds(4000));  // sleep
	
	
	
	
	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DFS Algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	
	// making dfs object and starting the algorithm from vertex 1 in graph g
	GraphAlgo::dfs depth_first(g, 1);
	
	GraphAlgo::graph g_out_dfs;
	g_out_dfs = depth_first();
	
	
	std::cout << "Executing DFS algorithm on initial graph with start vertex 1" << std::endl;
	// Drawing a graph on terminal for DFS Algorithm visualisation
	draw_graph( graph_data_dfs );	
	
	
	std::cout << "Print DFS algorithm output as adjacency-list:" << std::endl;
	g_out_dfs.print_neighborhood();
	
	std::this_thread::sleep_for(std::chrono::milliseconds(4000));  // sleep
	
	
	
	
	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~ Connectivity Algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	
	GraphAlgo::graph g_con = g;   // copy intitial graph		
	g_con.remove_vertex(7);       // remove vertex for disconecting a graph
	g_con.remove_edge(6, 11);     // remove edge for disconecting a graph
	
	std::cout << "Vertex 7 and edge (6, 11) removed from initial graph.";
	std::cout << std::endl;
//	g_con.print_neighborhood();
	
	
	// Drawing a graph on terminal for Connectivity visualisation
	draw_graph( graph_data_connectivity );	
	
	
	// making connectivity object and starting the algorithm
	GraphAlgo::connectivity con(g_con);
	
	if( !con.is_connected() )
	{
		std::cout << "Graph is not connected." << std::endl;
	} else {
		std::cout << "Graph not connected." << std::endl;
	}
	
	GraphAlgo::graphs con_out;
	con_out = con();
	
	std::cout << "Printing disconected graph's conected components:";
	std::cout << std::endl;
	
	GraphAlgo::graphs::const_iterator c_it = con_out.begin();
	for( ; c_it != con_out.end(); ++c_it) 
	{	
		std::cout << "+++++++++++++++++++++++" << std::endl;
		c_it->print_neighborhood();
	}
	
	std::this_thread::sleep_for(std::chrono::milliseconds(4000));  // sleep
	
	
	
	
	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~ BiConnectivity Algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	 
	GraphAlgo::graph g_bicon = g;  // copy intitial graph
	g_bicon.remove_edge(6, 11);    // for making graph not biconected
	
	std::cout << "From initial graph is removed edge(6, 11)." << std::endl;
//	g_bicon.print_neighborhood();
	
	
	// Drawing a graph on terminal for BiConnectivity visualisation
	draw_graph( graph_data_biconnectivity );	
	
	
	// making biconnectivity object and starting the algorithm
	GraphAlgo::biconnectivity bicon( g_bicon );
	
	if ( !bicon.is_biconnected() ) 
	{
		std::cout << "Graph is not bicoconnected." << std::endl;
		// Print cutvertices
		bicon.print_cutvertices();
	} else {
		std::cout << "Graph is bicoconnected." << std::endl;
	}
	
	GraphAlgo::graphs bicon_out;
	bicon_out = bicon();
	
	std::cout << "Printing graph's biconected components:" << std::endl;
	GraphAlgo::graphs::const_iterator b_it = bicon_out.begin();
	for( ; b_it != bicon_out.end(); ++b_it) 
	{
		std::cout << "+++++++++++++++++++++++" << std::endl;
		b_it->print_neighborhood();
	}
	
	std::this_thread::sleep_for(std::chrono::milliseconds(4000));  // sleep
	
	
	
	
	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~ Dijkstra's Algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	
	// making dijkstra object from initial graph g
	GraphAlgo::dijkstra dijk(g);
	
	// 
	dijk.set_edge_weight(1, 2, 1);
	dijk.set_edge_weight(1, 4, 5);	
	dijk.set_edge_weight(2, 4, 3);
	dijk.set_edge_weight(2, 5, 2);
	dijk.set_edge_weight(3, 4, 4);
	dijk.set_edge_weight(3, 6, 2);
	dijk.set_edge_weight(3, 12, 3);
	dijk.set_edge_weight(3, 13, 1);
	dijk.set_edge_weight(4, 6, 6);
	dijk.set_edge_weight(4, 7, 3);
	dijk.set_edge_weight(5, 7, 1);
	dijk.set_edge_weight(6, 11, 5);
	dijk.set_edge_weight(6, 12, 1);
	dijk.set_edge_weight(7, 10, 2);
	dijk.set_edge_weight(7, 11, 9);
	dijk.set_edge_weight(8, 10, 1);
	dijk.set_edge_weight(8, 16, 1);
	dijk.set_edge_weight(9, 10, 3);
	dijk.set_edge_weight(9, 11, 4);
	dijk.set_edge_weight(9, 15, 2);
	dijk.set_edge_weight(10, 16, 3);
	dijk.set_edge_weight(11, 14, 1);
	dijk.set_edge_weight(12, 13, 2);
	dijk.set_edge_weight(14, 15, 1);
	dijk.set_edge_weight(15, 16, 2);
	
	
	// Drawing a graph on terminal for Dijkstra's Algorithm visualisation
	draw_graph( graph_data_dijkstra);	
	

	dijk.shortest_paths_from(1);
	dijk.get_shortest_path_to(14);
	dijk.print_path();
	std::cout << std::endl;
	
	// another shortest path: from 1 to 9
	dijk.get_shortest_path_to(9);
	dijk.print_path();
	std::cout << std::endl;

	// another shortest path: from 13 to 8
	dijk.shortest_paths_from(13);
	dijk.get_shortest_path_to(8);
	dijk.print_path();


	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	
	
	return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x760, %rsp            # imm = 0x760
movq 0x9699(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x20c0
leaq 0x2bba(%rip), %rsi      # 0xb508
movq %rbx, %rdi
callq 0x2160
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9a3c
pushq $0x22
popq %rsi
movq %rax, %rdi
callq 0x9a3c
leaq 0x2ba6(%rip), %rsi      # 0xb519
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
xorl %esi, %esi
callq 0x9a3c
leaq 0x2dd8(%rip), %rsi      # 0xb764
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20c0
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
callq 0x769a
leaq 0x288(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x2, (%rdx)
movq %rbx, %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x5, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x6, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xc, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xd, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x6, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x7, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x5, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x7, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x6, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x6, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xc, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x7, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x7, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x8, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x8, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xf, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0xa, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0xb, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xe, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0xc, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xd, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0xe, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xf, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x288(%rsp), %rsi
movl $0xf, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x7114
leaq 0x93dc(%rip), %rdi      # 0x12140
callq 0x998a
movq 0x9268(%rip), %rdi      # 0x11fd8
leaq 0x27d3(%rip), %rsi      # 0xb54a
callq 0x2160
movq %rax, %rdi
callq 0x20c0
leaq 0x10(%rsp), %rdi
callq 0x7752
leaq 0x288(%rsp), %rdi
movq $0xfa0, (%rdi)          # imm = 0xFA0
callq 0x9a65
movq 0x922f(%rip), %rdi      # 0x11fd8
callq 0x20c0
movq %rax, %rdi
callq 0x20c0
movq 0x921b(%rip), %rdi      # 0x11fd8
leaq 0x27a8(%rip), %rsi      # 0xb56c
callq 0x2160
movq 0x9208(%rip), %rdi      # 0x11fd8
callq 0x20c0
movq %rax, %rdi
callq 0x20c0
leaq 0x288(%rsp), %rdx
movl $0x1, (%rdx)
leaq 0x628(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x4cc4
leaq 0x520(%rsp), %rdi
callq 0x769a
leaq 0x628(%rsp), %rdi
callq 0x4c1c
leaq 0x520(%rsp), %rdi
movq %rax, %rsi
callq 0x76e4
movq 0x91aa(%rip), %rdi      # 0x11fd8
leaq 0x2787(%rip), %rsi      # 0xb5bc
callq 0x2160
movq %rax, %rdi
callq 0x20c0
leaq 0x930f(%rip), %rdi      # 0x12158
callq 0x998a
movq 0x9183(%rip), %rdi      # 0x11fd8
leaq 0x279d(%rip), %rsi      # 0xb5f9
callq 0x2160
movq %rax, %rdi
callq 0x20c0
leaq 0x520(%rsp), %rdi
callq 0x7752
leaq 0x288(%rsp), %rdi
movq $0xfa0, (%rdi)          # imm = 0xFA0
callq 0x9a65
movq 0x9147(%rip), %rdi      # 0x11fd8
callq 0x20c0
movq %rax, %rdi
callq 0x20c0
movq 0x9133(%rip), %rdi      # 0x11fd8
leaq 0x277b(%rip), %rsi      # 0xb627
callq 0x2160
movq 0x9120(%rip), %rdi      # 0x11fd8
callq 0x20c0
movq %rax, %rdi
callq 0x20c0
leaq 0x460(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x75e0
leaq 0x460(%rsp), %rdi
pushq $0x7
popq %rsi
callq 0x6d5c
leaq 0x460(%rsp), %rdi
pushq $0x6
popq %rsi
pushq $0xb
popq %rdx
callq 0x6de8
movq 0x90d7(%rip), %rdi      # 0x11fd8
leaq 0x276f(%rip), %rsi      # 0xb677
callq 0x2160
movq 0x90c4(%rip), %rdi      # 0x11fd8
callq 0x20c0
leaq 0x9250(%rip), %rdi      # 0x12170
callq 0x998a
leaq 0x580(%rsp), %rdi
leaq 0x460(%rsp), %rsi
callq 0x4a8e
leaq 0x580(%rsp), %rdi
callq 0x4a5c
leaq 0x2777(%rip), %rcx      # 0xb6c5
leaq 0x2758(%rip), %rsi      # 0xb6ad
testb %al, %al
cmovneq %rcx, %rsi
movq 0x9076(%rip), %rdi      # 0x11fd8
callq 0x2160
movq %rax, %rdi
callq 0x20c0
xorps %xmm0, %xmm0
movaps %xmm0, 0x90(%rsp)
andq $0x0, 0xa0(%rsp)
leaq 0x580(%rsp), %rdi
callq 0x4b30
leaq 0x90(%rsp), %rdi
movq %rax, %rsi
callq 0x9aba
movq 0x9031(%rip), %rdi      # 0x11fd8
leaq 0x272c(%rip), %rsi      # 0xb6da
callq 0x2160
movq 0x901e(%rip), %rdi      # 0x11fd8
callq 0x20c0
movq 0x90(%rsp), %rbx
movq 0x900a(%rip), %r14      # 0x11fd8
leaq 0x2737(%rip), %r15      # 0xb70c
cmpq 0x98(%rsp), %rbx
je 0x9000
movq %r14, %rdi
movq %r15, %rsi
callq 0x2160
movq %rax, %rdi
callq 0x20c0
movq %rbx, %rdi
callq 0x7752
addq $0x60, %rbx
jmp 0x8fd5
leaq 0x288(%rsp), %rdi
movq $0xfa0, (%rdi)          # imm = 0xFA0
callq 0x9a65
movq 0x8fbd(%rip), %rdi      # 0x11fd8
callq 0x20c0
movq %rax, %rdi
callq 0x20c0
movq 0x8fa9(%rip), %rdi      # 0x11fd8
leaq 0x26ee(%rip), %rsi      # 0xb724
callq 0x2160
movq 0x8f96(%rip), %rdi      # 0x11fd8
callq 0x20c0
movq %rax, %rdi
callq 0x20c0
leaq 0x4c0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x75e0
leaq 0x4c0(%rsp), %rdi
pushq $0x6
popq %rsi
pushq $0xb
popq %rdx
callq 0x6de8
movq 0x8f5d(%rip), %rdi      # 0x11fd8
leaq 0x26f2(%rip), %rsi      # 0xb774
callq 0x2160
movq %rax, %rdi
callq 0x20c0
leaq 0x90f2(%rip), %rdi      # 0x12188
callq 0x998a
leaq 0x288(%rsp), %rdi
leaq 0x4c0(%rsp), %rsi
callq 0x349c
leaq 0x288(%rsp), %rdi
callq 0x305c
testb %al, %al
je 0x90de
movq 0x8f10(%rip), %rdi      # 0x11fd8
leaq 0x26ec(%rip), %rsi      # 0xb7bb
callq 0x2160
movq %rax, %rdi
callq 0x20c0
jmp 0x9106
movq 0x8ef3(%rip), %rdi      # 0x11fd8
leaq 0x26b3(%rip), %rsi      # 0xb79f
callq 0x2160
movq %rax, %rdi
callq 0x20c0
leaq 0x288(%rsp), %rdi
callq 0x3072
xorps %xmm0, %xmm0
movaps %xmm0, 0x70(%rsp)
andq $0x0, 0x80(%rsp)
leaq 0x288(%rsp), %rdi
callq 0x3726
leaq 0x70(%rsp), %rdi
movq %rax, %rsi
callq 0x9aba
movq 0x8ea0(%rip), %rdi      # 0x11fd8
leaq 0x2694(%rip), %rsi      # 0xb7d3
callq 0x2160
movq %rax, %rdi
callq 0x20c0
movq 0x70(%rsp), %rbx
movq 0x8e80(%rip), %r14      # 0x11fd8
leaq 0x25ad(%rip), %r15      # 0xb70c
cmpq 0x78(%rsp), %rbx
je 0x9187
movq %r14, %rdi
movq %r15, %rsi
callq 0x2160
movq %rax, %rdi
callq 0x20c0
movq %rbx, %rdi
callq 0x7752
addq $0x60, %rbx
jmp 0x915f
leaq 0xa8(%rsp), %rdi
movq $0xfa0, (%rdi)          # imm = 0xFA0
callq 0x9a65
movq 0x8e36(%rip), %rdi      # 0x11fd8
callq 0x20c0
movq %rax, %rdi
callq 0x20c0
movq 0x8e22(%rip), %rdi      # 0x11fd8
leaq 0x263e(%rip), %rsi      # 0xb7fb
callq 0x2160
movq 0x8e0f(%rip), %rdi      # 0x11fd8
callq 0x20c0
movq %rax, %rdi
callq 0x20c0
leaq 0xa8(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x5a38
leaq 0x8(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x2, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x22c2(%rip), %xmm0     # 0xb4d0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x229f(%rip), %xmm0     # 0xb4d8
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x227c(%rip), %xmm0     # 0xb4e0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x5, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2259(%rip), %xmm0     # 0xb4e8
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2236(%rip), %xmm0     # 0xb4f0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x6, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2203(%rip), %xmm0     # 0xb4e8
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xc, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x21d0(%rip), %xmm0     # 0xb4e0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xd, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2195(%rip), %xmm0     # 0xb4d0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x6, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2192(%rip), %xmm0     # 0xb4f8
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x7, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x214f(%rip), %xmm0     # 0xb4e0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x5, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x7, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2114(%rip), %xmm0     # 0xb4d0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x6, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x20f1(%rip), %xmm0     # 0xb4d8
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x6, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xc, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x20be(%rip), %xmm0     # 0xb4d0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x7, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x20ab(%rip), %xmm0     # 0xb4e8
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x7, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2098(%rip), %xmm0     # 0xb500
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x8, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x203d(%rip), %xmm0     # 0xb4d0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x8, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2012(%rip), %xmm0     # 0xb4d0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x1ff7(%rip), %xmm0     # 0xb4e0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x1fdc(%rip), %xmm0     # 0xb4f0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xf, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x1fa9(%rip), %xmm0     # 0xb4e8
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0xa, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x1f76(%rip), %xmm0     # 0xb4e0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0xb, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xe, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x1f3b(%rip), %xmm0     # 0xb4d0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0xc, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xd, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x1f28(%rip), %xmm0     # 0xb4e8
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0xe, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xf, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x1ee5(%rip), %xmm0     # 0xb4d0
callq 0x557a
leaq 0x8(%rsp), %rsi
movl $0xf, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x1ed2(%rip), %xmm0     # 0xb4e8
callq 0x557a
leaq 0x8b7e(%rip), %rdi      # 0x121a0
callq 0x998a
leaq 0x8(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xa8(%rsp), %rdi
callq 0x59ae
leaq 0x8(%rsp), %rdx
movl $0xe, (%rdx)
leaq 0x270(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x54ee
leaq 0x270(%rsp), %rdi
callq 0x5f5e
leaq 0xa8(%rsp), %rdi
callq 0x53b8
movq 0x8958(%rip), %rdi      # 0x11fd8
callq 0x20c0
leaq 0x8(%rsp), %rdx
movl $0x9, (%rdx)
leaq 0x258(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x54ee
leaq 0x258(%rsp), %rdi
callq 0x5f5e
leaq 0xa8(%rsp), %rdi
callq 0x53b8
movq 0x8912(%rip), %rdi      # 0x11fd8
callq 0x20c0
leaq 0x8(%rsp), %rsi
movl $0xd, (%rsi)
leaq 0xa8(%rsp), %rdi
callq 0x59ae
leaq 0x8(%rsp), %rdx
movl $0x8, (%rdx)
leaq 0x240(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x54ee
leaq 0x240(%rsp), %rdi
callq 0x5f5e
leaq 0xa8(%rsp), %rdi
callq 0x53b8
movq 0x88b4(%rip), %rdi      # 0x11fd8
callq 0x20c0
movq %rax, %rdi
callq 0x20c0
movq 0x88a0(%rip), %rdi      # 0x11fd8
leaq 0x210c(%rip), %rsi      # 0xb84b
callq 0x2160
movq 0x888d(%rip), %rdi      # 0x11fd8
callq 0x20c0
movq %rax, %rdi
callq 0x20c0
leaq 0xa8(%rsp), %rdi
callq 0x5c76
leaq 0x70(%rsp), %rdi
callq 0x3812
leaq 0x288(%rsp), %rdi
callq 0x36b8
leaq 0x4c0(%rsp), %rdi
callq 0x76c4
leaq 0x90(%rsp), %rdi
callq 0x3812
leaq 0x580(%rsp), %rdi
callq 0x4b10
leaq 0x460(%rsp), %rdi
callq 0x76c4
leaq 0x520(%rsp), %rdi
callq 0x76c4
leaq 0x628(%rsp), %rdi
callq 0x4e5e
leaq 0x10(%rsp), %rdi
callq 0x76c4
xorl %eax, %eax
addq $0x760, %rsp            # imm = 0x760
popq %rbx
popq %r14
popq %r15
retq
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x98f4
jmp 0x990b
jmp 0x990b
jmp 0x98dc
jmp 0x9934
jmp 0x9934
jmp 0x98e7
jmp 0x9906
jmp 0x9906
movq %rax, %rbx
jmp 0x996b
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
jmp 0x98ec
movq %rax, %rbx
jmp 0x9944
movq %rax, %rbx
jmp 0x9918
jmp 0x990b
movq %rax, %rbx
jmp 0x9925
jmp 0x9934
jmp 0x990b
jmp 0x9934
movq %rax, %rbx
jmp 0x9951
movq %rax, %rbx
jmp 0x9978
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
callq 0x5c76
jmp 0x990e
movq %rax, %rbx
jmp 0x995e
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x3812
leaq 0x288(%rsp), %rdi
callq 0x36b8
leaq 0x4c0(%rsp), %rdi
callq 0x76c4
jmp 0x9937
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x3812
leaq 0x580(%rsp), %rdi
callq 0x4b10
leaq 0x460(%rsp), %rdi
callq 0x76c4
leaq 0x520(%rsp), %rdi
callq 0x76c4
leaq 0x628(%rsp), %rdi
callq 0x4e5e
leaq 0x10(%rsp), %rdi
callq 0x76c4
movq %rbx, %rdi
callq 0x2220