// File: rishabh-battulwar[P]imageprocessing/./src/Main.cpp
// Function: usage(char const*)
void usage(const char *exename)
{
	std::cout << "\n General Usage: " << exename << " -prob {method_name} infile outfile [type] [-w width] [-h height] [-tw target_width] [-th target_height] [-ws window_size]" << std::endl;
	std::cout << " [Specific Usage]: \n" << std::endl;
	
	std::cout << " Problem 1.a1. Usage: " << exename << " -prob sobel -i <input file path> -o <output file path> [-w 'width'] [-h 'height']  [-perc 'percentage']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob sobel -i ../images/elaine.raw -o ../output_images/elaine_edge_map.raw -w 256 -h 256 -perc 10" << "\n" << std::endl;
	
	std::cout << " Problem 1.a2. Usage: " << exename << "  -prob LoG -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob LoG -i ../images/elaine.raw -o ../output_images/elaine_LoG_edge_map.raw -w 256 -h 256" << "\n" << std::endl;
	
	std::cout << " Problem 1.b. Usage: " << exename << " -prob art_effect -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob art_effect -i ../images/Scarlett.raw -o ../output_images/Scarlett_out.raw -w 400 -h 300" << "\n" <<std::endl;
	
	std::cout << " Problem 2.1. Usage: " << exename << " -prob binary -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob binary -i ../images/fingerprint_good.raw -o ../output_images/fingerprint_good_binary.raw -w 388 -h 374 " << "\n" << std::endl;
	
	std::cout << " Problem 2.2. Usage: " << exename << " -prob fingerprint -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob fingerprint -i ../images/fingerprint_good.raw -o ../output_images/fingerprint_good_processed.raw -w 388 -h 374" << "\n" << std::endl;
	
	std::cout << " Problem 2.3. Usage: " << exename << " -prob minutiae -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] " << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob minutiae -i ../images/fingerprint_good.raw -o ../output_images/fingerprint_good_extraction.raw -w 388 -h 374" << "\n" << std::endl;
	
	std::cout << " Problem 3.1. Usage: " << exename << " -prob halftone -i <input file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob halftone -i ../images/boat.raw -w 512 -h 512" << "\n" << std::endl;
	
	std::cout << " Problem 3.2. Usage: " << exename << " -prob color_halftone -i <input file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob color_halftone -i ../images/trees.raw -o ../output_images/color_halftone_trees.raw -w 350 -h 258" << "\n" << std::endl;
	
	// std::cout << " Problem 1.a. Usage: " << exename << " -prob color_to_bw -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob color_to_bw -i ../images/mandril.raw -o ../images/mandril_bw.raw -w 512 -h 512" << "\n" << std::endl;
	
	// std::cout << " Problem 1.b. Usage: " << exename << " -prob image_resize -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-tw 'target_width'] [-th 'target_height]" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob image_resize -i ../images/pepper.raw -o ../images/pepper_scale.raw -w 512 -h 512 -tw 700 -th 700" << "\n" << std::endl;
	
	// std::cout << " Problem 2.a1 Usage: " << exename << " -prob hist_eq_cum -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob hist_eq_cum -i ../images/Girl.raw -o ../images/Girl_hist_eq_cum.raw -w 256 -h 256" << "\n" <<std::endl;
	
	// std::cout << " Problem 2.a2 Usage: " << exename << " -prob hist_equal -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob hist_equal -i ../images/Girl.raw -o ../images/Girl_hist_eq.raw -w 256 -h 256" << "\n" << std::endl;
	
	// std::cout << " Problem 2.b. Usage: " << exename << " -prob oil_paint_effect -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-ws 'window_size']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob oil_paint_effect -i ../images/Trojan_256.raw -o ../images/Trojan_256_oil.raw -w 384 -h 384 -ws 3" << "\n" << std::endl;
	
	// std::cout << " Problem 2.c. Usage: " << exename << " -prob special_effect -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob special_effect -i ../images/chat.raw -o ../images/chat_effect.raw -w 481 -h 321" << "\n" << std::endl;
	
	// std::cout << " Problem 3.a. Usage: " << exename << " -prob denoising -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-sigma 'value'] [-thresh 'threshold_value']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob denoising -i ../images/Lena_mixed.raw -o ../images/Lena_clean.raw -w 512 -h 512 -sigma 3 -thresh 20.0" << "\n" << std::endl;
	
	// std::cout << " Problem 3.b. Usage: " << exename << " -prob bilateral_filter -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-tw 'target_width'] [-th 'target_height] [-sigma 'value'] [-sigma_sim 'sigma_similarity'] [-iter '#iterations']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob bilateral_filter -i ../images/pepper.raw -o ../images/pepper_scale.raw -w 512 -h 512 -ws 3 -sigma 2 -sigma_sim 20 -iter 5" << "\n" << std::endl;
	
	// std::cout << " Problem 3.c. Usage: " << exename << " -prob non_local_mean -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-tw 'target_width'] [-th 'target_height] [-rs 'region_size'] [-sigma 'value'] [-h 'h_value']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob non_local_mean -i ../images/pepper.raw -o ../images/pepper_scale.raw -w 512 -h 512 -rs 5 -sigma 3 -h 5" << "\n" << std::endl;

	std::cout << "\t type :'bw'||'color' ; default: 'color'" << std::endl;
	std::cout << "\t -w width : (default) 512" 				<< std::endl;
	std::cout << "\t -h height : (default) 512" 			<< std::endl;
	std::cout << "\t -tw target_width : (default) 700" 		<< std::endl;
	std::cout << "\t -th target_height : (default) 700\n" 	<< std::endl;
	std::cout << "\t -th target_height : (default) 700\n" 	<< std::endl;
	exit(1);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq 0x6cb5(%rip), %rdi      # 0x20fc8
leaq 0x2aed(%rip), %rsi      # 0x1ce07
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2ae4(%rip), %rsi      # 0x1ce19
callq 0x21c0
movq %rax, %rdi
movq 0x6c74(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6c78(%rip), %rdi      # 0x20fc8
leaq 0x2b3d(%rip), %rsi      # 0x1ce94
callq 0x21c0
movq %rax, %rdi
movq 0x6c52(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6c56(%rip), %rdi      # 0x20fc8
leaq 0x2b30(%rip), %rsi      # 0x1cea9
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2b2c(%rip), %rsi      # 0x1cec0
callq 0x21c0
movq %rax, %rdi
movq 0x6c15(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6c19(%rip), %rdi      # 0x20fc8
leaq 0x2b73(%rip), %rsi      # 0x1cf29
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2b6e(%rip), %rsi      # 0x1cf3f
callq 0x21c0
movq %rax, %rdi
leaq 0x2ac7(%rip), %rsi      # 0x1cea7
callq 0x21c0
movq %rax, %rdi
movq 0x6bc9(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6bcd(%rip), %rdi      # 0x20fc8
leaq 0x2ba1(%rip), %rsi      # 0x1cfa3
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2b9d(%rip), %rsi      # 0x1cfba
callq 0x21c0
movq %rax, %rdi
movq 0x6b8c(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6b90(%rip), %rdi      # 0x20fc8
leaq 0x2aea(%rip), %rsi      # 0x1cf29
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2bb2(%rip), %rsi      # 0x1d00c
callq 0x21c0
movq %rax, %rdi
leaq 0x2a3e(%rip), %rsi      # 0x1cea7
callq 0x21c0
movq %rax, %rdi
movq 0x6b40(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6b44(%rip), %rdi      # 0x20fc8
leaq 0x2bde(%rip), %rsi      # 0x1d069
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2bd9(%rip), %rsi      # 0x1d07f
callq 0x21c0
movq %rax, %rdi
movq 0x6b03(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6b07(%rip), %rdi      # 0x20fc8
leaq 0x2a61(%rip), %rsi      # 0x1cf29
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2bf4(%rip), %rsi      # 0x1d0d7
callq 0x21c0
movq %rax, %rdi
leaq 0x29b5(%rip), %rsi      # 0x1cea7
callq 0x21c0
movq %rax, %rdi
movq 0x6ab7(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6abb(%rip), %rdi      # 0x20fc8
leaq 0x2c22(%rip), %rsi      # 0x1d136
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2c1d(%rip), %rsi      # 0x1d14c
callq 0x21c0
movq %rax, %rdi
movq 0x6a7a(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6a7e(%rip), %rdi      # 0x20fc8
leaq 0x29d8(%rip), %rsi      # 0x1cf29
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2c34(%rip), %rsi      # 0x1d1a0
callq 0x21c0
movq %rax, %rdi
leaq 0x292c(%rip), %rsi      # 0x1cea7
callq 0x21c0
movq %rax, %rdi
movq 0x6a2e(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6a32(%rip), %rdi      # 0x20fc8
leaq 0x2c72(%rip), %rsi      # 0x1d20f
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2c6d(%rip), %rsi      # 0x1d225
callq 0x21c0
movq %rax, %rdi
movq 0x69f1(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x69f5(%rip), %rdi      # 0x20fc8
leaq 0x294f(%rip), %rsi      # 0x1cf29
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2c89(%rip), %rsi      # 0x1d27e
callq 0x21c0
movq %rax, %rdi
leaq 0x28a3(%rip), %rsi      # 0x1cea7
callq 0x21c0
movq %rax, %rdi
movq 0x69a5(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x69a9(%rip), %rdi      # 0x20fc8
leaq 0x2cce(%rip), %rsi      # 0x1d2f4
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2cc9(%rip), %rsi      # 0x1d30a
callq 0x21c0
movq %rax, %rdi
movq 0x6968(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x696c(%rip), %rdi      # 0x20fc8
leaq 0x28c6(%rip), %rsi      # 0x1cf29
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2ce3(%rip), %rsi      # 0x1d361
callq 0x21c0
movq %rax, %rdi
leaq 0x281a(%rip), %rsi      # 0x1cea7
callq 0x21c0
movq %rax, %rdi
movq 0x691c(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6920(%rip), %rdi      # 0x20fc8
leaq 0x2d26(%rip), %rsi      # 0x1d3d5
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2d21(%rip), %rsi      # 0x1d3eb
callq 0x21c0
movq %rax, %rdi
movq 0x68df(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x68e3(%rip), %rdi      # 0x20fc8
leaq 0x283d(%rip), %rsi      # 0x1cf29
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2d24(%rip), %rsi      # 0x1d42b
callq 0x21c0
movq %rax, %rdi
leaq 0x2791(%rip), %rsi      # 0x1cea7
callq 0x21c0
movq %rax, %rdi
movq 0x6893(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6897(%rip), %rdi      # 0x20fc8
leaq 0x2d27(%rip), %rsi      # 0x1d45f
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2d22(%rip), %rsi      # 0x1d475
callq 0x21c0
movq %rax, %rdi
movq 0x6856(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x685a(%rip), %rdi      # 0x20fc8
leaq 0x27b4(%rip), %rsi      # 0x1cf29
callq 0x21c0
movq %rax, %rdi
movq -0x8(%rbp), %rsi
callq 0x21c0
movq %rax, %rdi
leaq 0x2d2b(%rip), %rsi      # 0x1d4bb
callq 0x21c0
movq %rax, %rdi
leaq 0x2708(%rip), %rsi      # 0x1cea7
callq 0x21c0
movq %rax, %rdi
movq 0x680a(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x680e(%rip), %rdi      # 0x20fc8
leaq 0x2d62(%rip), %rsi      # 0x1d523
callq 0x21c0
movq %rax, %rdi
movq 0x67e8(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x67ec(%rip), %rdi      # 0x20fc8
leaq 0x2d69(%rip), %rsi      # 0x1d54c
callq 0x21c0
movq %rax, %rdi
movq 0x67c6(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x67ca(%rip), %rdi      # 0x20fc8
leaq 0x2d62(%rip), %rsi      # 0x1d567
callq 0x21c0
movq %rax, %rdi
movq 0x67a4(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x67a8(%rip), %rdi      # 0x20fc8
leaq 0x2d5c(%rip), %rsi      # 0x1d583
callq 0x21c0
movq %rax, %rdi
movq 0x6782(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6786(%rip), %rdi      # 0x20fc8
leaq 0x2d5d(%rip), %rsi      # 0x1d5a6
callq 0x21c0
movq %rax, %rdi
movq 0x6760(%rip), %rsi      # 0x20fb8
callq 0x21e0
movq 0x6764(%rip), %rdi      # 0x20fc8
leaq 0x2d3b(%rip), %rsi      # 0x1d5a6
callq 0x21c0
movq %rax, %rdi
movq 0x673e(%rip), %rsi      # 0x20fb8
callq 0x21e0
movl $0x1, %edi
callq 0x2240
nopl (%rax)