Skip to content

Commit 9e2fdc3

Browse files
committed
File format for reading and writing Imlac "special TTY" files.
1 parent 5011b1b commit 9e2fdc3

File tree

6 files changed

+358
-1
lines changed

6 files changed

+358
-1
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ CFLAGS = -g -W -Wall
33

44
FILES = sblk-file.o pdump-file.o dmp-file.o raw-file.o shr-file.o \
55
mdl-file.o rim10-file.o fasl-file.o palx-file.o lda-file.o \
6-
cross-file.o hex-file.o atari-file.o
6+
cross-file.o hex-file.o atari-file.o iml-file.o
77

88
WORDS = aa-word.o bin-word.o cadr-word.o core-word.o data8-word.o \
99
dta-word.o its-word.o oct-word.o pt-word.o sail-word.o tape-word.o \

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,4 @@ In addition, some mini and micro computer program formats are supported:
5656
- CROSS binaries.
5757
- CROSS "ASCII HEX" files.
5858
- Atari DOS executables.
59+
- Imlac "speciall TTY" files.

dis.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ extern struct file_format cross_file_format;
6868
extern struct file_format dmp_file_format;
6969
extern struct file_format fasl_file_format;
7070
extern struct file_format hex_file_format;
71+
extern struct file_format iml_file_format;
7172
extern struct file_format lda_file_format;
7273
extern struct file_format mdl_file_format;
7374
extern struct file_format palx_file_format;

