Skip to content

Commit d25ecdb

Browse files
committed
New working clones
------------------ Omega Fighter (set 2) [Dwayne Kirkwood, Apocalypse, Brian Troha] Saurian Front (proto v5.0 8/07/90) [Enrique Robledo Arnuncio, Sean Sutton, Smitdogg, rtw, Gor, Brian Troha, Carl, CoolMod, The Dumping Union] - midway/midyunit.cpp: patched out mkrep protection [Hammy] - misc/amstarz80.cpp: dumped d2 PROM for unkmasta [Siftware]
1 parent 357a61e commit d25ecdb

File tree

7 files changed

+263
-61
lines changed

7 files changed

+263
-61
lines changed

src/mame/mame.lst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28759,6 +28759,7 @@ narc2
2875928759
narc3
2876028760
narc4
2876128761
narc6
28762+
saurnfrnt
2876228763
shimpact
2876328764
shimpactp4
2876428765
shimpactp5
@@ -48014,6 +48015,7 @@ ninjakd2a
4801448015
ninjakd2b
4801548016
ninjakd2c
4801648017
omegaf
48018+
omegafa
4801748019
omegafs
4801848020
rdaction
4801948021
robokid

src/mame/midway/midyunit.cpp

Lines changed: 138 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,110 @@ static INPUT_PORTS_START( strkforc )
748748
INPUT_PORTS_END
749749

750750

