@mikecios, post #422
@nogorg, post #429
@nogorg, post #431
@nogorg, post #432

@nogorg, post #433
/*mod.obbfuscated.c #obbe A @ @ = < */char *msg = /* 2 */"This C source " /* */"code file is a " /* 8 */"Protracker " /* @ */"module.\n" /* ( B @ @*/"This Protracker "/* */"module is a " /*1 1*/"C source code " /* , */"file which " /*
*/"implements a\n" /* ( */"pattern data " /* (
*/"scrambler."; /* ( Cheers to everyone at GERP 2015 ð @ ð
M.K. ´›
ª/
ª+
¿ Ö[:0ÉS] Å» ‘ þ-Q â^Ó
6 ð^Ã Ö Ö]A¦@ ÖàG
x› À x»5 þ+}½X x› À x» x»I À x�
X Í0 ÖÐG Ö+T À¬]@
¬}E É
Ö
ÖT â-9ST Ö+@T Gü]
D üÍT G@À : Ö]'¬@ ÖÐG ªÍ
4 ¬À ÖÐ7 ®Â.^Â
W
G Ç
¬ Ö]D¬p ÖpG ÖÍa þð7 Ö+ ¬¦ x» Ö+@]B GüT x›
S Ö^ÂM0 Öà7 ªÍ$ þà7
" É þÍ0 þð7 Ö+ ÖT S]P x»B 8 ¬ÍU ÖpG Ö+ ÖT S] Ö+
þT ¬]T Ö+ þ] ¬T ÅË ÇÍC:µÃ}km âf ÖÍX ÖÐ'
E þ X'
9 ´«@T
üT É
þ+ }) Ö+ ÖT S]T þ+
S¶
}@ âp6 SÍE 8 ÖÀ €» þT
c¬T Ö+ ÖT S]E¬ ¬T hM1 Öà7 þ/ Ö[SMa âÐGÅ â[hMb âpG . Ö+ ‡-c Ê þ¿ ÖT Ð;.] ª/
ª+
¿ Ö[ :0ÉS]@à@/³à@G x»S Ö+T ¬]"
3
5 ¬< ¦M\
%
8
@ ¬À ÖÐG ÖÍ Öð7 É
4
b Ö+ Ö]W ST ¬Í Öà7 Y
x› Ö, x»2 ¬Í& G þÀ
Y ÖÐ ÖàG x›
4 x› É x»` Ö¬TrM` Öp7 þ+
ª}H
Ö+ þ^Ä É¬]Gà»
V x»R Öð7 ¬Í G þÀ
âT :@Ç}]E@
þT ¬M2 ÖpY¬ x› Ç x» SýR @ @VüM7 þ Ì
X µÍ âð8 ÖT \; h]P Ö]0:@ÉST
SÝ
Y ʹ$
þí
P¬@ Ö+
â]1 }T €ü]@@ ÖÐY Ö+SÆ\0Ì ÖÍ2 @ý Ö+ Ö]5 ST Ö ÖMX
x› À x»% Ö Ö]'h@ Öp7¬S3XMS x›
ª+ ð^Äü0Ì x»
R ¬S=8 ¬@ P .Ñü; @M$ þ
µ»
:@G þ-®ÂT
% x»b âÐG x»a âpG x› x»c
¬Ë ÉÍB: Ö]:@ÉST Í0 ÖpY SÍ 8 ÖÀ
ÖÍQ ÖÐ' x» 8
8 ¬Í . ðT :0™S]
È SË É ÖÍ3 x› À x»@ þ+
G@ ÖÐ7
ÊÍ ÊðG x»( âp8 þí9 x»a SË É ÖÍF —¶0
@ ¬» Ö]B¬0ÀST
C : âT :@Ç}]E
Y
@ þ] ¬T
% G ÖÍ2 âð8 ¬®Á.^Â
@ ´« ð^Äü0Ì x»€ þ]( ¬T
R Ì ¬kh½9.f þf Ì
! SÍB 8 ÖÀ Ö» ÖT
ST : ´]4¬@ Öp7
ª@ }Ë Ç âÍF ¬» Ö]:@ÉST
6
) Ö ÖTsí ÖàG x»0 É x� SË É ÖÍ7 x› x»F : âT :0Ç}]5
SÍ G ÖÀ x›
É
7
T
G x»G ¦»
X ›
Ö íI þ-
¬Í1 Öp7» âT’:@L - þ/ Ö[SMa âðG â â[hMb âàG
c þ¿ ÖT Ð;.] É
b@ þ]#@@ ÖðY þ+
8
@ ÊpG Ö+ þT ¬] Ö+ þ]Q ¬T Ö+
T ¬]! ð¶
0
C ÖÀ þÐ7€»
þT
2¬T
R € þ] G¬T þ+
F@ ÖÐ7 x›
( x� SË É ÖÍE ¬ÍY ÖpX Ö+T ¬](¦®Ä ¦0ÀS½) ÖÍG âà8 þ
Dü0À â
´« þT
P¬T ª+ ð^Äü0Ì x» ÖÍ@ ÖðY Ö+ þT ¬]U Öý ÖT ¬M Öà7¬]2 ¬@ SP
H ¬ Ö]Q¬@ Öp7 SË É ÖÍF ¬Í1 G þÀ S\ ¦M¬\ â0@T‘:MD€ þT G¬] ¬VüMT þ x› Ö, x»1}hm".f þf Í ÊpG Ö/
5 Ö/
ÖT ¬M# Öð7 ´Í( Öð7 þ ÖTsüM5 þà7 ´ÍQ ÖÐ7 ¦M' Ö+T ¬] ¬Í@ ÖÐ7 ´« ð^Äü0Ì x»' x»1 À x� . ðT :0™S]H @ýa ´« T
R¬T
W
! Ö+ ÖT S]# }Ë Ç âÍD Ê« ÖT
$ST ü»
€0Ì Ö]S}@ þ Ê« þT
¬T x»b âðG x»a âàG ²
c
þ+
S@ þÐ7 Ö
Ö4 ST :M Ö ÖT â-TST
x»S
ʶ3
U
Sý
¬Í ÖðY É
R þ»
%ü0À µ®Ä ¬M" , Ö+ â] }T Ö+@]8 GüT ¬Í G þÀ
C x»" È
& ÖÍ ÖpG Ö^Â ÖÍ ÖÐ7
: â]@@ âp6 :@É
8»
âT :0Ç}] :@Ç
P@ Ö]GS@ ÖàG
Y:®Ä €0À@½X:
%€0Ì » Ö]):0ÉST ¬3SÝSS.»
8\0À ֮Ĭ» Ö]& ÀST þ Ö]9¬@ þp7 Ö+
V þí2
G ¬À ÖÐ'
þ+ SM ª®Á
` ¬» Ö]5:@ÉST Ö ÖT S] ÖË
!
R ´«T
5¬T ¬» ÖT
0ST Öý9 Ê« þT
S¬T Öý( @®ÂT
x» þ
`ü0À â ¬L
H
Ç
A
0 â[:0Ç}] ´« ÖT
2ST
P ¬» ÖT
8ST
3 ´« ÖT S]WÅ Ö]a þ. âÐGÅ â]b þ. âpG¬ ÖT’¦@8S]A ÊÍS ÊÐG Í ÊàG
Í ÖÐX SË É ÖÍ ¬ ÖT SM þ
¹9
D ´« ÖT
ST .ÍY É ÖÀ ´«@T
AüT É
H
É
H x› L
Öp7
F
üÍB G@À ¬ Ö]P ÀST þ+
@ ÖàG x»3 âT :@Ç}]%:»
`:0Ì :
âT :@Ç}]» âT :0Ç}] }Ë Ç âÍ þ+
"Å@ âÐ8ü ¬T ¬M8 þà7¬» þ] À¬T Öý( ¬Í` Öà7 þ+
ª}
SË É ÖÍC ʶ
0 ‡« â] }T
P
@
c x» Ö» ÖT
ST
:@É
É
A ´À Öð7
.Í9 É ÖÀ Ö Ö] ÀST ¬ Ö]¬p ÖðG x»` À x� Ö+ â]9 }T þíQ Ö+
T Å]# ‡¹
@» þT
F¬T SÍ$ G ÖÀ x»@ À x�
C
D :
:0Ì
5 ‡À ÊðG ÖýW €» þT
¬T
6 É
x»I
:@É Ö+ ]" ¬T x›
b âÐG x›
a âpG . Ö+ ‡-c Ê
ÖÝ!
Ö+ T ¬]@ ¬
@@ âp8 ʮà þ[ü0Ì.]H
}Ë Ç âÍ)
ªÀ ÖðG
T ”M ÊpG ¬ â]6@ âp6 Sýb ÖðG Ë
Y Ö :M @» þT
6¬T ¬Ë Ç þÍ x›
X ](}@ âà8
G þ+
B¬@ Öp7
¹9
M ¬k
hf\½b þf Ö Ö]Eà ÖÐG
Y Y
¬Í Öð7 x›
4 .
V\0ÀS
Q ªÍ& ÖÐG ›
âT :@Ç}]V x› À x» Sý4
Å®Ä :0À½ Ì
) x» É
H Ç
0 ÖýQ ÖpG
H x›
@MV , Ö Ö]Uh@ Öà7
FX@G x› À x»
‡¹4
7 Öý ÖÐG üÍ6 G@À Ö]:@ÉST É
X ´«@T Àü]S¬
Ö]bX@ ÖðG þ+
' ªp ÖÐG x› À x»
D ´À ÖÐ7 Ö» ÖT :QST x› À x»W SË É ÖÍ:®Ä €0À@½
F Ö+T À¬]B
x› Ö]b þ. âàGÅ â]a þ. âàG x› x»c
7 x›
( —¹
ÖÝb ÖàG Ê« ÖT
bST þ+ ð]S”@ ÊàG¬¬]h@ Öà7 â+
:0À þ+ }7 Ö+@T Gü]( Ö+
]@ ¬T @üVüMG þ
A G ¬ Ö[¦@ÈS] Ö+
T §@]Y
Ì
¶9
P É
5 SÝc ÖÐG@ þ]( ¬T ¬» âT :@Ç}]E ´«
þT ¬]@
]”@ ÊàG Ö+] ÅT €+::@É
H ‘
‘@ þ]R€0À¬T Ö» ÖT
UST ¬ Ö]Y¬@ Öp7
# Ç x»2 À x� ¬]5@ âð8¬ Ö]G¬@ ÖÐ7
9 Ç ¬Ë
Ç þÍ Ö+¬Í4¦0Ì þÆ
]
@ ÖÐX
x› É x»
A}@ âÐ8@ þT ¬]1 x› À x»3 Ö¬]D@ Öp7 Ö ÖTs¬M' Öà7
G
5 ÖÝD Ö
Ö]à ÖÐG ´«
4¦0Ì ¬» ÖT’ x»2STs:¬]S@ ÖpG
Ç
b , ´«
\0Ì ¬Í G þÀ
ÊÀ ÊðG x›
À x»
:@É x» 8 » Ö]!:0ÉST x› Ö]b þ. âðGÅ â]a þ. âðG
c - þ.Ó
¬» Ö]D:@ÉST x› É x»@ þ+
¬@ ÖÐGàµÃ}k@m& ðf x› À x»B
P È µ¬
â^Ó
ð^Ã ´« ÖT
ST
ÖÀ ÖÐX€» þT
Q¬T Ö Ö]¦@8ST x»" É x� x›
G
x› É
¬M4 : Ö]}@ þ ÖÍC Öp7¬ ÖT 8S]) Ö
í
´]'¬@ Öð7 ¬^Â ÖÍ3 ÖÐG@
]@@ ÖàX
´«
¦0Ì Ö :M ¬Í G þÀ x»3 É x›
#
€ þ] ¬T SSSݬS x»" Öp7
# G
A x» Ö^Â ÖÍ$ ÖàG x›
0 Ç ´«@T Àü]' x›
C ¬Í4 G þÀ
W Ê«
T
¬T
:@Ç
R âT :@Ç}]" x›
T Ç
€» þT
U¬T
) É
Ö :M2
` Ö+
ÖT ¦@8S]B
S
$
¶(
! x› x»6 › x� ü .Ñ:@Ç þ- ªMV x› x»A É x� x› L
P þ+
bü@ þp7¬´‘hk.o þm& ²
c
¦®Ä ¦0ÀS½ µ â]C}@ þ x› À x»Y
¼°
@ @»
þT
8¬T @ þT ¬]' Sý8 ÖÐG üÍ G@À ¬» Ö]7:0ÌST @ý9 ´«
4\0Ì 8
4}» -` x›
G þÍ! þÐ7 ʶ
¬ ÖT 8S] â^Ó ð^Ã
Ö ÖM%
x» É SÍ 8 ÖÀ
C
¬\ ÖÝP
þí& x») âÐ8 þ+
¬@ Öp7 x»(
¶8
P ÖÍ7 ÖÐ7 Ö¬^Âí% ÖàG Ö+T Å]% Ö+@T Àü]¬» Ö]7¬0ÀST x›
H
@ý6
' É þÍ þÐ7 x»T É x› x» Ö» Ö]I ÀST ʹ
I ¦µÃSk
mU âf: Ö[:0ÉS]9 Ö¬]@ ÖÐ7 þ+
S@ ÖÐ7
'
I þí Ö
:M x›
E Ö+SÆ\0Ì ÖÍE
É
H¬» ÖT’¦@8S]
$ Ç
b Ç Ö ÖTsíV ÖðG Ö Ö] ÀST € þ]H€@G¬T x›
` ¬
ÖT’¦@8S]I Ö+
E
®Ã þ^Ä ¬]! ¬M9
$ s Ö
ÖM% ÖST í1¬T ¬khf.fü½ Ö+
ÖT ¦@8S]! þ- ÖT \;h]#
A Ö+ ÖT S]9Å .Ñ þ-4 þ+ r ª}c ÖÐG þ+ }G ¬Í ÊðG
B x»R Ö+ â]C }T É
(¬ þ]H À¬T
a ®Â
¬}[¬}3ÅP \
a þ@ ÖðY ªM' x›
@ G
` ªÍ ÖÐG
Öý ÖÐG
X
}Ë Ç âÍ ÍD ÖÐY
ÖÝ ¬®ÃP
D þ+
ªp ÖàG ÖÝ
8 x»" À x� SÍ 8 ÖÀ € þ]I€@G¬T
A
@ µÀ ÖÐ' ´«T À¬]U @Ý6 Ê«
T
¬T ]}@ âà8 þ ¬TrSM þp7 SÍ 8 ÖÀ ð¶
T
V ¬¬T SM3 ÖÐG ¬
W:@É x›
À x» ¬» Ö]a:@ÉST ¬]7¬@ ÖÐ'@
] @@ ÊÐG
:@Y
9
E É
0
2
X Í ÖÐG
# Ö
í$
Ö+ þT ¬]
E þ/ ª} ÖàG€» þ]V ¬T ÖÍ7 ÖÐX¬¬]h@ Öp7. x›
ú@G x» ªÍ ÖÐG x»P É ¬ÍS 8À ]a¬@ Öà'
" ¬ Ç x»¬» ÖT
IST Ö íR Ö íY x› x»! Ç
@
]@@ ÊðG ¬Í G þÀ x› x»
®Â[
Å]€ þT €@G¬] ʹ9
F ÖÝ x»" À x� ÖÍ ÖÐ7 É
X
¬À Öp7
®Â[ Å] ´«T À¬]B
ª@ É
x›
x»
0 È
4 ª+ þ]"ü0Ì.T ¬¬T ¬} ÖÐG x» @®Â þT
x›
U «
¦ ð¹(
R þ+
ª}4
¬ Ç x»` Ö]:@ÉST
7 Öð7
C Ç
@
@ý Ö+ ÖT S]Y ¬ÍA G þÀ
Q þ-U Ö+¬Í¦0Ì þÆ þíF
3
É
B x› Ç x»€» þT
(¬T @¬VXM` þ Ö ÖTsí ÖðG ´« ÖT
!ST ¬Í G þÀ þ+
0X@GXdr ¦MQ
ÖÍU ÖÐX
& SÝP ÖÐG ´« þT
6¬T Ç x»1
®Ã þ^Ä ¬]# ÖýS þ+ þ]VÅ@ âp6 ÖÍF ÖÐ7 x›
x»` Ç ÍW ÖÐX€ þ]F G¬T }Ë Ç âÍ$+
8€0À@
Y Ç Ì
1:»
Q:0Ì ´« þT ¬]8¬» ðT :0™S]W Ö+
ÖT ¦@8S]c Ö]):@ÉST Ê«@T
AüT ¬Í G þÀ þ+
}7
¬ ]G}@ ÖÐ' x¶
x»D À x� Ö+ ÖT S] þ+ SM ¬ þ]& À¬T x›
3 ÖÝP ¬Í9 G þÀ ¬]WÅ@ }P Ö^ÂM8 ÖàG SÍG 8 ÖÀ
6
T
$ ¬» ÖT
RST
1
B ´À ÖÐ7+
€0À@ Ö Ö]Y¦@8ST È
þ+
#¬@ ÖÐ7 x› x»2 x› Ö, x» ÍA âð6
3: Ö[:0ÉS]¬» Ö]1 ÀST
$ ‡À ÖpX µÍQ Öp7 ¬ÍV Öà7 ‡Í0 Öà'
¬^Ñ ªÍH þp7 Ö Ö]7à ÖàG Ö» Ö]2 ÀST :
T€0Ì x›
F Ö+ ÖT S] Ö í% þ+ ð]X¬@ ÖpX
X Ç x»A¬ S¬} S x› À x»G x›
X ÖÍ) ÖÐ7 Í6 ÖàY¬Å=1¬p }P
Öý6 ÖÐG ÅË ÇÍC ÖÍG ÖÐ7 þ»
Tü0À µ®Ä
EX@G
I G x»W 8 .»
&\0À Ö®Ä Ö+ þ^Ä É¬]3
^Ã
M ÖÐX
#
I É
Ö+@T Àü]6 þ+
)¬@ Öp7 :@Ç
%
0 G Ö Ö]Fh@ ÖÐ7
! @» þT
Y¬T
V µÀ ÖÐ'
^Ã
MV ÊðG x› XM , É
x»W Ê« @T
6üT S+ þÍ8¦0ÀS €» þT
I¬T
G }Ë Ç âÍ$ ´« ÖT S]
X Y É
A
¹4
C ü=Iü@ þ þ+
C@ ÖÐ' ʹ
Ö+ ÖT ¦@8S]3 ʶ
# þ+
@ ÖÐX ÖÝ3 Ö» ÖT :8ST @» þ]&€0À¬T x»V ¬» âT :@Ç}]1
&
`
P
@
c MH Ì
U @ þ]€0À¬T
¹9
S S+ þÍI¦0ÀS @Ý5 Ö+ ÖT ¦@8S] x› À x»@»
þ]9€0À¬T
´Í( ÖÐ7
V X„E ¬^Ñ ¬Í# Öp7
É
S Ö¬]B@ Öð7@ü3 XM1@S
W¬ Ö]0 ÀST
Ç x› À x»U @ÝT þ+S='S@ P x› À x»`€ þ]¬@ ÖàY SýP ÖÐG
x»" À x�
C ÖÐ ÖÐG x›
V x�
ÍR ÖÐG þ ¬])S@ þð7ü»
€0Ì (µÃ”k@mT
f: âT :0Ç}] Ö» ÖT
ST ¬ S¬}8 S
$}@ âÐ6
x»F À x� x› À x»% @ý
T ‡« â] }T Ö ÖTs¬M` Öà7 Ö+T ¬]V Ö+] ÅT
Y Ì
F G ª+ þ]Tü0Ì.T
É Ö+T §@]9 þ+]BS@ SP
H
ð¹
$
6SÀ ÖÐG
R
X¬L ¬ Ö]I¬0ÀST Öý(
P Ö+ ÖT ¦@8S]1 É
U ¬^Â ÖÝ2 ÖÐG
7 T Å]9 SÍ` 8 ÖÀ ]¬@ Öp'
V SÝW ¬ hMG Öð7 x»@ Z
& Ö¬]¬@ ÖàG T Å]"
Í$ ÖðY@
ü] þ@ ÖàY þ+ r:M# ÖÐG SÍD G ÖÀ € þT €@G¬]c@¬S XMXüS ´¶
¬À Öà' x›
a
¶
x› Ç x»
@ @®Á
^Â
x»7
¬»
Ö]@:0ÌST þ+ ª}% ¬ÍE 8À Ö^ ÖÍ# Öà7 SÝH ÖpG
Ö
Ö]h@ ÖÐ7
µÍ4 þp7 þ+
}@ ÖàY þ+ â]T}@ âà6 x»
x› Ç x»U ¬]¬@ Öà' ‡Í$ ÖàX¬ Ö]! ST }Ë Ç âÍ)
¬ x› Ç x»
& ´À ÖÐ7 ¬]D@ âÐ8
ÖÝ
SË É ÖÍ% x»3 âÀ Öp7 Öý$
]
@ ÊàG(»
þ+
T:@ ÖÐG¬¬T hM Öà7
T ¬MA ÖàX @Ý&
]@@ ÖÐX @Ý
µÀ ÖðY
@
]¬@ ÖpX€» þ]c ¬T ð¶
¬ÍQ ÖðG â»
0
& Ö¬4 í2ST
0 â[:0Ç}]E Ê« ÖT
QST SË É ÖÍG¬ Ö] ¬0ÀST Ê« ÖT
2ST .
'\0ÀS :@É
¬ Ö]:0ÌST
0
c
Ç
É
&@ ¬}! Ö ÖM5 T ¬M ÖðG þ+
7@ Öà7 ´Í ÖÐ7
—¶0
!
Sý5
}Ë Ç âÍI @Í5 ÈÀ x› Ö, x»@ µ]'Å@ âÐ8 ÖÝU ¬ Ö]1X@ ÖpG x»I
Öý Ö ¬^¦M ÖàG É
Y x›
Ö ÖTs¬M) ÖàG Ö¬]!@ ÖÐ7
€ þT G¬] þ+
þ@ ÖpY¬ Ö]Y¬@ Öp7 Ö+ ÖT S] Ç
W µÍ# âÐ8 É
ÖÍ ÖÐ7 ÖÍ ÖàG x›
À x»'Å®Ä :0À½0 ð¶)
1 ¬Ë ÉÍB
B
c þí% ÖÍ Öà7
¬ Ö]F ST þ+
4@ ÖÐ'
Q ÖÍ3 ÖÐ7€»
þT
a¬T ¬» ÖT’ x»SSTs x› x»# › x� :»
S
¬]'@ ÖpG x› À x»C
G ÖÍ ÖÐY ‡Í) Öp' Ö^ÂM ÖÐ7 þ+ ¬:@Y:½: Ö]Q:@ÉST â+
):0À É
R
x» }Ë Ç âÍ
" É
R
‡ÍW ÊÐG µÍ7 âÐ6 x»W¬ Ö]:0ÌST
3
D ¬»
ðT :0™S]a
}@ âÐ8
SX@G ü Ö]5ü@ þp7 ÖýD x› À x»4
¬@ x› É x»0 ¬]}@ Öp' x»5 @ÝA x›
ÖÍ ÖÐG¬S XMESS
"@ Ö
¬TrM ÖÐ7 ð¹)
C x›
P
þ+h]@ Öp7 É
U ¬^Ñ ¬Í6 Öp7 â^Ó ð^Ã
SÝ! ÖpG Ö ÖT S]
& ¬» þ]I À¬T
x›
À x» Ö
¬](à ÖàG x›
6 þ+ µ\@M âp8
2 x›
x»U É x�
Sý( ÖðG
% ¬
}@ : :0Ì
þ+ €½) x» É Ê®Ã þ[ü0Ì.]0 SÍ G ÖÀ ÿÞÐòêÛâßÝÜÚØÖÔÓÑÐÎËÉÇÅ¿½»ºººººººº»¥½½½¿ÀÂÃÅÇÉËÎÐÑÐÁ´±µÃð)1,6GIHPNQMOUSVY\_bcefhijkkjhYB;)íÇºÙØÎÚÕÑÓÒÒñ&**&øíåèí ¡öÐÎçêêÞ4YUEÄ—Gðÿ_hý$*
ûõèåÝÛÑÐÀ„߀¯À€€° €ˆ¦ßæ›Çßß»Ûßà í0ýØ/,:÷|?màg`7hH+@DçP ýÚúáÝÀ²·Í¨««²ƒ›¢¦¦•¹„€·¦€ËÀ€€ÿð€Ï ¢“öµì²Ëÿ(À×`ð#C÷?V SUh-{PHK8xmPmHw~0oD ?+å((èÕùÍò°²² £ˆ¾€§€€§€€‡ €€Ô€€ €ûê€�7°€À °èè3¿’ÿ¥ß ¾÷P Õ+Ì$;7\
?x@U(7}Pmh1ãW `.H_gD ,(ÿÜü±ò ¼Ð€µ€Òª°€½Ð€¿ ¯Û€€Óȩ舳óÌ€±ü ï Ï ¬÷Ô¶ÿX°çÜ+ çGJE+h?`_ed`=@ýdìJ5D;V Èo ÿaçÓ(8Ø7nÔÿ&àÿí; ä÷ ð²ÌåºØ€&€¿Ö€¼ä€€¶„€è€§®€¼€¿à€óü÷Ð/(70P>k+}lS_H{|~U`/Ov0×~*4$ÿ0ÛØ@è¼- ¬ðïà€ï €É€´¯è€× ˆ€ð€‡Ì˜•€€·Ø™ËĬ €³â¨¼ ØÐ» ¿(§3аïkà3ç] ÿ"tØKHGD*(<+?oÉxÍPíè ?Ðß,ïçØ¯ �€ôÈà€?À€ä߸—ا½À�èÆÝ¶‡ ¬ËÐÉäæè¯ìû
´Õ à@€OÐï÷»@¦GÚÿ
ÿù2ç-ñ#Ò/ ß[Ð ßP‹4üÊ? Û)ß ûýB¹ÿHÀ ÏMàÃ÷P˜ì÷èüÛýùàÒç.°ïôÙüØ×÷Ø ÅÍÏ=ë÷û(êò ÿ4Ç Àý§Ç üåðÿÛïNë?ä÷T2ïo<ûcp ?H'!MßW÷
ßêøÙåø×ë¿÷¯Òä‘òð·ÀúÒ¯à·Åì©àÜÖÿÕü¼÷˜ÐïÄ$¶ê û ç(×ëBÒWè7@ïU+@/?8$kÿH((C?$ Pè ÿ èýò·ê÷¨÷ÐßÙ¡ñ¡Ç˜ÈرÀ¿Â°ÇÐÃÚÜÏÕÎ÷áÈøíðÿ2â/çÿ; M'8ÿJ?2b'@2O :
/ìÿðàîàèÛô×àÏÌÚ²×ØÀ߰ߤßô¶ÛÐïÔݵýð Ñþã÷àÿ íï3è( ÿóDßñ ÷Ùú,Ìáì÷!èÿ<Ý øø
ûü÷ÔìÝíìôíÝÃú Õàìææóèñëõæóí ë øÿä ä2ÿÿæÓøùú
ñ å+èý ïÚ ïÿêðÿÿúý ÿþô$û!ù
2
ù'ù"÷ÿù ôìûìåüòâûàîÞüâÛùæâãí÷ÙîðçäûÞÈÚüàçôí Ýñøïøð è&ûèýæã í
îÿôîäßýõù
ú
ø ÿ
ÿÿüóýõÿü÷úüåóåìñüýåÿóðõöõüÿ õ
íúèøõþõÿüñôüôùúöÿßëìûþôýî ü
öû
ÿ
þú öøôùôçâùèòðãðûêãóàïðíòâñúá÷øû ý
öù"
ü þøüþý í õû ðæýöí ÷ýõòûåúòøóüûøøõõí øì ù öøòþ
û
ýûÿþ ÿ ÿ÷úñìýñèûýùòúõøð÷óûèÿóðî èûí÷ûøìòþõüúûð ȵ¸½Î»kUjVÊÑ; ȸλkU¾¸½VÊÑ j-[D[JSH`OXY\w@+<öõо±ÈÄÚ 0))"'!-%)*,9û
ûèÏÜãâí SdPMcUC^i-<{|``||t|jYrfHmo*QX ßÛæßÔ¶ª¬·—’‘‘“„‰˜„€�“ƒ¶´‰ƒ•±ñ΀¥¯¢èØ×ç $*06;AFKPUY]beiloruwy{|}~~~~}|{ywurolieb]YUPKFA;60*$ úôíçáÛÕÏÉĵ±´¯ª¦¢»¹–“�«©ˆ†„ƒ‚��€��‚ƒ„†ˆ©«�“–¹»¢¦ª¯´±µÄÉÏÕÛáçíôú «<Jþ{�™êÇ}Ñóò¦ç%¶Îþüm!7(²”3³ä
E˼¨à¼)´ïW\_†³«9‚‰}q©ÜgÐ"F«ñé¾0o¶îùu.¡”Yi€Mè…¾Y@X×û®<¹
E±F_ÎâÆ8«$µVK=ͬY„¦¼Ì$<,kÎ-öªÚdÃ7ý©·®äÓ©›ù1~Î-Møïƒ¾±îÚÐ2°Ãs
¹$fáÞ®ˆ],G•E_üw7æf{F}Ö·ûm8@]m½xÓ ev'
·gq²ç£À»9¹®•Sæë‘©Z¶Ù×R?Ò´Ç] ¾OÜL…S謡6¢D„$€J5C?xØ“–ûÙy¥Ó
Þå\¬Ç‘Ô,Rà·op›Ø»`þD]ïGÖ&qÿ¹j}âlq*R�ëÊ5.ÃýY÷*ÚDÊGÛ§gz‚�“±¥`íUÛ«f'y±x§¶¬˜û Dn¡^ˆ&®(V èfíîDw’`Ø{`´iak»»Ì¢DÙþ‘tF:~Y¦!ñÇèðFó¶{ôÑ›í›-t=Ï‹o§ÀQ¬Mín·~ÄßGÚ NÙ¯‚ûpv|\àã¥ø¶‡/‘ZÔàzÖ•é|Á_Ó7\o{ÝKt“³¸Ä« úZ
¹ ¯•Û%Yt|olìÊ,1Ƶ›\ͺ9q®ˆ¶s8ÇÄxðMûÒwYSÁ9<÷ï‰ês+Ò!)îÙVÈ$¹a®ºàè=ë§‹ÞK1Ô9�êÝ#ýµk²½ÒÔ®5Ë·)BwÍ2¡Ó«z4µ¶f²äî¿ ÅýT©ÖPì°ß,ױǻJô’D†æ”ȯìKIÀ®–—O—“°µ›·:¹²Üðºº+qtT±‹Ý‹•Ê:…º$”ÜDûo{L€8éz¶¨DÎû¯ÆƒZ]lù}Äæmþ—በ»¨™"µìØîÛy%~™>gÐñ„ºë€ÅÖ)æ?‚8%¦81®ð§Kul)HÖÝèÛá&d´l£LyÞöþò\¹ÖÊ-x5vÔ„ª1Ö¢UЉ@Þ«7<íUQ©ùÆUFcP<ÖÜUÁºÆS')^B3=êGüw€'t^p]ï/4Ën0¦w©ÔâÞ”ùù\ˆZ©ÎÇH„]åó9¢bÏbmâÖ”‰ï‘^%®a=« ËÊ×꥘ #-™A^ß6BX‚ƒÃ¸G›‹5£?ØXÙè@†2pá¡%¦,·ô¼)¸ÔÅ,4ÿÇV1ï˦È`Í.v¶bd_1xò–ºg™tÀÂu¥^ûL—~¦5@±†¶þ!¡4rl°~C_đŪϱ™ªkJÍO ¸rÇ–ô©ÄÄ:åˆ:�mG�ø¼÷IyòãÒ{q¼F[Ê…kifÜË�xðNΓ¹-@ˆn‹g••®ãðµ¶‚÷0ª£ˆd‚¸p»÷?S°‰$4lã¸Ã(
pjGTb/ùÆë¶‘Ô‚fôùTºªwµ6Î:pt‹¥è�¥{Ó-Xl#.û‘slƒm±t‰%"¥—‡â¿N>Ú–,xn÷lLa‡jOgÅv¦3{–¥½27€¶ Oð L'‘É'Oç GCî6#¾Äƒß©j§b}öÖò‘çÏ=»¦9¢
b_X¢±Ï=s#*:6µt%Ae7}ÉÚ£´aßzSÏSr1ƒ~¢(·ëîÛ¬�G 1g݉N vÌmÓÎ.>UÌÁ=®¦kÜDõTÜ'3÷vwêÑFÚ3Òu“¢?i'†%1\›>¬gE†>ࡽàdwòzZæå‚û*‰µgØ8àÂà «Ü�qÇE)׬&n¯¬í«Mbˆû×'Øp'¡kÛå5ké_çs[»u!6Ç(ÕÅý® ¤ß�ŲF»ÀÅÄrÌÔȶ¢aÓÓ ¹w-¸&eý®ùßM£Ð:Mo½D8?j·¹%L
*²]Ú_±ì ÍÔQü€}d^)uù7ÌN¶ä“îÀãwÕªw«ñJTãDÖ(
„»Ghë)B®êî
™+eÒ“UÙ#¶M¬Â)«aò¶OÐW$ç1vöÄ2©ã·¤ÈóI;AÞÃ�@äûÔFÕ…ö«=Yj¤5§€&"{EDîUÐ@¥Nªºµ ýF#…ÊvÈfI·gù±©W¢#¨{nß)ÄþXþâ;›½¿J¶;OµõFU6áÉy‹Yf«’Ï�¢ ½WsPk•·Ô®BwÞÚo1;w!¶™Ý°ý}õ,Ú"•‡È«d•*ܧÙz Ïö ¢35WѴ܉(«]@&LY·¾v®¢®êp{ÈÛ
ðB²jêÐÏ«òÍ¥ÇMÅG×ÔìHPL²És[éÂð+2,–ɦ
4rwè¸åGµx Å+s(¥ó·¶×~ó¦ D¦Ù“íIîî÷ÂÁ»†ˆý <ÛNfÏ/p–,΀Òò•²eð8M^`ÊM÷äºÉBuƲީ‚ûÊ=h±/YíØ«]âæ´ú¯,³»F+wvz¿5]eäÑEbÒÿrs¯nûAÛ£z¢Ô”w–ˆ•ü[¦~öê�ÅÕ¡Dy¬mbýäçꉈ²â²tñ”c“MmwÐØmµ²Óö0-?˜‰þ!´Ý>©%,ëȱK[6$l¾
X¬\F»ëµ¸z|=UByTÔ·l8×Ðó«U[»ñ謩&Ø$MKÔÖcA‰O…"ĵϫfÄ‹zà°“×Ï}ꯨ@âÏ}%jB--mM©ëÕv))‹öïÁ0Ñ—kpB¶y6/è’|SS:f«ùG'?ûVÀ‘#à*f©Ô*mµ2qdZ‰eƒ5«öí%«Î'[h˜à\J—‹s„!ãE¤k«×Àì‚z}“§z-øm,þøüx@ðÇd_ lÒ·|»¹âpa hþS¡„¿ü´¨S�æ]–-´¡uÊ1Y4»øÜ–Ð ý‡âHƒñCSÚd!ÆäæEhT<|V7FÅ{S+5sH¶éðܲKt©¬_ZUêÕV|-&>&*Üý* ÂW/ßB—¹ºÚR\ýM±×H½ÿSPÉÔÕ‡ðê©·ÔË‚ò;6zMy07 f¯EXjôa´:xû<: cJΰ*wà½bìÝJ€„aÙ¢'c¤ç"2áÜÎdÉÀ÷»'I¶j/J¾gKˆ`}¢]@Ül;·ùîõÂz/dm–‹?Ý—$¯êâ¦lÐoÊð9¶¨åÁeǯõ…JX*Òìº)Î+°8²·Ã|½¢éÁ‘Ûuã5xøvé Qư™®ØÎF`þñ½ßBZftF�’mÜÆ{@d
¼é:?ú•,hJFÝ=€öÉújËÍcÒ}L’‘òÒE¥˜ˆÅ¬Ùù¿\¢ã©<>ô›ÈXl_
a¶,RsÑx3‚lXÖã“ë5¶çd5ÓU ;±ø!!ûÿÆX÷™©
2Úcx“l®Ñ î fä_>‰æ~ù¦ê-@ÈRð-‚¶öa WÒûK@íu¬¤BµBßÓÿ¨þL˜#X÷+´õ^¥ÖJ«!2>umM¼Çy¡›µ‘Ë°ÖØ‹eo'K§Ê}õÖ±_˜¾¢¿ôxOFòª�|¦úéÒ@õp/7äÓ3©Vt‘¶öx¬C›Ç”Á]ðD·Í§ß¯Sí£S2ÞN±J¿ELX€ÃæËÑ7#Mõa%·\nçY¸·sÌG§Öá±%RÁtöXxþ7AÂ%1þʬù\ÒíÜ7Iºg\ÕõbÝ} åÐo¦Ø(l4eú4›„‘®ó£çîüÒˆ´•ã$‰v¥–9S÷x®Ö)ƒ{^ïz¥ü$e,z½iÌxBví˽ø²6yPªþ‡h¾©6{{¬VÓà3ªÖ ¶ ™exµéH±¼‡ÛUÅ̆knâ;N¦ªrìåƒ3´;léÛÅÏ÷µ}<Zc¯2N
¼aBàÿuG“GSrõ¦ªÑf>]OVðÎO±Ó gïÓ±ßÚq«ç_¦¶“ÝñIÖ†W±}c1õñ3¼m#3ö–è±ð¦âH¡Í† 戔E½ÐPéÿ©ÓâÃØxBËÆ‘õÎíQ¦˜/»äJõÙµvtØO·/gP‹~ª
E/ü=k‰g 6
Ζ›Snüª'_:Ý©s¯ÃÑârû-…Ê
I‰‰Ýt¡#˲„ú+#Áö×A¶DÃç¡ ÐêâÝÚÖÓÐËǽºººº»½½ÀÃÇËÐдµð16IPQOSY_cfikjY;ÇÙÎÕÓÒ&*í RTEIIPURQNNUWUYceB%)ø
뻼ÄöÜ SdPMcUC^i-<{|``||t|jYrfHmo*QX ßÛæßÔ¶ª¬·—’‘‘“„‰˜„€�“ƒ¶´‰ƒ•±ñ΀¥¯¢èØ×ç SdPMcUC^i-<{|``||t|jYrfHmo*QX ßÛæßÔ¶ª¬·—’‘‘“„‰˜„€�“ƒ¶´‰ƒ•±ñ΀¥¯¢èØ×ç SdPMcUC^i-<{|``||t|jYrfHmo*QX ßÛæßÔ¶ª¬·—’‘‘“„‰˜„€�“ƒ¶´‰ƒ•±ñ΀¥¯¢èØ×ç */
/* This is mod.obbfuscated.c. Compile with a C99 compiler. */
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef DEBUG
#define dprintf printf("%s():%d ", __func__, __LINE__); printf
#else
#define dprintf if(0) printf
#endif
static const uint8_t CMD_JUMP = 0x7;
static const long O_MK = 1080;
static const long O_SONGLEN = 950;
static const long O_SONGPOS = 952;
static const long O_PATTERNDATA = 1084;
static const int POSLEN = 128;
static const int LLEN = 4*4;
static const int PLEN = 0x40*4*4;
/* Module state */
static struct {
/* Each source line has a "next" line where the linear succession is copied. */
int *nextline;
/* Allocation state */
int *linepool;
/* Source pattern data, destination pattern data */
uint8_t *srcp, *dstp;
uint8_t songlen; /* 1..64 (128) (number of positions) */
uint8_t hipattern; /* 0..63 */
} p = {NULL, NULL, NULL, NULL, 0, 0};
/* Source file, destination file */
FILE *sf = NULL, *df = NULL;
void init(void)
{
fseek(sf, O_SONGLEN, SEEK_SET);
p.songlen = fgetc(sf);
/* Truncate because PT supports only 64 patterns. */
p.songlen = 64 < p.songlen ? 64 : p.songlen;
p.srcp = malloc(p.songlen*PLEN);
p.dstp = malloc(p.songlen*PLEN);
/* Make a linear copy of file pattern data to p.srcp */
for (int i = 0; i < p.songlen; i++) {
fseek(sf, O_SONGPOS+i, SEEK_SET);
int j = fgetc(sf);
fseek(sf, O_PATTERNDATA+j*PLEN, SEEK_SET);
fread(p.srcp+i*PLEN, 1, PLEN, sf);
}
fseek(sf, O_SONGPOS, SEEK_SET);
for (int i = 0; i < POSLEN; i++) {
int j = fgetc(sf);
p.hipattern = j > p.hipattern ? j : p.hipattern;
}
p.linepool = malloc(p.songlen*0x40*sizeof(int));
p.nextline = malloc(p.songlen*0x40*sizeof(int));
for (int i = 0; i < p.songlen*0x40; i++) {
p.linepool[i] = i;
p.nextline[i] = -1;
}
}
/* Allocate a line having number n in any pattern, or nothing. */
int lines_allocmod(int n)
{
n%=0x40;
while (n < p.songlen*0x40) {
if (-1 != p.linepool[n]) {
p.linepool[n] = -1;
return n;
}
n+=0x40;
}
return -1;
}
/* Allocate any line. */
int lines_allocany(void)
{
for(int i = 0; i < p.songlen*0x40; i++) {
int n = p.linepool[i];
if (-1 != n) {
p.linepool[i] = -1;
return n;
}
}
return -1;
}
static const int JUMP_NONE = -2;
static const int JUMP_ANY = -1;
int jumptype(int l)
{
int absval, abs=0, any=0;
uint8_t *entry = &p.srcp[l*4*4];
for (int i = 0; i < 4; i++) {
if (0 == ((entry[2] & 0xf) | entry[3])) {
any++;
} else if (CMD_JUMP == (entry[2] & 0xf)) {
abs=1;
absval=entry[3] % 0x40;
}
entry+=4;
}
if (abs && any) {
return absval;
} else if (1 < any) {
return JUMP_ANY;
} else {
return JUMP_NONE;
}
}
/* Find and allocate absolute line allocations. */
void pass1(void)
{
int i, jt, n=0;
lines_allocmod(0);
for (i = 0; i < p.songlen*0x40-1; i++) {
/* Get preference */
jt = jumptype(i);
if (0 <= jt) {
/* Absolute allocation */
n = lines_allocmod(jt);
if (-1 == n) {
printf("ABS: i=0x%04x, n=0x%04x, jt=0x%04x: allocation: FAIL\n", i, n, jt);
} else {
dprintf("ABS: i=0x%04x, n=0x%04x, jt=0x%04x: allocation: PASS\n", i, n, jt);
p.nextline[i] = n;
}
} else if (JUMP_ANY == jt) {
/* This is an ANY allocation: processed in next pass. */
} else {
printf("NONE: i=0x%04x, n=0x%04x, jt=0x%04x: allocation: FAIL\n", i, n, jt);
}
}
/* Force jump from last line to first. */
p.nextline[i] = 0;
}
/* Arrange the n elements of array in random order. */
void shuffle(int *array, int n)
{
for (int i = 0; i < n-1; i++) {
int j = i + rand() / (RAND_MAX / (n - i) + 1);
int t = array[j];
array[j] = array[i];
array[i] = t;
}
}
void pass2(void)
{
/* First randomize the remaining lines */
shuffle(p.linepool, p.songlen*64);
for (int i = 0; i < p.songlen*0x40; i++) {
/* Get preference */
int jt = jumptype(i);
int n = p.nextline[i];
if (JUMP_NONE != jt) {
/* Absolute or any allocation */
if (-1 == n) {
/* Not already allocated (could also be unresolved absolute jumps. */
int a;
a = lines_allocany();
dprintf("ANY: i=0x%04x, a=0x%04x: allocation: PASS\n", i, a);
p.nextline[i] = a;
}
} else {
printf("NONE: i=0x%04x, n=0x%04x, jt=0x%04x: allocation: FAIL\n", i, n, jt);
}
}
{
int a;
while (-1 != (a = lines_allocany())) {
printf("Unallocated line: a=0x%04x: FAIL\n", a);
}
}
/* Verify */
for (int i = 0; i < p.songlen*0x40; i++) {
/* Get preference */
int m = p.nextline[i];
if (m == -1) {
printf("i=0x%04x has no next line installed: FAIL\n", i);
}
for (int j = 0; j < p.songlen*0x40; j++) {
int n = p.nextline[j];
if ((m == n) && (i != j)) {
printf("Loop detected: i=0x%02x, j=0x%02x, n=0x%02x: FAIL\n", i, j, n);
}
}
}
}
void setjump(uint8_t *entry, int jt, int dline)
{
uint8_t pos = dline/64;
uint8_t row = dline%64;
/* B command must be BEFORE D command */
if (JUMP_NONE == jt) {
/* do nothing */
} else if (JUMP_ANY == jt) {
int found = 0;
for (int i = 0; i < 4; i++) {
if (0 == ((entry[2] & 0x0f) | entry[3])) {
if (0 == found) {
entry[2] |= 0x0b;
entry[3] = pos;
} else if (1 == found) {
entry[2] |= 0x0d;
/* Next position of the song and the row row. */
/* Silly decimal representation! */
entry[3] = (row/10)*16 | (row%10);
}
found++;
}
entry+=4;
}
} else { /* JUMP_ABS */
int bdone = 0;
for (int i = 0; i < 4; i++) {
uint8_t cmd = entry[2] & 0x0f;
if (CMD_JUMP == cmd) {
entry[2] &= 0xf0;
entry[3] = 0x00;
}
if ((0 == (cmd | entry[3])) || (CMD_JUMP == cmd)) {
if (0 == bdone) {
entry[2] |= 0x0b;
entry[3] = pos;
} else if (1 == bdone) {
entry[2] |= 0x0d;
entry[3] = (row/10)*16 | (row%10);
}
bdone++;
}
entry+=4;
}
}
}
/* Copy each source line to destination. */
void pass3(void)
{
int dl;
dl = 0;
for (int sl = 0; sl < p.songlen*64; sl++) {
memcpy(&p.dstp[dl*LLEN], &p.srcp[sl*LLEN], LLEN);
int next = p.nextline[sl];
int jt = jumptype(sl);
setjump(&p.dstp[dl*LLEN], jt, next);
dl = next;
}
}
void dump(void)
{
char c;
int i;
fseek(sf, 0, SEEK_SET);
for(i = 0; i < O_SONGLEN; i++) {
c = fgetc(sf);
fputc(c, df);
}
fputc(p.songlen, df);
fputc(127, df);
for (i = 0; i < p.songlen; i++) {
fputc(i, df);
}
for (;i < POSLEN; i++) {
fputc(0, df);
}
fwrite("M.K.", 1, 4, df);
fwrite(p.dstp, PLEN, p.songlen, df);
fseek(sf, O_PATTERNDATA+(p.hipattern+1)*PLEN, SEEK_SET);
while ( EOF != (i = fgetc(sf))) {
fputc(i, df);
}
}
void tryopen(int argc, char *argv[])
{
if (argc < 3) {
printf("%s SOURCE DEST\n", argv[0]);
exit(EXIT_FAILURE);
}
if (NULL == (sf = fopen(argv[1], "r"))) {
printf("%s: open failed\n", argv[1]);
exit(EXIT_FAILURE);
}
if (NULL == (df = fopen(argv[2], "wb"))) {
printf("%s: open failed\n", argv[2]);
exit(EXIT_FAILURE);
}
fseek(sf, O_MK, SEEK_SET);
char buf[4];
fread(buf, 1, 4, sf);
if (strncmp(buf, "M.K.", 4)) {
puts("No Protracker magic string");
exit(EXIT_FAILURE);
}
}
int main(int argc, char *argv[])
{
puts(msg);
tryopen(argc, argv);
init();
pass1();
pass2();
pass3();
dump();
return EXIT_SUCCESS;
} @nogorg, post #432
od paru lat i mnie pa³êta siê podobna idea po g³owie tym ¿e zastanawia³em siê czy da siê wygenerowaæ tego typu ca³e akordy, które nadal bêd± mia³y rozmiar nadaj±cy siê do chiptune. Matematycznie wzglêdnie ³atwo jest wyliczyæ odpowied¼ natomiast d¼wiêkowo mo¿na dopu¶ciæ siê pewnych niedok³adno¶ci i zaokr±gleñ.