file.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ static struct file_format *file_formats[] = {
2828
&dmp_file_format,
2929
&fasl_file_format,
3030
&hex_file_format,
31+
&iml_file_format,
3132
&lda_file_format,
3233
&mdl_file_format,
3334
&palx_file_format,

iml-file.c

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
/* Copyright (C) 2021 Lars Brinkhoff <lars@nocrew.org>
2+
3+
This program is free software: you can redistribute it and/or modify
4+
it under the terms of the GNU General Public License as published by
5+
the Free Software Foundation, either version 2 of the License, or
6+
(at your option) any later version.
7+
8+
This program is distributed in the hope that it will be useful,
9+
but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
GNU General Public License for more details.
12+
13+
You should have received a copy of the GNU General Public License
14+
along with this program. If not, see <http://www.gnu.org/licenses/>. */
15+
16+
#include <stdio.h>
17+
18+
#include "dis.h"
19+
#include "memory.h"
20+
21+
static int checksum = 0;
22+
23+
/* "Special TTY" boostrap loader. */
24+
static char *loader =
25+
"@BAJH@@IBGOLBGOMCONGCONGH@@FBGONCOMOGOOHAGLL@@@@BGOOCOMOJGOOCOMHCGOO\r\n"
26+
"CGONAGLMCOMOGGOLHD@AAGL@@@@@@@@@H@@HFOOL@D@DH@@DBGOLIGMH@@@@H@@IBGOM\r\n"
27+
"CONGCONGCONGCONGIGMO@@@@@DB@AGNHH@@I@BAKBGKODOOIGOOJAGNHFGKODOOKBOOM\r\n"
28+
"@F@C@F@AEGOMBGOMIGNGOOOO@@G@@@D@@@@O@@@@@@@@@@@@@@@@OOL@\r\n\r\n";
29+
30+
static void
31+
update_sum (int word)
32+
{
33+
checksum += word;
34+
if (checksum & 0200000)
35+
{
36+
checksum++;
37+
checksum &= 0177777;
38+
}
39+
}
40+
41+
static int
42+
get_4 (FILE *f)
43+
{
44+
for (;;)
45+
{
46+
int c = fgetc (f);
47+
if (c == EOF)
48+
{
49+
fprintf (stderr, "Unexpected end of input file.\n");
50+
exit (1);
51+
}
52+
53+
if ((c & 0160) == 0100)
54+
return c & 017;
55+
}
56+
}
57+
58+
static int
59+
get_8 (FILE *f)
60+
{
61+
return (get_4 (f) << 4) | get_4 (f);
62+
}
63+
64+
static int
65+
get_16 (FILE *f)
66+
{
67+
int data = (get_8 (f) << 8) | get_8 (f);
68+
update_sum (data);
69+
return data;
70+
}
71+
72+
static void
73+
read_iml (FILE *f, struct pdp10_memory *memory, int cpu_model)
74+
{
75+
int length, address, data;
76+
word_t *core;
77+
int i;
78+
79+
(void)cpu_model;
80+
start_instruction = 0;
81+
82+
/* Discard block loader. */
83+
for (i = 0; i < 65; i++)
84+
get_16 (f);
85+
86+
for (;;)
87+
{
88+
length = get_8 (f);
89+
address = get_16 (f);
90+
91+
/* All ones signals end of data. */
92+
if (address == 0177777)
93+
{
94+
/* Search for a start address at 037714 modulo 4K. */
95+
address = 037714;
96+
while (address >= 07714)
97+
{
98+
start_instruction = get_word_at (memory, address);
99+
if (start_instruction == -1)
100+
start_instruction = 0;
101+
else
102+
break;
103+
address -= 4096;
104+
}
105+
return;
106+
}
107+
108+
core = malloc (length * sizeof (word_t));
109+
if (core == NULL)
110+
{
111+
fprintf (stderr, "Out of memory.\n");
112+
exit (1);
113+
}
114+
115+
checksum = 0;
116+
for (i = address; i < address + length; i++)
117+
core[i] = get_16 (f);
118+
add_memory (memory, address, length, core);
119+
120+
data = checksum;
121+
if (data != get_16 (f))
122+
fprintf (stderr, "Bad checksum: %04X.\n", data);
123+
}
124+
}
125+
126+
static void
127+
out_4 (FILE *f, int word)
128+
{
129+
fputc ((word & 017) + 0100, f);
130+
}
131+
132+
static void
133+
out_8 (FILE *f, int word)
134+
{
135+
out_4 (f, word >> 4);
136+
out_4 (f, word);
137+
}
138+
139+
static void
140+
out_16 (FILE *f, int word)
141+
{
142+
update_sum (word);
143+
out_8 (f, word >> 8);
144+
out_8 (f, word);
145+
}
146+
147+
static void
148+
write_iml (FILE *f, struct pdp10_memory *memory)
149+
{
150+
int start, length;
151+
int i, j;
152+
153+
for (i = 0; i < (int)sizeof loader; i++)
154+
fputc (loader[i], f);
155+
156+
for (i = 0; i < memory->areas; i++)
157+
{
158+
start = memory->area[i].start;
159+
length = memory->area[i].end - start;
160+
out_8 (f, length);
161+
out_16 (f, start);
162+
163+
checksum = 0;
164+
for (j = 0; j < length; j++)
165+
out_16 (f, get_word_at (memory, start + j));
166+
out_16 (f, checksum);
167+
}
168+
169+
if (start_instruction != 0)
170+
{
171+
/* The special TTY loader will end up executing a jump indrected
172+
through 37714. */
173+
out_8 (f, 2);
174+
out_16 (f, 037713);
175+
checksum = 0;
176+
out_16 (f, 0113714);
177+
out_16 (f, start_instruction & 037777);
178+
out_16 (f, checksum);
179+
}
180+
181+
out_8 (f, 0377);
182+
out_16 (f, 0177777);
183+
fprintf (f, "\r\n");
184+
}
185+
186+
struct file_format iml_file_format = {
187+
"iml",
188+
read_iml,
189+
write_iml
190+
};

samples/ssv22.iml

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
@BAJH@@IBGOLBGOMCONGCONGH@@FBGONCOMOGOOHAGLL@@@@BGOOCOMOJGOOCOMHCGOO
2+
CGONAGLMCOMOGGOLHD@AAGL@@@@@@@@@H@@HFOOL@D@DH@@DBGOLIGMH@@@@H@@IBGOM
3+
CONGCONGCONGCONGIGMO@@@@@DB@AGNHH@@I@BAKBGKODOOIGOOJAGNHFGKODOOKBOOM
4+
@F@C@F@AEGOMBGOMIGNGOOOO@@G@@@D@@@@O@@@@@@@@@@@@@@@@OOL@
5+
6+
@D@@@AB@FB@FAAB@FCA@DHEGAN@B@@AD@E@HAOOOBE@GAN@@D@A@FLA@FG@@@@@BLD@B
7+
CI@B@C@FD@I@DBFEKOCHDBC@FDA@EDH@@A@BAAGMKLA@EDHH@AB@FDFEL@B@GBA@ELC@
8+
FEA@ELHH@JB@FEFF@MEMLABF@MCIEAF@FCEHNHAN@@EN@F@AF@FB@BGBI@@@@@@@@@@@
9+
@@@@OOOF@@@@CKLCCKMGCKNOCHGGA@FO@MLBCHDB@B@J@H@B@BFA@BGBHDA@CKOKHDB@
10+
CLKAA@GB@@@@H@@AJELCJ@AEBEIOLFNIAN@@GLBEJ@FELDJELEF@AECJ@CJELFFELGJE
11+
LHFELIJELJF@AEBEJABEJBFELEBEJCFELCBEJDI@GG@@@@CHKNA@HOI@HN@@@@CHN@A@
12+
ICI@IB@@@@CHIKCHN@CHIKCHLFAN@@IJI@IF@@@@HH@ABA@ACHN@A@INH@@ABA@AI@IK
13+
@@@@HH@ABA@ACHKNA@JFH@@ABA@ACHKNI@JCI@JC@@@@HH@ABA@ACHKNA@K@H@@ABA@A
14+
CHKNI@JMHH@AFMJCODJHAN@@KHBEJEFELKOMJECI@BCKAII@JM@@@@@H@AFMJCBEJEH@
15+
@DBEJF@H@AFMJBBEJGNEJBHD@AA@LNGMLLA@MFCA@AA@M@C@KNI@KNCJ@NGELM@D@BA@
16+
MFCK@HCJLOKA@LAN@@MFFEJGCJ@CJEJFNEJBJEJCFELDJEJECEJBCEJCI@KN@@@@HH@A
17+
FMJCBEJEHH@AFMJBBEJGNEJEHD@AA@NNGMLLA@OGCA@AA@O@C@N@I@N@CJAEGELNHD@B
18+
A@OFF@HBAN@@ODCJMLCJOINEJEJEJGFEJGBEJBCJ@CJEJCFELDJEJEFEJEBEJCI@N@@@
19+
@@@@@@BMJBGELOBMJBJEJBFEJCB@@HFEJBCJ@CJ@@HCIBCCHKNIA@B@@@@NEJBHD@ACL
20+
COAN@AABIA@OGMLLAAALCJAMGMM@AAALCK@HAAALCJMLH@@@CEJBFEJCB@@HFEJBCJ@C
21+
J@@HIA@O@@@@HH@EFMJBGEJCBEJHGMMAAABMFEKAHD@A@CLICEJHIABCFEKAKEOIAN@A
22+
C@HD@A@CLIHH@JBEKMFELCB@@HB@@IN@@HGMLLAACGCEKMAACGN@@HJ@@IGMLDAACLN@
23+
@HJ@@INELJCJ@IG@@HFH@ICJ@CJELJFEJDG@@HFH@IBEJDFEJCG@@HCADGAN@ADNFH@I
24+
BEJCIABC@@@@H@@ABEJIFEMBB@@OHH@DBEJJ@IGGBEJKHH@DFMJBGEJCBEJLH@@ABMJL
25+
OEJK@D@BAAFECEJLAAF@NMJKBMJL@D@AAAFNGMJIAAFOFEMCMMJCAN@AFLJ@@OAAGCCE
26+
JIFMMDBEJMNEJMJ@@OCEJKCEJJAAENIAEA@CNH@@FD@@@J@@@A@@@@CJLDBEJNCJLDBE
27+
JO@H@AGEJOFMJ@HD@AAAIB@D@BAAHMH@@FBEK@CHIFDHFMAN@AHJCEK@AAHIAAICBEK@
28+
CHJMCEK@AAHNAAICCHIK@H@AGEJNHD@AIAGKBEK@NEJBGMLKAAILAAJBHD@AAAJBCHKN
29+
CEK@AAIHIAGKFEMECI@BCEK@AAJBIAGK@@@@JFNJAN@AJHCHIKCILGIAJG@@@@CIJGCI
30+
@OCI@OIAJK@@@@CHN@AAKDIAK@CI@OAAKA@@@@NEJBHD@AIAKFCI@OAAKG@@@@CHN@AA
31+
L@IAKLNEJBGMLLAALECHKNIAKLCI@O@CKMAN@ALFAAKM@@@@NEJBHD@AIALGFEJBB@@H
32+
N@@HGMLLAAMAIALGCI@OAALH@@@@FEKA@D@AAAMJCHN@CI@OIAMC@HGOCIOBIAMC@@@@
33+
BMKAHD@BAANDBMKACIOBIAMMNOLEAN@ANDBMKACEKBAANKBEKCFEMCCI@BFEKCGMMFAA
34+
O@CLKHCKAIIAMMCLKHIAMM@@@@@DD@AAOC@BBCIAOB@@@@FELKCI@BCKAICHIFIAOG@@
35+
@@FEJDH@@DCJ@CJELJAKLJAN@B@BIAOM@@@@GEMGHD@BFMMHFMMHIB@C@@@@DMMI@D@B
36+
EMMJIB@I@@@@HHAENMLHJELHCEJ@FEJ@IB@N@@@@@HAENMLHJELHHH@AFMJ@BEJ@IBAE
37+
@@@@HH@AFMIOLBN@AN@BB@BEIOIBAM@@@@F@EDEMMKB@EDFEMCBF@MIBBB@@@@CHIBCM
38+
FG@D@AABBOIBBICIOBGMMFABCECJLDGMMLABCBCHKNABBK@@@@CJBICHGGIBCG@@@@FE
39+
KA@D@BB@MLAN@BCNIBCK@H@MCIMMCHN@ABDDABDGNEJBGMMCABDACHKNCMFGCIOBGMMF
40+
ABDGCHKNIBCK@@@@CHIBCMFG@D@AABEDIBDNGMMMCJEHCHKNABE@@@@@BEKCHOOOBEKM
41+
JOLHAN@BEL@BAJCEKMABELFEKCCIOBIBEH@@@@H@@ABEKDFEJCBEJEHH@AFMJEBEJENE
42+
JEHD@AABGOGMLKABG@ABGOGMLLABGCABFGGMMCABGFABFGCJHHABGMFEKDDMMNBMDLAN
43+
@BGJFMMOBEKDABFGCEKDABFGFEKDDMMNGEN@HD@BIBFB@FCBFMNACI@BIBFB@@@@BEKC
44+
DMNBGENC@D@BABIAGEND@D@BCBHHFEKCIBHH@@@@NEJBGMLKABJACJFBLBHNAN@BIHFE
45+
KDGEND@D@BABIGFENECI@BFEMECI@BIBICCHKNABIDABIG@@@@CJLDFMNFBEJEGENGHD
46+
@BIBJDNEJEHD@AIBJDBEJEKMJEIBJD@@@@HCBKHBLKH@IBH@IBODJCAN@BKFH@IBHCBN
47+
HCLIHCLC@@@@CJLDBEJEDMNHHD@AABLBFEJEIBKJFEJEADKF@@@@@DB@ABLEH@@A@BAK
48+
DMNIIBLD@@@@FENJCI@BIBLK@@@@HH@JBEKMCEJDNEJDCGIGAN@BMDGMLLABMBCJAMCJ
49+
AECEKMABMBCIOMIBLO@@@@HH@JBEKMNEJD@D@AABNDCBMLIBMLHH@AFMJDBEJDNEJDHD
50+
@AABNNGMLLABNDCEKMABNDCIOM@H@JFMIOBEIOM@JMAN@BOB@H@JFMJ@BEJ@HHMBNMLH
51+
JELHIBML@@@@HH@JBEKMHH@AFMJABEJANEJAGMLLABOLCJAMCEKMABOL@H@AJEJAIBOI
52+
@@@@NEJA@D@AAC@NCC@HIC@HFELLJEJAAKJDAN@CA@@H@JFMIOBEIOCEJANEJADMNK@D
53+
@AACACIC@H@@@@FELLCI@BCEIOFEIOGMNLICAIFEJ@GENM@D@BACBFCJLOICAICJOIIC
54+
AI@@@@@CLIICBH@@@@@BGAA@B@CAMKAN@CBN@@@@@BGAIEMG@@@@NENNEMNOJENNICCA
55+
GOOIACBBBCL@GOOMB@@@@HB@@@@@CJKJDMO@@FAABEKEH@@A@D@DHH@ABEKFCJKJBEKG
56+
DMOA@D@AHH@ABEKHFEKGB@DCAN@CDLDMOB@FBC@FBBEEKEDMOCBEKEICCL@@@@CEKFAC
57+
EIFEKEH@@FBEKE@J@@FMKEBEKEICEC@@@@CKCLCKECEMMGBEKICKCLCKECEMODBEKJFE
58+
OECI@BFEKICI@BFNBAAN@CFJFEKJCI@BACENICEM@@@@CKCLBEKIH@@ACEKHFEODBCKI
59+
FEOFCEKFH@@ABCKJCKCLBEKJFEOGCEKHH@@AECKIBCKIFEODCEKFH@@AECKJBCKJCKIL
60+
ACFO@@@@OKHBAN@CHHFEOFBCKICJKJ@FAABEKIH@@AHD@DACIAFEOFBCKJCJKJ@FAABE
61+
KJHD@DACIJFEODECKJBCKJCKILACHH@@@@FEKJGEKIBCKH@D@A@D@BACJKH@@FBCKHFE
62+
KIN@GNAN@CJFBMKJBEKIFEMGECKJBCKJFCKHDMNBEEOFCI@BFEKIECKIEEOHCI@BFEKJ
63+
ECKJEEOHCI@BICIL@@@@@@@@@@@@@@@@FEKA@D@AACLACKLCICKKCKLIICKK@@@@KBDB
64+
AN@CLDHH@ABEKAFEMCJEOIICLC@@@@H@@ABEKAFEOJJEOIICLI@@@@FEKKHD@AACMECK
65+
MOICLOCKMGICLO@@@@@HB@BEKKFEMCJEOKFEOLJEOMICMG@@@@H@@ABEKKJNMCAN@CNB
66+
FEONJEOKFEMCJEOMICMO@@@@F@DJ@D@BACNMCKOEICNGCKNOICNG@@@@FEOOB@DJFEMC
67+
JF@@ICNO@@@@FEOHB@DJFF@AJF@@ICOE@@@@H@@I@BACBEKLHHA@COLHAN@D@@B@FDFF
68+
@BB@GB@LBNB@@HHHDABEKMFEKLCMIBADBGADBEDN@CHD@AADABFEKLDMOBCIOBICOKFE
69+
KLDN@DGF@E@D@BICOKGEOAHD@BADALDMO@ADBEGELO@D@BF@AFAN@DANICOKGF@FHD@B
70+
ICOKFN@GDMNIEMKKCIMMICOKCLBIICOK@@@@BDBNKLBNIDBIIDBI@@@@@@HBHBCK@BHD
71+
HAKF@@HDH@JC@@HEH@KN@BHEHALG@BHFHAK@@@HFODLEAN@DCLH@IF@BHHHAKL@@HHH@
72+
N@@CHIHCBK@BHIH@FF@AHIHCLC@@HJ@@@J@AHJH@JM@@HL@@@L@AHLHCKK@@HM@@@M@A
73+
HMHAOG@AHNHBDN@BHNHBCG@@HNHBBI@@HOBMNFAN@DEJH@HN@AHOH@IB@AIHHAJG@@IH
74+
HBBB@BIHH@GG@AIIHCNG@@IIHCLO@@IJHAMC@@IK@@AK@CIKHCBN@@ILHAJK@@IMHBIC
75+
@AIMHCCA@@IN@@AO@BIOHAMC@@IOJOJDAN@DGH@@@I@AJ@@@B@@BJ@@@B@@BJL@@EK@B
76+
JM@@EO@BJN@@EM@BJO@@EL@AK@@@@H@BK@@@GL@BKF@@GN@BKG@@F@@BKH@@GK@BKI@@
77+
GM@BKJ@@EN@BKK@@D@@CLABLANAN@DIF@@EK@CLB@@EL@CLC@@EM@CLD@@EN@CLE@@EO
78+
@CLF@@D@@CLL@@AL@CLM@@AM@CLN@@AN@CLO@@AO@CM@@@@@@@OO@@GO@AOOHAMC@COO
79+
H@GG@@@@HH@ABEKBMOMKAN@DKDH@@I@BAKCLKHIDKA@@@@DMNIBEKNFEKAHD@BADLC@L
80+
MIB@@HHHAGBEKMADLG@LMGB@@HHHADBEKMFEKNCMIBADMFADMDGEOA@D@BIDKAGF@HHD
81+
@BIDKAFN@IFHD@AN@DMBBEJENEJECI@BIDKHCLBIIDKH@@GOHA@O@@@AHBJD@@@GHCBH
82+
@@@HEFEI@@@IHBFB@@@JHCAI@@@KH@JM@@@MEFFA@@@NHAGK@@@OH@N@@@A@HAKF@@AA
83+
HALGFJGJAN@DO@@@ABH@GG@@ACHAJG@@ADH@IB@@AEH@HN@@AHHA@O@@AIH@KN@@AJH@
84+
IF@@AKEFFC@@@LH@GG@@AMHCEM@@ANHCFN@@AOHCHGEFFFEFFIEFG@EFGFEFHBEFI@NN
85+
KEAN@E@NEFIOEFJKEFK@EFKGEFKOEFLGEFLMEFMCEFMGEFMMEFNBEFNNEFOGEG@AEG@K
86+
EGADEGAOEGBLEGCDEGDAEGDLEGEEEGENEGFDEGFJEGG@EGGIEGHGEGI@EGILCDJEAN@E
87+
BLEGJEEGJOEGKIEGLBEGLLEGMEEGMNEGNGEGNOEGOFEGONEH@GEHAAEHAJEHBDEHBNEH
88+
CIEHDBEHDLEHEEEHF@EHFGEHFOEHGHEHGOEHHEEHHMEHIBEHIFEHIKEDLDAN@EDJEHJF
89+
EHKAEHKIEHLDEHLMEHMEEHMOEHNGEHNNEHOFEHOOEI@FEI@NEIAEEIANEIBHEICCEICI
90+
EIDAEIDIEIEBEIEJEIFCEIFJEIGCEIGJEIHCEIHKEIIE@@@@AHIGAN@EFHNEJBGMMCAE
91+
FMCHKNAEFHCJHHAEGA@H@IAEI@GMNAAEGE@H@HAEI@GMLLAEGI@H@JAEI@GMLKAEGM@H
92+
@MAEI@GN@JAEHA@HAKAEI@BEKN@M@GB@@HHHEOBEKMOIG@AI@EHFFEKNOH@HAEHJAEHN
93+
CEKMAEHGH@@AAEI@HLNHFH@HBEKNIEFG@@@@OH@HAEIFAEIKC@@HCEKMAEICCEIBAEIM
94+
N@@HHD@BCEIBIEIBCBKNAN@EKO@IIKAD@AFNAD@@@@@IMKEF@M@IML@IMMBCL@@IMDFI
95+
ML@IMJEFFAEFEL@@BB@@@K@@@A@@BA@AOC@IJM@H@@@EAHEFFF@@@MA@@@G@@@HOOOI@
96+
@@@@@I@@@FELNDAN@EMM@@@J@@GH@@@H@@F@EFEI@OOO@FDA@@AHEGEE@BKA@BKJOON@
97+
@@GOEFALOOON@@BL@@AF@IIMEKCF@@CO@@B@@@AO@COOB@@@GOOID@@@F@@@H@@@@IKD
98+
FIKIKMMAA@@EOK@ILBFFAD@F@MFILIC@FD@ILIFIMBHDA@@B@@@@OO@@J@@@CJ@@OK@@
99+
EO@EFGEFFCFHKJAN@F@M@H@@C@HEHGMHMHMHHCI@HAD@FFAIC@HELGMHMHMHLCI@HAD@
100+
C@KHKHKHK@F@EFB@EFB@EFB@@HB@C@KOKOK@MHMHMHMHKHKHLCLCLCLCLCLCLCLCKHKH
101+
MHMHKIOFAN@FBKMHMHKOJOHGHGHGHGF@F@@H@@C@JHOGOGM@M@M@M@OCOCHHF@C@H@H@
102+
H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@F@A@GHFFCGA@M@FFCGAABHFFCGAAH@FFCGNH
103+
D@AN@FDIAAMHFFCGABC@FFCGABHHFFCGABN@FFCGACCHFFCGACI@FFCGACNHFFCGADD@
104+
FFCGC@K@KHKHKHF@C@HGHGHGHGHGHGHGF@F@A@B@@HB@EH@GEFEIFFHBC@IHOAANAN@F
105+
FGIHIHI@F@C@HKHKHKHKLGLGLGHGL@IHIHHHF@C@HKHKHCHCLOICLOIOIGHGF@C@LKLK
106+
LKLKKGJMMHM@M@HBHBNONONONOKCKAMHM@M@IGIEF@C@HBMFM@M@MBDOOJAN@FHELBOA
107+
OAOAOALBMBM@M@MFKKJJLGLGLGLGLGLGIKI@I@F@C@MCMCMCMCKNJHNINHNMLFLMLHLI
108+
LBHGHGLILHLMLFNMNHNILBININHHF@F@C@HBLBMCMCLANINHKHIEAN@FJCNMLEMGMGMG
109+
HKOFOFO@OBINIHIHI@F@F@C@IKHCHCMCIOIOHGHGF@C@IKIKHCHCOENNLGLGLNMEIHI@
110+
F@C@HKHKHCHCMELNLGLGNNOEIHIHIHF@F@C@ICMCMC@AGLAN@FLAK@K@MGMGHKOHOHIO
111+
IOIHHHF@C@IJHILCLCKOMHMHIOHOF@F@C@IOHHLKLANHLELHIHIHF@F@C@HKHKM@M@IO
112+
IGF@C@I@I@LALHLENHIHIHHHF@F@C@MCMCMCEJKBAN@FMOMCIOHGHGHGF@C@HCLCLCMC
113+
M@M@MGLGLGOGO@O@OCHGMCMCMCMCIOHGHGHGF@C@IKHCHBHBLJLHLGLGLGLGK@M@M@I@
114+
I@F@F@C@HCHCHCMCM@M@MGLFOEOEOEM@MHAN@FOMOELGMHMHM@IHF@F@C@HCMGM@M@MC
115+
LAOJMJLAOCO@O@OGIOIOIOI@F@F@C@IHI@LCLCLCLCNHOGOGLEMHMHM@IOHFF@F@C@HB
116+
MFM@M@MBLBLBOBOHOHLBLBMHBC@FAN@GAKM@M@IOHOHGHGF@F@C@I@OBLCLBLBMCM@M@
117+
MGKNKNK@MBM@M@MFLGOFO@O@IHIHIHF@F@C@HCHCHCLKMHM@M@NONONONOIHI@I@F@C@
118+
I@OBLBMBM@M@MBLBOBKNAOAN@GCIO@O@OFLFMFI@I@MFLFOFO@O@IHIHIHF@C@HCMGM@
119+
M@MCLCLBLBOBO@O@OFLGMFM@M@MBIOHFHFF@C@I@I@LALHLENHHBHBLALHLENHIOIMHH
120+
F@F@C@IOHHLKJKCFAN@GEGLANHLELHHBHBLANHLELHININF@F@C@IIIIOBOBMBMBIOIG
121+
HFHFF@C@ICHBM@M@HBO@O@IOIOIMF@C@IBMBMBOBOBIOIOIOHEF@F@C@HCHCHCMCM@M@
122+
MGLFOFJFBEAN@GGEOFLEHFL@IHI@I@F@C@IKIKIAOAO@OELGMEM@MALCLANKNIO@O@NM
123+
NOLFLFLOLMM@M@MBINF@C@LKLKLKLKLOLOLOLOJKOHOHIOIHIHHHF@F@C@LCLCLCLCMH
124+
DDADAN@GICM@MNLFONOHO@IHI@MNLFONOHO@IHIHIHI@F@C@I@OCLCLCMCM@M@MGHGHG
125+
OGO@O@IHIHIHF@C@LCLCLCLCM@M@MEMGLFLFOGOEO@O@IHIHIHI@F@C@LCLCLCHG@IAN
126+
@GKALCMHMHM@KGJOOHO@HGHGMHMHM@IHF@F@C@LCLCLCLCMHMHM@KOHGOHO@IOIOIHI@
127+
F@F@C@I@OCLCLCMCM@M@MGKOMHLGOGO@O@IHIHIHF@F@C@LCLCLCLCHGLCNOAN@GLOHG
128+
MHMHM@LCLCHGHGLGLGIHF@C@I@M@M@K@LCLCLCLCI@O@O@IOIOIOHGF@F@C@HJLNM@LJ
129+
LCLCLBLBI@O@OHIOIOIOHGF@F@C@LCLCLCLCIHIHI@OOOOOFIBONDDAN@GNMMOMOIHF@
130+
C@HCHCHCHCLGLGLGLGMHMHM@IHF@C@LCLCLCLCMGMGMCMCLGLGLGLGIHF@F@C@LCLCLC
131+
LCMGMGMGMGLCLCLCLCIOHGHGHGF@C@HCLCLCMCM@M@MGIKMAAN@H@KLGLGOGO@O@OCIO
132+
IHIHI@F@F@C@LCLCLCLCMHM@MNLFONOHO@IOIOIHI@F@F@C@HCLCLCMCM@M@MGLGLGOG
133+
O@O@OCIHI@MOIHF@F@C@LCLCLCLCMHM@MNLFONIMEHAN@HBIOHO@IHI@LNLNLNIHF@F@
134+
C@HBMFM@M@MBLBOAOAOAOALBMBM@M@MFIOHGHFHFF@F@C@I@I@LCLCLCLCI@I@OHOHO@
135+
IOIOIOIGF@F@C@HCHCHCHCLGLGLGMGM@HAKLAN@HDGM@MCLCLCLCIOHGHGHGF@C@HCHC
136+
HCHCLOLOLOLOLKLKLKLKIOHGHGHGF@C@HCHCHCHCLGLGLGMGLHLKLOLHMCLCLCLCIOHG
137+
HGHGF@C@MCMCMCMCKHKHK@MGMGE@AKAN@HFEMGMGIHF@C@I@I@LCLCMCMCKHKHK@MGMG
138+
IOIOHHF@C@HCHCHCHCMHMHM@OGOGOGOGMHMHM@IHF@F@C@IKIKHCHCOHLGLGLGLGMHIH
139+
I@F@C@HCHCHCHCMGMGMGNDFIAN@HHCMGIHF@F@C@ICHCHCHCMHLGLGLGLGOHIHIHIHF@
140+
F@C@HKHCHCMJMNIOHOHGF@C@JNMHMHMHM@HJF@C@IKHCHCHCMGIOIOHGF@C@HKHCHALI
141+
M@M@LMLGLFLFHADOHJAN@HJAOEO@OALCMAM@MEIOHMF@C@HHLCLCLCLBHGHFMBM@MFLF
142+
LFOFO@OBINIHIHHHF@F@C@IKIKHHOBO@OFLFLFMFM@MBINHHF@F@C@IKIKHKHBLGLGLG
143+
LFHBOFO@GEKFAN@HKOOBLBLBMBM@MFIOHOF@F@C@HJHBMHMHLBOBO@OFLFLFMFM@MBIE
144+
IEF@F@C@HHLCLCLCMBM@MFLEKNOHIOIOI@I@F@C@HMMFM@MBLCLCLCHFOBO@OFLFLFMF
145+
M@KDHEAN@HMMMBIEIEF@C@HHLCLCLCLBHGHFMBM@MFLGLGIHHHF@C@IMI@NILCLCLBHB
146+
L@IOIOHOHEF@C@IELNLHLJLCLCLCHBL@IOIOHFHFF@F@C@HHLCLCLCLBIOIHOEOEKCDD
147+
AN@HOKOEIAMGMGI@I@F@F@C@IKHKHCHBLGLGLGLFLMIIIHF@F@C@LCLBLBLILHMGMCLH
148+
LMLGLFLFIHF@F@C@HHLCLCLBHFMBM@MFLGLGIHHHF@C@HJLBLBMBM@MFLFAOLIAN@IAI
149+
LFOFO@OBINIHI@I@F@F@C@HOLCLCLCLBHFMBM@MFLFLFOFO@OBINIHI@I@F@C@HJLBLB
150+
MBM@MFHBLGLGLGLFHCHBOFO@OBINIHI@I@F@C@HHLCLCLBHFMBM@GLE@AN@ICGMFIOHO
151+
F@C@HJMFM@MBLAOIOILAMBM@MFIOHOF@F@C@IKIKHBO@O@ICLGLGLGLFLMIIIHF@F@C@
152+
HKHCHBLGLGMFM@MBLCLCHGHGLFI@I@F@F@C@HKHCHBLFLOHBILAN@IEELOM@LKLKLBIO
153+
HOHFF@F@C@HCHCHBLGLGLNLHMCMGLHLJLCLCIOHGHFF@C@HHMCMBMCKHKHMGMFMGI@I@
154+
F@F@C@HMMFM@MBLCLCLCKHKHLGLGMFM@MBINHHF@LGOBAN@IGCC@HKHCHBMHMHOGOFOG
155+
MHMHI@I@F@C@IKIKHCHCNHNMLFLFNMLMLFLFLMLHIHI@F@C@HKHKHKHKHCLGLGLGLGLG
156+
LGIKIHHHF@C@ICHCHCHCLHLMLFLFLMNMLFEEAGAN@IIALFNMNHIHIHIHF@F@C@HKHCHC
157+
MBMFMBIOHOHGHFF@@H@A@L@E@H@@GOOIBCN@A@B@EHBNEHBNEHDLEFMGEFOGEFOGGOOI
158+
A@N@EGILEGI@EHDBEGKIEGFD@H@@DDLBAN@IJO@H@@@H@@@H@@GOOIAAJ@@H@@EHCIEH
159+
CIEHFGFIKMEGJOEGJEEGMEEHCIEFFFEGOFEH@GEGJEEGJOFILIGOOIABF@EFMCEHDBEG
160+
ILEFMC@H@@GOOIABK@EFMCHDGBAA@ILMEGHGEHDBEHCIEH@GEFMCGOOIA@@@@@@@EGFD
161+
EGFJGOOIA@B@BCL@@@@@@@@@@@@@@@@@JIGO@BCOLKIGLL@@FGIHCCOOOOOO
162+
PEACE WITH HONOR
163+
KILL
164+

0 commit comments

Comments
 (0)