22#include <stdlib.h>
33#include <string.h>
44#include <libretro.h>
5+
56#include <libretro_core_options.h>
67#include <streams/file_stream.h>
8+ #include <compat/posix_string.h>
9+ #include <compat/strl.h>
10+
711#include "file.h"
812#include "jagbios.h"
913#include "jagbios2.h"
@@ -153,58 +157,110 @@ static bool update_option_visibility(void)
153157
154158 for (i = 0 ; i < 2 ; i ++ )
155159 {
160+ char base [20 ];
156161 char key [64 ];
157- option_display .key = key ;
162+ size_t _len = strlcpy (base , "virtualjaguar_p" , sizeof (base ));
163+ snprintf (base + _len , sizeof (base ) - _len , "%d" , i + 1 );
158164
159- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_numpad_to_kb" );
165+ strlcpy (key , base , sizeof (key ));
166+ strlcat (key , "_numpad_to_kb" , sizeof (key ));
167+ option_display .key = key ;
160168 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
161- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_up" );
169+
170+ strlcpy (key , base , sizeof (key ));
171+ strlcat (key , "_retropad_up" , sizeof (key ));
162172 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
163- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_down" );
173+
174+ strlcpy (key , base , sizeof (key ));
175+ strlcat (key , "_retropad_down" , sizeof (key ));
164176 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
165- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_left" );
177+
178+ strlcpy (key , base , sizeof (key ));
179+ strlcat (key , "_retropad_left" , sizeof (key ));
166180 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
167- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_right" );
181+
182+ strlcpy (key , base , sizeof (key ));
183+ strlcat (key , "_retropad_right" , sizeof (key ));
168184 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
169- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_a" );
185+
186+ strlcpy (key , base , sizeof (key ));
187+ strlcat (key , "_retropad_a" , sizeof (key ));
170188 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
171- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_b" );
189+
190+ strlcpy (key , base , sizeof (key ));
191+ strlcat (key , "_retropad_b" , sizeof (key ));
172192 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
173- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_x" );
193+
194+ strlcpy (key , base , sizeof (key ));
195+ strlcat (key , "_retropad_x" , sizeof (key ));
174196 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
175- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_y" );
197+
198+ strlcpy (key , base , sizeof (key ));
199+ strlcat (key , "_retropad_y" , sizeof (key ));
176200 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
177- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_select" );
201+
202+ strlcpy (key , base , sizeof (key ));
203+ strlcat (key , "_retropad_select" , sizeof (key ));
178204 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
179- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_start" );
205+
206+ strlcpy (key , base , sizeof (key ));
207+ strlcat (key , "_retropad_start" , sizeof (key ));
180208 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
181- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_l1" );
209+
210+ strlcpy (key , base , sizeof (key ));
211+ strlcat (key , "_retropad_l1" , sizeof (key ));
182212 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
183- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_r1" );
213+
214+ strlcpy (key , base , sizeof (key ));
215+ strlcat (key , "_retropad_r1" , sizeof (key ));
184216 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
185- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_l2" );
217+
218+ strlcpy (key , base , sizeof (key ));
219+ strlcat (key , "_retropad_l2" , sizeof (key ));
186220 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
187- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_r2" );
221+
222+ strlcpy (key , base , sizeof (key ));
223+ strlcat (key , "_retropad_r2" , sizeof (key ));
188224 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
189- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_l3" );
225+
226+ strlcpy (key , base , sizeof (key ));
227+ strlcat (key , "_retropad_l3" , sizeof (key ));
190228 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
191- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_r3" );
229+
230+ strlcpy (key , base , sizeof (key ));
231+ strlcat (key , "_retropad_r3" , sizeof (key ));
192232 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
193- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_lu" );
233+
234+ strlcpy (key , base , sizeof (key ));
235+ strlcat (key , "_retropad_analog_lu" , sizeof (key ));
194236 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
195- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_ld" );
237+
238+ strlcpy (key , base , sizeof (key ));
239+ strlcat (key , "_retropad_analog_ld" , sizeof (key ));
196240 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
197- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_ll" );
241+
242+ strlcpy (key , base , sizeof (key ));
243+ strlcat (key , "_retropad_analog_ll" , sizeof (key ));
198244 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
199- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_lr" );
245+
246+ strlcpy (key , base , sizeof (key ));
247+ strlcat (key , "_retropad_analog_lr" , sizeof (key ));
200248 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
201- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_ru" );
249+
250+ strlcpy (key , base , sizeof (key ));
251+ strlcat (key , "_retropad_analog_ru" , sizeof (key ));
202252 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
203- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_rd" );
253+
254+ strlcpy (key , base , sizeof (key ));
255+ strlcat (key , "_retropad_analog_rd" , sizeof (key ));
204256 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
205- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_rl" );
257+
258+ strlcpy (key , base , sizeof (key ));
259+ strlcat (key , "_retropad_analog_rl" , sizeof (key ));
206260 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
207- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_rr" );
261+
262+ strlcpy (key , base , sizeof (key ));
263+ strlcat (key , "_retropad_analog_rr" , sizeof (key ));
208264 environ_cb (RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY , & option_display );
209265 }
210266
@@ -291,10 +347,14 @@ static void check_variables(void)
291347
292348 for (i = 0 ; i < 2 ; i ++ )
293349 {
350+ char base [20 ];
294351 char key [64 ];
295- var .key = key ;
352+ size_t _len = strlcpy (base , "virtualjaguar_p" , sizeof (base ));
353+ snprintf (base + _len , sizeof (base ) - _len , "%d" , i + 1 );
296354
297- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_numpad_to_kb" );
355+ strlcpy (key , base , sizeof (key ));
356+ strlcat (key , "_numpad_to_kb" , sizeof (key ));
357+ var .key = key ;
298358 var .value = NULL ;
299359 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
300360 {
@@ -306,173 +366,149 @@ static void check_variables(void)
306366 numpad_to_kb [i ] = 2 ;
307367 }
308368
309- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_up" );
369+ strlcpy (key , base , sizeof (key ));
370+ strlcat (key , "_retropad_up" , sizeof (key ));
310371 var .value = NULL ;
311372 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
312- {
313373 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_UP ] = get_button_id (var .value );
314- }
315374
316- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_down" );
375+ strlcpy (key , base , sizeof (key ));
376+ strlcat (key , "_retropad_down" , sizeof (key ));
317377 var .value = NULL ;
318378 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
319- {
320379 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_DOWN ] = get_button_id (var .value );
321- }
322380
323- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_left" );
381+ strlcpy (key , base , sizeof (key ));
382+ strlcat (key , "_retropad_left" , sizeof (key ));
324383 var .value = NULL ;
325384 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
326- {
327385 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_LEFT ] = get_button_id (var .value );
328- }
329386
330- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_right" );
387+ strlcpy (key , base , sizeof (key ));
388+ strlcat (key , "_retropad_right" , sizeof (key ));
331389 var .value = NULL ;
332390 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
333- {
334391 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_RIGHT ] = get_button_id (var .value );
335- }
336392
337- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_a" );
393+ strlcpy (key , base , sizeof (key ));
394+ strlcat (key , "_retropad_a" , sizeof (key ));
338395 var .value = NULL ;
339396 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
340- {
341397 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_A ] = get_button_id (var .value );
342- }
343398
344- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_b" );
399+ strlcpy (key , base , sizeof (key ));
400+ strlcat (key , "_retropad_b" , sizeof (key ));
345401 var .value = NULL ;
346402 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
347- {
348403 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_B ] = get_button_id (var .value );
349- }
350404
351- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_y" );
405+ strlcpy (key , base , sizeof (key ));
406+ strlcat (key , "_retropad_y" , sizeof (key ));
352407 var .value = NULL ;
353408 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
354- {
355409 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_Y ] = get_button_id (var .value );
356- }
357410
358- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_select" );
411+ strlcpy (key , base , sizeof (key ));
412+ strlcat (key , "_retropad_select" , sizeof (key ));
359413 var .value = NULL ;
360414 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
361- {
362415 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_SELECT ] = get_button_id (var .value );
363- }
364416
365- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_start" );
417+ strlcpy (key , base , sizeof (key ));
418+ strlcat (key , "_retropad_start" , sizeof (key ));
366419 var .value = NULL ;
367420 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
368- {
369421 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_START ] = get_button_id (var .value );
370- }
371422
372- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_x" );
423+ strlcpy (key , base , sizeof (key ));
424+ strlcat (key , "_retropad_x" , sizeof (key ));
373425 var .value = NULL ;
374426 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
375- {
376427 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_X ] = get_button_id (var .value );
377- }
378428
379- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_l1" );
429+ strlcpy (key , base , sizeof (key ));
430+ strlcat (key , "_retropad_l1" , sizeof (key ));
380431 var .value = NULL ;
381432 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
382- {
383433 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_L ] = get_button_id (var .value );
384- }
385434
386- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_r1" );
435+ strlcpy (key , base , sizeof (key ));
436+ strlcat (key , "_retropad_r1" , sizeof (key ));
387437 var .value = NULL ;
388438 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
389- {
390439 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_R ] = get_button_id (var .value );
391- }
392440
393- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_l2" );
441+ strlcpy (key , base , sizeof (key ));
442+ strlcat (key , "_retropad_l2" , sizeof (key ));
394443 var .value = NULL ;
395444 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
396- {
397445 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_L2 ] = get_button_id (var .value );
398- }
399446
400- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_r2" );
447+ strlcpy (key , base , sizeof (key ));
448+ strlcat (key , "_retropad_r2" , sizeof (key ));
401449 var .value = NULL ;
402450 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
403- {
404451 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_R2 ] = get_button_id (var .value );
405- }
406452
407- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_l3" );
453+ strlcpy (key , base , sizeof (key ));
454+ strlcat (key , "_retropad_l3" , sizeof (key ));
408455 var .value = NULL ;
409456 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
410- {
411457 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_L3 ] = get_button_id (var .value );
412- }
413458
414- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_r3" );
459+ strlcpy (key , base , sizeof (key ));
460+ strlcat (key , "_retropad_r3" , sizeof (key ));
415461 var .value = NULL ;
416462 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
417- {
418463 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_R3 ] = get_button_id (var .value );
419- }
420464
421- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_lu" );
465+ strlcpy (key , base , sizeof (key ));
466+ strlcat (key , "_retropad_analog_lu" , sizeof (key ));
422467 var .value = NULL ;
423468 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
424- {
425469 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_LU ] = get_button_id (var .value );
426- }
427470
428- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_ld" );
471+ strlcpy (key , base , sizeof (key ));
472+ strlcat (key , "_retropad_analog_ld" , sizeof (key ));
429473 var .value = NULL ;
430474 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
431- {
432475 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_LD ] = get_button_id (var .value );
433- }
434476
435- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_ll" );
477+ strlcpy (key , base , sizeof (key ));
478+ strlcat (key , "_retropad_analog_ll" , sizeof (key ));
436479 var .value = NULL ;
437480 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
438- {
439481 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_LL ] = get_button_id (var .value );
440- }
441482
442- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_lr" );
483+ strlcpy (key , base , sizeof (key ));
484+ strlcat (key , "_retropad_analog_lr" , sizeof (key ));
443485 var .value = NULL ;
444486 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
445- {
446487 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_LR ] = get_button_id (var .value );
447- }
448488
449- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_ru" );
489+ strlcpy (key , base , sizeof (key ));
490+ strlcat (key , "_retropad_analog_ru" , sizeof (key ));
450491 var .value = NULL ;
451492 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
452- {
453493 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_RU ] = get_button_id (var .value );
454- }
455494
456- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_rd" );
495+ strlcpy (key , base , sizeof (key ));
496+ strlcat (key , "_retropad_analog_rd" , sizeof (key ));
457497 var .value = NULL ;
458498 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
459- {
460499 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_RD ] = get_button_id (var .value );
461- }
462500
463- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_rl" );
501+ strlcpy (key , base , sizeof (key ));
502+ strlcat (key , "_retropad_analog_rl" , sizeof (key ));
464503 var .value = NULL ;
465504 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
466- {
467505 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_RL ] = get_button_id (var .value );
468- }
469506
470- snprintf (key , sizeof (key ), "%s%d%s" , "virtualjaguar_p" , i + 1 , "_retropad_analog_rr" );
507+ strlcpy (key , base , sizeof (key ));
508+ strlcat (key , "_retropad_analog_rr" , sizeof (key ));
471509 var .value = NULL ;
472510 if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE , & var ) && var .value )
473- {
474511 jag_retropad [i ][RETRO_DEVICE_ID_JOYPAD_RR ] = get_button_id (var .value );
475- }
476512 }
477513
478514 update_option_visibility ();
0 commit comments