From 113fe102f5b7899b580643bc98a63f9bdf6bb240 Mon Sep 17 00:00:00 2001 From: sgroat Date: Fri, 10 Feb 2017 10:46:52 -0800 Subject: [PATCH] Cleanup zero-length printf format string warnings --- src/hwmon.c | 2 +- src/main.c | 54 +++++++++++++++++++++++++------------------------- src/opencl.c | 16 +++++++-------- src/potfile.c | 6 +++--- src/restore.c | 2 +- src/terminal.c | 42 +++++++++++++++++++-------------------- 6 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src/hwmon.c b/src/hwmon.c index 11dc3f570..af653a4fa 100644 --- a/src/hwmon.c +++ b/src/hwmon.c @@ -1510,7 +1510,7 @@ static int hm_XNVCTRL_get_fan_control (hashcat_ctx_t *hashcat_ctx, const int gpu event_log_warning (hashcat_ctx, "This error typically occurs when you did not setup NVidia Coolbits."); event_log_warning (hashcat_ctx, "Run the following command to fix: sudo nvidia-xconfig --cool-bits=12"); event_log_warning (hashcat_ctx, "Do not forget to restart X afterwards."); - event_log_warning (hashcat_ctx, ""); + event_log_warning (hashcat_ctx, NULL); return -1; } diff --git a/src/main.c b/src/main.c index 7bb3f6e37..5b3710084 100644 --- a/src/main.c +++ b/src/main.c @@ -217,7 +217,7 @@ static void main_cracker_starting (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYB { if ((user_options->quiet == false) && (user_options->speed_only == false)) { - event_log_info_nn (hashcat_ctx, ""); + event_log_info_nn (hashcat_ctx, NULL); send_prompt (); } @@ -225,7 +225,7 @@ static void main_cracker_starting (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYB else if (user_options_extra->wordlist_mode == WL_MODE_STDIN) { event_log_info (hashcat_ctx, "Starting attack in stdin mode..."); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } } @@ -257,7 +257,7 @@ static void main_cracker_finished (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYB if (user_options->machine_readable == false) { - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } } else if (user_options->progress_only == true) @@ -266,7 +266,7 @@ static void main_cracker_finished (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYB if (user_options->machine_readable == false) { - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } } else if (user_options->speed_only == true) @@ -275,7 +275,7 @@ static void main_cracker_finished (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYB if (user_options->machine_readable == false) { - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } } else if (user_options->machine_readable == true) @@ -286,11 +286,11 @@ static void main_cracker_finished (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYB { if (user_options->quiet == false) { - if (hashes->digests_saved != hashes->digests_done) event_log_info (hashcat_ctx, ""); + if (hashes->digests_saved != hashes->digests_done) event_log_info (hashcat_ctx, NULL); status_display (hashcat_ctx); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } } } @@ -383,12 +383,12 @@ static void main_potfile_num_cracked (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, M if (potfile_remove_cracks == 1) { event_log_info (hashcat_ctx, "INFO: Removed 1 hash found in potfile"); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } else { event_log_info (hashcat_ctx, "INFO: Removed %d hashes found in potfile", potfile_remove_cracks); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } } } @@ -400,7 +400,7 @@ static void main_potfile_all_cracked (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, M if (user_options->quiet == true) return; event_log_info (hashcat_ctx, "INFO: All hashes found in potfile! You can use --show to display them."); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } static void main_outerloop_mainscreen (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) @@ -423,7 +423,7 @@ static void main_outerloop_mainscreen (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, char *hash_type = strhashtype (hashconfig->hash_mode); // not a bug event_log_info (hashcat_ctx, "Hashtype: %s", hash_type); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } } @@ -437,7 +437,7 @@ static void main_outerloop_mainscreen (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, event_log_info (hashcat_ctx, "Rules: %u", straight_ctx->kernel_rules_cnt); } - if (user_options->quiet == false) event_log_info (hashcat_ctx, ""); + if (user_options->quiet == false) event_log_info (hashcat_ctx, NULL); if (hashconfig->opti_type) { @@ -451,7 +451,7 @@ static void main_outerloop_mainscreen (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, } } - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); /** * Watchdog and Temperature balance @@ -480,7 +480,7 @@ static void main_outerloop_mainscreen (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, event_log_info (hashcat_ctx, "Watchdog: Temperature retain trigger disabled"); } - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); #if defined (DEBUG) if (user_options->benchmark == true) event_log_info (hashcat_ctx, "Hashmode: %d", hashconfig->hash_mode); @@ -530,7 +530,7 @@ static void main_weak_hash_all_cracked (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, if (user_options->quiet == true) return; event_log_info (hashcat_ctx, "INFO: All hashes found during weak hashes check! You can use --show to display them."); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } static void main_bitmap_init_pre (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) @@ -560,7 +560,7 @@ static void main_set_kernel_power_final (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx clear_prompt (); event_log_info (hashcat_ctx, "INFO: approaching final keyspace, workload adjusted"); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); send_prompt (); } @@ -624,7 +624,7 @@ static void main_monitor_throttle3 (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAY u32 *device_id = (u32 *) buf; event_log_warning (hashcat_ctx, "Drivers temperature threshold hit on GPU #%u, expect performance to drop...", *device_id + 1); - event_log_warning (hashcat_ctx, ""); + event_log_warning (hashcat_ctx, NULL); if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK)) { @@ -647,18 +647,18 @@ static void main_monitor_performance_hint (MAYBE_UNUSED hashcat_ctx_t *hashcat_c if (user_options->workload_profile < 3) { event_log_warning (hashcat_ctx, "Cracking performance lower than expected? Append -w 3 to the commandline!"); - event_log_warning (hashcat_ctx, ""); + event_log_warning (hashcat_ctx, NULL); } else { event_log_warning (hashcat_ctx, "Cracking performance lower than expected?"); - event_log_warning (hashcat_ctx, ""); + event_log_warning (hashcat_ctx, NULL); event_log_warning (hashcat_ctx, "* Update your OpenCL runtime / Driver but the right way:"); event_log_warning (hashcat_ctx, " https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#i_may_have_the_wrong_driver_installed_what_should_i_do"); - event_log_warning (hashcat_ctx, ""); + event_log_warning (hashcat_ctx, NULL); event_log_warning (hashcat_ctx, "* Create more work items to make use of your parallelization power:"); event_log_warning (hashcat_ctx, " https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#how_to_create_more_work_for_full_speed"); - event_log_warning (hashcat_ctx, ""); + event_log_warning (hashcat_ctx, NULL); } if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK)) @@ -710,8 +710,8 @@ static void main_monitor_status_refresh (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx { //clear_prompt (); - event_log_info (hashcat_ctx, ""); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); + event_log_info (hashcat_ctx, NULL); } } @@ -721,7 +721,7 @@ static void main_monitor_status_refresh (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx { if (user_options->quiet == false) { - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); send_prompt (); } @@ -731,7 +731,7 @@ static void main_monitor_status_refresh (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx { if (user_options->quiet == false) { - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } } } @@ -745,7 +745,7 @@ static void main_wordlist_cache_hit (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MA cache_hit_t *cache_hit = (cache_hit_t *) buf; event_log_info (hashcat_ctx, "Cache-hit dictionary stats %s: %" PRId64 " bytes, %" PRIu64 " words, %" PRIu64 " keyspace", cache_hit->dictfile, cache_hit->stat.st_size, cache_hit->cached_cnt, cache_hit->keyspace); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } static void main_wordlist_cache_generate (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) @@ -763,7 +763,7 @@ static void main_wordlist_cache_generate (MAYBE_UNUSED hashcat_ctx_t *hashcat_ct else { event_log_info (hashcat_ctx, "Generated dictionary stats for %s: %" PRIu64 " bytes, %" PRIu64 " words, %" PRIu64 " keyspace", cache_generate->dictfile, cache_generate->comp, cache_generate->cnt2, cache_generate->cnt); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } } diff --git a/src/opencl.c b/src/opencl.c index 42f99f5b2..27104b873 100644 --- a/src/opencl.c +++ b/src/opencl.c @@ -387,7 +387,7 @@ int ocl_init (hashcat_ctx_t *hashcat_ctx) if (ocl->lib == NULL) { event_log_error (hashcat_ctx, "Can not find an OpenCL ICD loader library"); - event_log_error (hashcat_ctx, ""); + event_log_error (hashcat_ctx, NULL); event_log_error (hashcat_ctx, "You're probably missing the OpenCL runtime and driver installation"); #if defined (__linux__) @@ -2210,7 +2210,7 @@ int opencl_ctx_init (hashcat_ctx_t *hashcat_ctx) if (platforms_cnt == 0) { event_log_error (hashcat_ctx, "ATTENTION! No OpenCL compatible platform found"); - event_log_error (hashcat_ctx, ""); + event_log_error (hashcat_ctx, NULL); event_log_error (hashcat_ctx, "You're probably missing the OpenCL runtime installation"); #if defined (__linux__) @@ -2988,7 +2988,7 @@ int opencl_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) if (intel_warn == true) { event_log_error (hashcat_ctx, "* Device #%u: Outdated or broken Intel OpenCL runtime detected!", device_id + 1); - event_log_error (hashcat_ctx, ""); + event_log_error (hashcat_ctx, NULL); event_log_error (hashcat_ctx, "You are STRONGLY encouraged to use the official supported NVIDIA driver"); event_log_error (hashcat_ctx, "See hashcat's homepage for official supported NVIDIA drivers"); event_log_error (hashcat_ctx, "You can use --force to override this but do not post error reports if you do so"); @@ -3021,7 +3021,7 @@ int opencl_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) if (amd_warn == true) { event_log_error (hashcat_ctx, "* Device #%u: Outdated or broken AMD driver detected!", device_id + 1); - event_log_error (hashcat_ctx, ""); + event_log_error (hashcat_ctx, NULL); event_log_error (hashcat_ctx, "You are STRONGLY encouraged to use the official supported AMD driver"); event_log_error (hashcat_ctx, "See hashcat's homepage for official supported AMD drivers"); event_log_error (hashcat_ctx, "Also see: https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#i_may_have_the_wrong_driver_installed_what_should_i_do"); @@ -3041,7 +3041,7 @@ int opencl_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) if (nv_warn == true) { event_log_error (hashcat_ctx, "* Device #%u: Outdated or broken NVIDIA driver detected!", device_id + 1); - event_log_error (hashcat_ctx, ""); + event_log_error (hashcat_ctx, NULL); event_log_error (hashcat_ctx, "You are STRONGLY encouraged to use the official supported NVIDIA driver"); event_log_error (hashcat_ctx, "See hashcat's homepage for official supported NVIDIA drivers"); event_log_error (hashcat_ctx, "Also see: https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#i_may_have_the_wrong_driver_installed_what_should_i_do"); @@ -3060,7 +3060,7 @@ int opencl_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) if ((strstr (device_param->device_opencl_version, "beignet")) || (strstr (device_param->device_version, "beignet"))) { event_log_error (hashcat_ctx, "* Device #%u: Intel beignet driver detected!", device_id + 1); - event_log_error (hashcat_ctx, ""); + event_log_error (hashcat_ctx, NULL); event_log_error (hashcat_ctx, "The beignet driver has been marked as half-baked and likely to fail kernel compilation"); event_log_error (hashcat_ctx, "You can use --force to override this but do not post error reports if you do so"); @@ -3187,7 +3187,7 @@ void opencl_ctx_devices_update_power (hashcat_ctx_t *hashcat_ctx) event_log_warning (hashcat_ctx, "Therefore, hashcat is unable to utilize the full parallelization power of your device(s)."); event_log_warning (hashcat_ctx, "The cracking speed will drop."); event_log_warning (hashcat_ctx, "Workaround: https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#how_to_create_more_work_for_full_speed"); - event_log_warning (hashcat_ctx, ""); + event_log_warning (hashcat_ctx, NULL); } } } @@ -3645,7 +3645,7 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) #if defined (DEBUG) if (user_options->quiet == false) event_log_warning (hashcat_ctx, "SCRYPT tmto optimizer value set to: %u, mem: %" PRIu64, scrypt_tmto_final, (u64) size_scrypt); - if (user_options->quiet == false) event_log_warning (hashcat_ctx, ""); + if (user_options->quiet == false) event_log_warning (hashcat_ctx, NULL); #endif } diff --git a/src/potfile.c b/src/potfile.c index 3796fc5f4..6a44aae9a 100644 --- a/src/potfile.c +++ b/src/potfile.c @@ -123,7 +123,7 @@ int potfile_init (hashcat_ctx_t *hashcat_ctx) { event_log_warning (hashcat_ctx, "Old potfile detected: %s", potfile_old); event_log_warning (hashcat_ctx, "New potfile is: %s ", potfile_ctx->filename); - event_log_warning (hashcat_ctx, ""); + event_log_warning (hashcat_ctx, NULL); } hcfree (potfile_old); @@ -365,13 +365,13 @@ int potfile_remove_parse (hashcat_ctx_t *hashcat_ctx) { if (potfile_ctx->keep_all_usernames == true) { - potfile_update_hashes (hashcat_ctx, &hash_buf, hashes_buf, hashes_cnt, sort_by_hash_no_salt, "", 0); + potfile_update_hashes (hashcat_ctx, &hash_buf, hashes_buf, hashes_cnt, sort_by_hash_no_salt, NULL, 0); } else { hash_t *found = (hash_t *) hc_bsearch_r (&hash_buf, hashes_buf, hashes_cnt, sizeof (hash_t), sort_by_hash_no_salt, (void *) hashconfig); - potfile_update_hash (hashcat_ctx, found, "", 0); + potfile_update_hash (hashcat_ctx, found, NULL, 0); } } } diff --git a/src/restore.c b/src/restore.c index c76b4d75d..6dc542a80 100644 --- a/src/restore.c +++ b/src/restore.c @@ -98,7 +98,7 @@ static int read_restore (hashcat_ctx_t *hashcat_ctx) fclose (fp); event_log_warning (hashcat_ctx, "Changing current working directory to '%s'", rd->cwd); - event_log_warning (hashcat_ctx, ""); + event_log_warning (hashcat_ctx, NULL); if (chdir (rd->cwd)) { diff --git a/src/terminal.c b/src/terminal.c index df41ad219..e2ed2e4bd 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -36,7 +36,7 @@ void welcome_screen (hashcat_ctx_t *hashcat_ctx, const char *version_tag) if (user_options->machine_readable == false) { event_log_info (hashcat_ctx, "%s (%s) starting in benchmark mode...", PROGNAME, version_tag); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } else { @@ -46,22 +46,22 @@ void welcome_screen (hashcat_ctx_t *hashcat_ctx, const char *version_tag) else if (user_options->restore == true) { event_log_info (hashcat_ctx, "%s (%s) starting in restore mode...", PROGNAME, version_tag); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } else if (user_options->speed_only == true) { event_log_info (hashcat_ctx, "%s (%s) starting in speed-only mode...", PROGNAME, version_tag); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } else if (user_options->progress_only == true) { event_log_info (hashcat_ctx, "%s (%s) starting in progress-only mode...", PROGNAME, version_tag); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } else { event_log_info (hashcat_ctx, "%s (%s) starting...", PROGNAME, version_tag); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } } @@ -160,7 +160,7 @@ static void keypress (hashcat_ctx_t *hashcat_ctx) hc_thread_mutex_lock (status_ctx->mux_display); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); switch (ch) { @@ -168,11 +168,11 @@ static void keypress (hashcat_ctx_t *hashcat_ctx) case '\r': case '\n': - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); status_display (hashcat_ctx); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); if (quiet == false) send_prompt (); @@ -180,13 +180,13 @@ static void keypress (hashcat_ctx_t *hashcat_ctx) case 'b': - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); bypass (hashcat_ctx); event_log_info (hashcat_ctx, "Next dictionary / mask in queue selected, bypassing current one"); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); if (quiet == false) send_prompt (); @@ -194,7 +194,7 @@ static void keypress (hashcat_ctx_t *hashcat_ctx) case 'p': - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); SuspendThreads (hashcat_ctx); @@ -203,7 +203,7 @@ static void keypress (hashcat_ctx_t *hashcat_ctx) event_log_info (hashcat_ctx, "Paused"); } - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); if (quiet == false) send_prompt (); @@ -211,7 +211,7 @@ static void keypress (hashcat_ctx_t *hashcat_ctx) case 'r': - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); ResumeThreads (hashcat_ctx); @@ -220,7 +220,7 @@ static void keypress (hashcat_ctx_t *hashcat_ctx) event_log_info (hashcat_ctx, "Resumed"); } - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); if (quiet == false) send_prompt (); @@ -228,7 +228,7 @@ static void keypress (hashcat_ctx_t *hashcat_ctx) case 'c': - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); stop_at_checkpoint (hashcat_ctx); @@ -241,7 +241,7 @@ static void keypress (hashcat_ctx_t *hashcat_ctx) event_log_info (hashcat_ctx, "Checkpoint disabled: Restore Point updates will no longer be monitored"); } - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); if (quiet == false) send_prompt (); @@ -249,7 +249,7 @@ static void keypress (hashcat_ctx_t *hashcat_ctx) case 'q': - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); myquit (hashcat_ctx); @@ -468,7 +468,7 @@ void opencl_info (hashcat_ctx_t *hashcat_ctx) const opencl_ctx_t *opencl_ctx = hashcat_ctx->opencl_ctx; event_log_info (hashcat_ctx, "OpenCL Info:"); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); cl_uint platforms_cnt = opencl_ctx->platforms_cnt; cl_platform_id *platforms = opencl_ctx->platforms; @@ -488,7 +488,7 @@ void opencl_info (hashcat_ctx_t *hashcat_ctx) event_log_info (hashcat_ctx, " Vendor : %s", platform_vendor); event_log_info (hashcat_ctx, " Name : %s", platform_name); event_log_info (hashcat_ctx, " Version : %s", platform_version); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); for (cl_uint devices_idx = 0; devices_idx < devices_cnt; devices_idx++) { @@ -519,7 +519,7 @@ void opencl_info (hashcat_ctx_t *hashcat_ctx) event_log_info (hashcat_ctx, " Memory : %" PRIu64 "/%" PRIu64 " MB allocatable", device_maxmem_alloc / 1024 / 1024, device_global_mem / 1024 / 1024); event_log_info (hashcat_ctx, " OpenCL Version : %s", device_opencl_version); event_log_info (hashcat_ctx, " Driver Version : %s", driver_version); - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } } } @@ -589,7 +589,7 @@ void opencl_info_compact (hashcat_ctx_t *hashcat_ctx) } } - event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, NULL); } }