751+
static INPUT_PORTS_START( saurnfrnt )
752+
PORT_START("IN0")
753+
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
754+
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
755+
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
756+
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
757+
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Fire") PORT_PLAYER(1)
758+
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 Weapon") PORT_PLAYER(1)
759+
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Weapon Select") PORT_PLAYER(1)
760+
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED )
761+
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
762+
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
763+
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
764+
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
765+
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P2 Fire") PORT_PLAYER(2)
766+
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P2 Weapon") PORT_PLAYER(2)
767+
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Weapon Select") PORT_PLAYER(2)
768+
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
769+
770+
PORT_START("IN1")
771+
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
772+
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
773+
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("P1 Start / Transform")
774+
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) // Slam Switch
775+
PORT_SERVICE( 0x0010, IP_ACTIVE_LOW )
776+
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("P2 Start / Transform")
777+
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE1 )
778+
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN3 )
779+
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED )
780+
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN4 )
781+
PORT_BIT( 0xfc00, IP_ACTIVE_LOW, IPT_UNUSED )
782+
783+
PORT_START("IN2")
784+
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
785+
786+
PORT_START("DSW")
787+
PORT_DIPNAME( 0x00e0, 0x00e0, DEF_STR( Difficulty )) PORT_DIPLOCATION("DS1:3,2,1")
788+
PORT_DIPSETTING( 0x0060, "Level 0" )
789+
PORT_DIPSETTING( 0x0020, "Level 1" )
790+
PORT_DIPSETTING( 0x0040, "Level 2" )
791+
PORT_DIPSETTING( 0x0000, "Level 3" )
792+
PORT_DIPSETTING( 0x0080, "Level 4" )
793+
PORT_DIPSETTING( 0x00a0, "Level 5" )
794+
PORT_DIPSETTING( 0x00c0, "Level 6" )
795+
PORT_DIPSETTING( 0x00e0, "Level 7" )
796+
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Lives )) PORT_DIPLOCATION("DS1:4")
797+
PORT_DIPSETTING( 0x0000, "3" )
798+
PORT_DIPSETTING( 0x0010, "4" )
799+
PORT_DIPNAME( 0x000c, 0x000c, "Points for Extra Ship" ) PORT_DIPLOCATION("DS1:6,5")
800+
PORT_DIPSETTING( 0x0004, "40000" )
801+
PORT_DIPSETTING( 0x0000, "50000" )
802+
PORT_DIPSETTING( 0x0008, "750000" )
803+
PORT_DIPSETTING( 0x000c, "100000" )
804+
PORT_DIPNAME( 0x0002, 0x0002, "Credits to Start" ) PORT_DIPLOCATION("DS1:7")
805+
PORT_DIPSETTING( 0x0002, "1" )
806+
PORT_DIPSETTING( 0x0000, "2" )
807+
PORT_DIPNAME( 0x0001, 0x0001, "Coin Meter" ) PORT_DIPLOCATION("DS1:8")
808+
PORT_DIPSETTING( 0x0001, "Shared" )
809+
PORT_DIPSETTING( 0x0000, "Independent" )
810+
811+
PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Free_Play )) PORT_DIPLOCATION("DS2:1")
812+
PORT_DIPSETTING( 0x0000, DEF_STR( Off ))
813+
PORT_DIPSETTING( 0x8000, DEF_STR( On ))
814+
PORT_DIPNAME( 0x4000, 0x0000, "Test Switch") PORT_DIPLOCATION("DS2:2")
815+
PORT_DIPSETTING( 0x0000, DEF_STR( Off ))
816+
PORT_DIPSETTING( 0x4000, DEF_STR( On ))
817+
PORT_DIPNAME( 0x3f00, 0x3600, DEF_STR( Coinage )) PORT_DIPLOCATION("DS2:8,7,6,5,4,3")
818+
PORT_DIPSETTING( 0x3600, "USA 1" )
819+
PORT_DIPSETTING( 0x3700, "USA 2" )
820+
PORT_DIPSETTING( 0x3800, "USA 3" )
821+
PORT_DIPSETTING( 0x2a00, "Australia 1" )
822+
PORT_DIPSETTING( 0x2d00, "Austria" )
823+
PORT_DIPSETTING( 0x2e00, "Belgium 1" )
824+
PORT_DIPSETTING( 0x2f00, "Belgium 2" )
825+
PORT_DIPSETTING( 0x3500, "Denmark" )
826+
PORT_DIPSETTING( 0x3c00, "France 1" )
827+
PORT_DIPSETTING( 0x3d00, "France 2" )
828+
PORT_DIPSETTING( 0x3e00, "France 3" )
829+
PORT_DIPSETTING( 0x3300, "Findland" )
830+
PORT_DIPSETTING( 0x3900, "German 1" )
831+
PORT_DIPSETTING( 0x3a00, "German 2" )
832+
PORT_DIPSETTING( 0x3b00, "German 3" )
833+
PORT_DIPSETTING( 0x2500, "Italy 1" )
834+
PORT_DIPSETTING( 0x2b00, "Japan 1" )
835+
PORT_DIPSETTING( 0x2c00, "Japan 2" )
836+
PORT_DIPSETTING( 0x3200, "Netherlands" )
837+
PORT_DIPSETTING( 0x3100, "New Zealand" )
838+
PORT_DIPSETTING( 0x3400, "Norway" )
839+
PORT_DIPSETTING( 0x2900, "Spain 1" )
840+
PORT_DIPSETTING( 0x3000, "Sweden 1" )
841+
PORT_DIPSETTING( 0x3f00, "Swiss 1" )
842+
PORT_DIPSETTING( 0x2600, "U.K. 1" )
843+
PORT_DIPSETTING( 0x2700, "U.K. 2" )
844+
PORT_DIPSETTING( 0x2800, "U.K. 3" )
845+
PORT_DIPSETTING( 0x2400, "Swiss 1" )
846+
847+
PORT_START("UNK0")
848+
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
849+
850+
PORT_START("UNK1")
851+
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
852+
INPUT_PORTS_END
853+
854+
751855
static INPUT_PORTS_START( mkla4 )
752856
PORT_START("IN0")
753857
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
@@ -2751,6 +2855,38 @@ ROM_START( strkforc )
27512855
ROM_END
27522856

27532857

2858+
ROM_START( saurnfrnt )
2859+
ROM_REGION( 0x90000, "cvsd:cpu", 0 ) // sound CPU
2860+
ROM_LOAD ( "pa1_saurian_front_sound_rom_u4.u4", 0x10000, 0x10000, CRC(f22a09b8) SHA1(bf8d627b07c76365cff2ba36cb87ac55bbd6e9d1) )
2861+
ROM_RELOAD( 0x20000, 0x10000 )
2862+
ROM_LOAD ( "pa1_saurian_front_sound_rom_u19.u19", 0x30000, 0x10000, CRC(a2dfce0f) SHA1(d3956e3a5dece19f71fc716b8ca1e74f1953992b) )
2863+
ROM_RELOAD( 0x40000, 0x10000 )
2864+
ROM_LOAD ( "pa1_saurian_front_sound_rom_u20.u20", 0x50000, 0x10000, CRC(b0e8f6fd) SHA1(a6129428539d0aa5583009ef526bb6f05cab6af4) )
2865+
ROM_RELOAD( 0x60000, 0x10000 )
2866+
2867+
ROM_REGION16_LE( 0x100000, "maindata", 0 ) // 34010 code
2868+
ROM_LOAD16_BYTE( "pa1_saurian_front_game_rom_u105.u105", 0xc0000, 0x20000, CRC(6cd469f3) SHA1(31cacb172edcc3c956ca799d69d695d8741e7029) ) // v5.0 8/07/90 @ 0x32161 of combined ROMs
2869+
ROM_LOAD16_BYTE( "pa1_saurian_front_game_rom_u89.u89", 0xc0001, 0x20000, CRC(bf5188df) SHA1(1b874adb41ceb1e1cce65fb3796b9532eeb0e817) )
2870+
2871+
ROM_REGION( 0x800000, "gfx", 0 )
2872+
ROM_LOAD ( "pa1_saurian_front_game_rom_u111.u111", 0x000000, 0x20000, CRC(ee7a733d) SHA1(90ce8f063e22e91f1493a7403875834be359fc89) )
2873+
ROM_LOAD ( "pa1_saurian_front_game_rom_u112.u112", 0x020000, 0x20000, CRC(3a1a0656) SHA1(76faea73ed95a33461cf09359ba3af507988a42f) )
2874+
ROM_LOAD ( "pa1_saurian_front_game_rom_u113.u113", 0x040000, 0x20000, CRC(0cba3a22) SHA1(fd9f6b673d01f3895dc4cf304a6c3abfc05788b0) )
2875+
ROM_LOAD ( "pa1_saurian_front_game_rom_u114.u114", 0x060000, 0x20000, CRC(1cce75a8) SHA1(31cb260b64fc832e04812b12c3078fa1c5d38744) )
2876+
2877+
ROM_LOAD ( "pa1_saurian_front_game_rom_u106.u106", 0x080000, 0x20000, CRC(5d6a6c39) SHA1(683e2fd1c2e1f453273c21b6ed77475a5c176359) )
2878+
ROM_LOAD ( "pa1_saurian_front_game_rom_u107.u107", 0x0a0000, 0x20000, CRC(5d178b62) SHA1(9abfed38ec3629dd1a1b99dba372689d203ebdc4) )
2879+
2880+
ROM_LOAD ( "pa1_saurian_front_game_rom_u95.u95", 0x200000, 0x20000, CRC(8918d0c3) SHA1(c4c84e97556996b7453eb331401f90d9d7a9ea52) )
2881+
ROM_LOAD ( "pa1_saurian_front_game_rom_u96.u96", 0x220000, 0x20000, CRC(6de6e648) SHA1(9d839295c4c5145ed000ee200b5d6029f3be544d) )
2882+
ROM_LOAD ( "pa1_saurian_front_game_rom_u97.u97", 0x240000, 0x20000, CRC(6fba9290) SHA1(a7fbfe971431924797f3eba0496359501d642828) )
2883+
ROM_LOAD ( "pa1_saurian_front_game_rom_u98.u98", 0x260000, 0x20000, CRC(298939f9) SHA1(d47c0baa36f943976a00dd1866b79cb02bf91665) )
2884+
2885+
ROM_LOAD ( "pa1_saurian_front_game_rom_u90.u90", 0x280000, 0x20000, CRC(ff87ab13) SHA1(f51ba3d7879dfe934e4ac872937463bb972f8ac2) )
2886+
ROM_LOAD ( "pa1_saurian_front_game_rom_u91.u91", 0x2a0000, 0x20000, CRC(67bd128a) SHA1(ceca5cec261c5c82d0c9e56b777077fdd5977097) )
2887+
ROM_END
2888+
2889+
27542890
ROM_START( mkla4 )
27552891
ROM_REGION( 0x50000, "adpcm:cpu", 0 ) // sound CPU
27562892
ROM_LOAD ( "l1_mortal_kombat_u3_sound_rom.u3", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) ) // same data as the "T-Unit" soundboard, but these are labeled L1 vs SL1
@@ -3716,6 +3852,7 @@ GAME( 1991, shimpactp5, shimpact, yunit_cvsd_6bit_slow, shimpact, midyunit_cv
37163852
GAME( 1991, shimpactp4, shimpact, yunit_cvsd_6bit_slow, shimpact, midyunit_cvsd_state, init_shimpact, ROT0, "Midway", "Super High Impact (prototype, proto 4.0 09/10/91)", MACHINE_SUPPORTS_SAVE ) // See notes about factory restore above
37173853

37183854
GAME( 1991, strkforc, 0, yunit_cvsd_4bit_fast, strkforc, midyunit_cvsd_state, init_strkforc, ROT0, "Midway", "Strike Force (rev 1 02/25/91)", MACHINE_SUPPORTS_SAVE )
3855+
GAME( 1991, saurnfrnt, strkforc, yunit_cvsd_4bit_fast, saurnfrnt,midyunit_cvsd_state, init_strkforc, ROT0, "Williams", "Saurian Front (proto v5.0 8/07/90)", MACHINE_SUPPORTS_SAVE )
37193856

37203857
GAME( 1991, term2, 0, term2, term2, term2_state, init_term2, ORIENTATION_FLIP_X, "Midway", "Terminator 2 - Judgment Day (rev LA4 08/03/92)", MACHINE_SUPPORTS_SAVE )
37213858
GAME( 1991, term2la3, term2, term2, term2, term2_state, init_term2la3, ORIENTATION_FLIP_X, "Midway", "Terminator 2 - Judgment Day (rev LA3 03/27/92)", MACHINE_SUPPORTS_SAVE )
@@ -3735,7 +3872,7 @@ GAME( 1992, mkyturbo, mk, yunit_adpcm_6bit_fast, mkla4, midyunit_ad
37353872
GAME( 1992, mkyturboe, mk, yunit_adpcm_6bit_fast, mkla4, midyunit_adpcm_state, init_mkyturbo, ROT0, "hack", "Mortal Kombat (Turbo 3.0 08/31/92, hack)", MACHINE_SUPPORTS_SAVE )
37363873
GAME( 1992, mknifty, mk, yunit_adpcm_6bit_fast, mkla4, midyunit_adpcm_state, init_mkyturbo, ROT0, "hack", "Mortal Kombat (Nifty Kombo, hack)", MACHINE_SUPPORTS_SAVE )
37373874
GAME( 1992, mknifty666, mk, yunit_adpcm_6bit_fast, mkla4, midyunit_adpcm_state, init_mkyturbo, ROT0, "hack", "Mortal Kombat (Nifty Kombo 666, hack)", MACHINE_SUPPORTS_SAVE )
3738-
GAME( 1992, mkrep, mk, yunit_adpcm_6bit_fast, mkla4, midyunit_adpcm_state, init_mkyturbo, ROT0, "hack", "Mortal Kombat (Reptile Man hack)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
3875+
GAME( 1992, mkrep, mk, yunit_adpcm_6bit_fast, mkla4, midyunit_adpcm_state, init_mkrep, ROT0, "hack", "Mortal Kombat (Reptile Man hack)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION )
37393876
GAME( 1992, mkyawdim, mk, mkyawdim, mkyawdim, mkyawdim_state, init_mkyawdim, ROT0, "bootleg (Yawdim)", "Mortal Kombat (Yawdim bootleg, set 1)", MACHINE_SUPPORTS_SAVE )
37403877
GAME( 1992, mkyawdim2, mk, mkyawdim2, mkyawdim, mkyawdim_state, init_mkyawdim, ROT0, "bootleg (Yawdim)", "Mortal Kombat (Yawdim bootleg, set 2)", MACHINE_SUPPORTS_SAVE ) // some sound effects are missing on real pcb
37413878
GAME( 1992, mkyawdim3, mk, mkyawdim, mkyawdim, mkyawdim_state, init_mkyawdim, ROT0, "bootleg (Yawdim)", "Mortal Kombat (Yawdim bootleg, set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND) // are some sound effects missing/wrong?

src/mame/midway/midyunit.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ class midyunit_adpcm_state : public midyunit_base_state
195195
void yunit_adpcm_6bit_faster(machine_config &config);
196196

197197
void init_mkla3bl();
198+
void init_mkrep();
198199
void init_mkyturbo();
199200
void init_mkyunit();
200201
void init_totcarn();

src/mame/midway/midyunit_m.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,29 @@ void midyunit_adpcm_state::init_mkyturbo()
485485
init_mkyunit();
486486
}
487487

488+
void midyunit_adpcm_state::init_mkrep()
489+
{
490+
// patch out protection for now
491+
492+
uint16_t *rom = (uint16_t *)memregion("maindata")->base();
493+
494+
rom[0x94234 / 2] = 0x05a0;
495+
rom[0x94236 / 2] = 0xe660;
496+
rom[0x94238 / 2] = 0x0104;
497+
498+
rom[0x9637c / 2] = 0x0d3f;
499+
rom[0x9637e / 2] = 0xf343;
500+
rom[0x96380 / 2] = 0x4c00;
501+
502+
rom[0x9c476 / 2] = 0xb5a0;
503+
rom[0x9c478 / 2] = 0x0030;
504+
rom[0x9c47a / 2] = 0x1420;
505+
rom[0x9c47c / 2] = 0xb00d;
506+
rom[0x9c47e / 2] = 0x0030;
507+
508+
init_mkyunit();
509+
}
510+
488511
void midyunit_adpcm_state::init_mkla3bl()
489512
{
490513
// rearrange GFX so the driver can deal with them

src/mame/misc/amstarz80.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ ROM_START( unkamst ) // AMSTAR ELEC ASSY 1061-3700. Had ROM labels removed / unr
190190

191191
ROM_REGION( 0x400, "tiles", 0 )
192192
ROM_LOAD( "2708.e5", 0x000, 0x400, CRC(8a0a90f5) SHA1(2bb2f27a3617dcf776c9ac9b713eafa3d8017c38) )
193-
// empty ROM sockets at d5
193+
// empty ROM socket at d5
194194

195195
// these custom ROMs were dumped via an adapter built on educated guessing of the pinout, so resulting dump isn't confirmed to be 100% correct
196196
// they do contain good GFX data
@@ -215,7 +215,7 @@ ROM_START( unkamsta ) // AMSTAR ELEC ASSY 1061-3700. Had ROM labels removed / un
215215

216216
ROM_REGION( 0x400, "tiles", 0 )
217217
ROM_LOAD( "2708.e5", 0x000, 0x400, CRC(8a0a90f5) SHA1(2bb2f27a3617dcf776c9ac9b713eafa3d8017c38) )
218-
// empty ROM sockets at d5
218+
// empty ROM socket at d5
219219

220220
// these custom ROMs were dumped via an adapter built on educated guessing of the pinout, so resulting dump isn't confirmed to be 100% correct
221221
// they do contain good GFX data
@@ -224,7 +224,7 @@ ROM_START( unkamsta ) // AMSTAR ELEC ASSY 1061-3700. Had ROM labels removed / un
224224
ROM_LOAD( "c29114.b5", 0x1000, 0x1000, CRC(78fee34e) SHA1(3cef1c03d91ec5b74272ec63c4962009cf309b52) ) // 1xxxxxxxxxxx = 0x00, different chip code but same contents as the other sets
225225

226226
ROM_REGION( 0x600, "proms", 0 )
227-
ROM_LOAD( "d2", 0x000, 0x100, NO_DUMP )
227+
ROM_LOAD( "d2", 0x000, 0x100, CRC(77d1cf3b) SHA1(f2891b9ea0af028c8b4f6aac254e4dfc27531da2) )
228228
ROM_LOAD( "f2", 0x100, 0x100, CRC(a33b5045) SHA1(e7eb46c2f75a6a754d023542c4b229f27058a79b) )
229229
ROM_LOAD( "g1", 0x200, 0x100, CRC(7238328c) SHA1(8693aa21f0ede154f0fc17abc1c4f392de4b8018) )
230230
ROM_LOAD( "001_1602.g2", 0x300, 0x100, CRC(8364f735) SHA1(888376546430a9db223893896014ecc95e40d566) )

0 commit comments

Comments
 (0)