]> git.zerfleddert.de Git - 32620_extract/commitdiff
extractor for Geraet 32620 ROMs
authorMichael Gernoth <michael@gernoth.net>
Sat, 5 Sep 2020 18:54:01 +0000 (20:54 +0200)
committerMichael Gernoth <michael@gernoth.net>
Sat, 5 Sep 2020 18:56:48 +0000 (20:56 +0200)
21 files changed:
.gitignore [new file with mode: 0644]
.gitlab-ci.yml [new file with mode: 0644]
LICENSE [new file with mode: 0644]
Makefile [new file with mode: 0644]
README.md [new file with mode: 0644]
ROMs/2620_8401-1.bin [new file with mode: 0644]
ROMs/2620_8401-2.bin [new file with mode: 0644]
ROMs/2620_8401-3.bin [new file with mode: 0644]
ROMs/2620_8401-4.bin [new file with mode: 0644]
ROMs/2620_8401-5.bin [new file with mode: 0644]
ROMs/2620_8401-6.bin [new file with mode: 0644]
ROMs/2620_span-1.bin [new file with mode: 0644]
ROMs/2620_span-2.bin [new file with mode: 0644]
ROMs/2620_span-3.bin [new file with mode: 0644]
ROMs/2620_span-4.bin [new file with mode: 0644]
ROMs/2620_span-5.bin [new file with mode: 0644]
ROMs/2620_span-6.bin [new file with mode: 0644]
ROMs/2620_span-7.bin [new file with mode: 0644]
ROMs/2620_span-8.bin [new file with mode: 0644]
ROMs/README.md [new file with mode: 0644]
extract.c [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..8e0b4ff
--- /dev/null
@@ -0,0 +1,5 @@
+*.raw
+*.wav
+2620_8401.bin
+2620_span.bin
+extract
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644 (file)
index 0000000..c8a4233
--- /dev/null
@@ -0,0 +1,15 @@
+stages:
+  - build
+
+build-binary:
+  stage: build
+  image:
+    name: debian:buster
+  script:
+    - apt-get update
+    - apt-get -y install build-essential sox
+    - make
+  artifacts:
+    paths:
+      - extract
+      - ./*.wav
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..d916bf4
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+The following license is not applicable to files in the "ROMs" directory,
+
+Copyright (c) 2020 Michael Gernoth <michael@gernoth.net>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..91de5f8
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,29 @@
+CFLAGS=-Wall
+
+all: convert
+
+2620_8401.bin: $(sort $(wildcard ROMs/2620_8401-*.bin))
+       cat $^ >$@
+
+2620_span.bin: $(sort $(wildcard ROMs/2620_span-*.bin))
+       cat $^ >$@
+
+german: 2620_8401.bin extract
+       ./extract 2620_8401.bin german
+
+spanish: 2620_span.bin extract
+       ./extract 2620_span.bin spanish
+
+convert: german spanish
+       $(MAKE) wav
+
+wav: $(patsubst %.raw,%.wav,$(wildcard *.raw))
+
+%.wav: %.raw
+       sox -t raw -r 8000 -b 8 -e unsigned-integer -c 1 $< $@
+
+clean:
+       -rm -f extract {german,spanish}-*.raw  {german,spanish}-*.wav 2620_8401.bin 2620_span.bin
+
+.PHONY: clean all convert wav
+.SUFFIXES: .wav .raw
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..0e9c586
--- /dev/null
+++ b/README.md
@@ -0,0 +1,7 @@
+# Extract ROMs from Gerät 32620 (Sprach-Morese-Generator) to WAV files
+
+Clone and run `make`
+
+Rom files from: [Crypto Museum](https://www.cryptomuseum.com/spy/owvl/32620/index.htm)
+
+Decoding information from: [Taking a look at Gerät 32620](https://blog.ardy.io/2020/8/geraet-32620/)
diff --git a/ROMs/2620_8401-1.bin b/ROMs/2620_8401-1.bin
new file mode 100644 (file)
index 0000000..5208ffe
Binary files /dev/null and b/ROMs/2620_8401-1.bin differ
diff --git a/ROMs/2620_8401-2.bin b/ROMs/2620_8401-2.bin
new file mode 100644 (file)
index 0000000..71de426
Binary files /dev/null and b/ROMs/2620_8401-2.bin differ
diff --git a/ROMs/2620_8401-3.bin b/ROMs/2620_8401-3.bin
new file mode 100644 (file)
index 0000000..b086eed
Binary files /dev/null and b/ROMs/2620_8401-3.bin differ
diff --git a/ROMs/2620_8401-4.bin b/ROMs/2620_8401-4.bin
new file mode 100644 (file)
index 0000000..5e9486d
Binary files /dev/null and b/ROMs/2620_8401-4.bin differ
diff --git a/ROMs/2620_8401-5.bin b/ROMs/2620_8401-5.bin
new file mode 100644 (file)
index 0000000..7740d3d
Binary files /dev/null and b/ROMs/2620_8401-5.bin differ
diff --git a/ROMs/2620_8401-6.bin b/ROMs/2620_8401-6.bin
new file mode 100644 (file)
index 0000000..a93d082
Binary files /dev/null and b/ROMs/2620_8401-6.bin differ
diff --git a/ROMs/2620_span-1.bin b/ROMs/2620_span-1.bin
new file mode 100644 (file)
index 0000000..913e2f7
Binary files /dev/null and b/ROMs/2620_span-1.bin differ
diff --git a/ROMs/2620_span-2.bin b/ROMs/2620_span-2.bin
new file mode 100644 (file)
index 0000000..2f908fb
Binary files /dev/null and b/ROMs/2620_span-2.bin differ
diff --git a/ROMs/2620_span-3.bin b/ROMs/2620_span-3.bin
new file mode 100644 (file)
index 0000000..762a6e0
Binary files /dev/null and b/ROMs/2620_span-3.bin differ
diff --git a/ROMs/2620_span-4.bin b/ROMs/2620_span-4.bin
new file mode 100644 (file)
index 0000000..d327a99
--- /dev/null
@@ -0,0 +1 @@
+mklptuy~\83\88\8c\8c\8c\8b\8b\8b\8a\88\83|zz}\82\87\8b\8d\8f\8e\8c\89\84{tokmqrtw|\81\85\89\8c\8c\8c\8a\8b\8b\8a\86\80|z{\7f\84\88\89\8c\8c\8c\8b\87\80ytpmortwz}\82\87\8a\8b\8b\8b\8a\8a\8b\87\83\80|{~\82\86\88\89\8c\8c\89\87\84\7fxsqprtvw{\80\83\86\89\8b\8b\8a\8a\8a\8a\87\83~|}~\80\84\88\89\8b\89\88\85\82~ytrrsuwz|\80\83\85\88\8a\8b\8b\88\89\8a\87\84\81~|~\7f\82\85\87\88\88\87\86\84\81|xvttvxz|~\80\83\86\88\88\89\88\88\88\87\87\83\80~}\80\83\83\86\86\86\86\83\83\81}{yvvvx{|~\80\82\84\86\87\88\87\87\87\87\87\85\84\81~\7f\80\81\83\84\86\81|\83\89\88|tz\83\81xqv\80\83\80{}\84\88\88\85\86\87\89\89\87\84\82\81\81\83\81~}\7f\81\82\80\81\80\81\83\81~|{|}}}|~\81\82\84\84\85\87\88\86\85\85\85\85\84\84\81~}}~~\7f\80\81\82\83\83\83\81\82\80}{{}~}~\7f\81\83\85\85\86\86\87\87\87\87\84\84\83\81\7f}|||}~\80\81\82\83\83\83\81\82\81\80~}\7f~\7f\80\80\81\82\83\84\85\86\86\85\84\83\83\82\82\80\80~}}}\7f\81\81\82\82\82\83\82\82\81\80\81~\7f\81\80\80\81\82\83\83\83\80\82\85\87\84\83\81~}\80\80\80\81\80}}\7f\81\83\83\83\83\81\82\83\83\83\83\80\81\81\80\80\81\80\80\81\81\80\82\82\81\81\81\82\82\81\81\81\82\81\81\82\83\82\81\82\82\82\82\82\80\80\81\80\7f\80\80\7f\7f}\7f\82\84\84\85\83\81\82\83\83\84\85\82\80\80\7f~\80\82\81\80\80~{}\82\83\81\84\81\7f\81\84\83\83\84\84\81\80\82\83\81\82\81\7f~\80\7f~\81\81\7f\81\80}\7f\81\82\83\84\83\82\82\83\84\84\84\82\81\80~\7f\80\81\80\80\7f\7f\80\81\82\82\83\82\82\82\82\82\82\81\82\81\80\80\81\81\81\81\80\81\81\81\81\81\82\82\81\81\81\82\81\82\82\82\81\82\81\82\81\81\81\81\80\80\80\80\81\81\81\80\81\80\82\81\81\81\81\82\82\83\82\82\82\81\82\81\81\81\82\81\80\81\81\80\81\81\81\81\81\80\81\81\81\81\82\82\81\82\81\81\81\82\81\82\81\81\82\81\82\82\81\82\82\81\81\81\81\81\81\81\81\80\81\81\81\81\81\80\81\82\81\81\82\82\81\82\81\81\82\82\81\81\82\81\81\81\81\81\80\81\81\81\81\81\81\80\81\81\81\82\81\80\82\81\81\82\82\82\81\81\81\81\81\82\81\81\81\81\81\81\82\81\81\81\81\81\81\81\81\81\81\82\81\81\82\81\82\82\81\81\81\81\82\81\81\81\80\81\81\80\81\81\81\81\82\82\82\81\81\81\82\81\82\81\81\81\81\81\81\81\81\80\81\81\81\80\81\81\81\81\81\81\81\81\81\82\82\81\82\83\82\82\81\81\81\81\81\80\81\80\81\80\81\82\81\81\81\82\82\82\82\82\82\81\81\82\81\81\80\80\81\81\80\81\81\81\81\80\81\81\81\82\81\82\81\81\81\81\81\82\81\81\81\82\81\82\82\81\81\80\81\81\80\81\81\81\80\81\80\81\82\82\81\82\82\82\81\82\81\81\81\81\80\81\81\82\82\81\82\81\81\81\82\81\82\81\81\81\81\81\81\82\81\80\80\81\81\81\82\82\81\81\82\81\81\80\81\81\81\81\82\81\82\81\81\81\81\81\82\81\81\81\81\81\80\81\81\81\81\81\81\81\80\81\81\80\81\82\81\81\81\81\81\81\81\82\81\81\82\81\81\82\81\81\80\81\81\82\81\81\81\81\81\81\81\82\81\81\81\82\81\81\81\82\81\81\81\81\81\81\81\81\81\81\82\81\82\81\80\81\80\81\82\81\81\81\81\82\80\81\81\81\81\81\80\81\80\81\81\81\81\82\81\81\81\81\81\81\81\81\81\81\81\82\81\81\80\81\81\81\81\82\81\82\82\81\81\81\80\81\82\81}\84\87\84\81|x{\82\86\88\82z\82\85\87\85\7fyv\80\84\8b\87\82}z}\80\82\85\85\85\82~|~\82\86\86\83\81}{}\80\84\85\83\80~}\80\82\83\83\81\81\81\82\82\82\82~|\81\84\88\84~z}\83\86\82}z}\82\87\88\84\81~~\81\83\85\83\80~}~\81\83\84\82\80~\80\84\87\87\83~yw{\7f\83\85\85\83\83\83\84\84\86\85\7f|{~\83\83\81|}\81\83\85\84\85\82\81\7f{|}\80\82\83\83\83\84\84\85\85\83\82\80~~\7f\81\80\81\82\80\7f\80\7f\81\81\7f\80\7f\81\83\85\84\81\81\80\82\83\83\83\83\81\81\7f\80\82\84\83\80\80\7f\7f\80\80\80\80~~~\80\81\80\81\81\82\82\83\84\87\89\8b\88\85\82\81\80~|yvvx{~\81\81\81\80\82\84\84\7f{}\85\90\96\99\93\8a\82~}~xqjhoz\84\8b\8d\8a\89\8a\8a\86\7fuifm\80\95\9f£\9e\94\8f\8f\8b\87xi\VZhx\87\8e\91\93\94\95\91\8awf^c{\96¤¦\9d\93\8d\8e\90\8c{fSLRf}\8e\95\95\92\93\95\91\80i]]u\94ª®¡\95\8b\88\8b\8azeQLVm\85\91\95\90\8c\8e\94\90\81aPNl\98¼Ä·\9b\8b\86\87\8a{`E9Dc\8b§­¢\91\86\87\8c\88wS@@i£ÐÝˤ\86|z\80qU8,=g\9a½Á°\94\83\80\82\82lI9>p±àìÒ¥\80rotfN5.Gt¦Åů\90~y{x`E;O\87ÃççÅ\98uhik_L8:Y\8b¸Ì \7fpquqUC=d¤Þøè¶\83`YbdZH;Gp¤Ëж\8cnekriMCK\83ÄóüØ\9diLO]`[HH]\88´ËÄ£}jeijSKNx´äõâ«xRKU_aUQZy¢Àî\8aqeb`RKPv°àóä°~WMR\`ZV`x\9a´¹ª\8exlgbRJTz³àîÛ§xUNWbe^Xc|\9e¶·£\86rhd^NJ[\89ÂéîÒ\99kMO\fi`]i\83¡±®\99}pie\MPe\99ÎìèÀ\8a`MTblj`ap\8c¥­£\8cxnihb]d|£ÅÒÆ¡z^Xbnsnfi|\97©«\9b\83of_XPVk\96Âàݾ\8dhTXcnohfs\88¡©£\8fylb\TWf\89³ÑÖÂ\9cv]Z`lppms\7f\91\9a\9d\94\86wj^UVg\87¬Æ̺\9b{hbfkonnu\83\92\9a\9a\91\84xlcXVe\82¨Âɹ\9b|jdinrons\80\8f\98\98\90\83wme^^i\81 ¹Â¶\9b\7fnhkqtqos\7f\8d\95\97\90\82vlgcfp\84\9e±¸¯\97\80oimrwttv}\88\90\93\8e\84vlgdm|\8f£ª©\99\85vnr|\85\86\81{uw{\81\86\86\80vnlny\88\98¡¢\9b\89{tv\80\89\8f\8a\81wrqv{\80\80}wrqt}\89\94\9e\9f\99\8b\7fwy\83\8c\90\8c\82yompv|~|vstx\82\8d\98\9e\9b\94\86|x~\87\8f\94\8f\82sjfksx{wuu{\82\8d\93\9a\99\93\88\80}\80\86\8c\92\92\8a~tkgjnsuxz}\82\8b\91\99\9a\96\8c\82|{\82\8b\91\92\8d\83xnhgkptvuz\80\8b\96\9e\9e\97\8a\7fy|\83\8a\8f\90\8a\83|uolknquvy}\86\90\9a\9f\9b\92\85{y~\86\8d\8f\8a\83{urqqqpttx|\82\89\93\99\9c\97\8d\83|~\82\88\8c\88\83|vsttvuvtvy}\84\8c\94\99\99\92\8a\82~\80\83\87\86\82}xtsuxyzyxy{\80\88\8f\95\97\92\8c\85\81\81\84\86\84\80|yvuuwy{||||\7f\83\8a\90\94\94\8f\88\83\81\83\84\85\82~yuttvxz|~\80\80\82\84\87\8b\8d\90\90\8c\87\83\81\82\82\82\80|yvttvy|\7f\80\81\81\83\84\87\8a\8c\8e\8d\89\86\84\82\82\80\80~}zwvuwy}\80\83\83\82\83\84\87\8a\8c\8c\8a\87\84\82\82\82\81\7f}|{zzyz|~\80\82\83\82\81\82\83\86\88\8a\8a\87\85\84\83\83\82\82\7f}{yxyy{~\81\82\83\83\82\82\84\85\88\89\8a\87\85\82\82\82\82\82\80~|zyy{|~\81\83\83\83\83\82\83\84\86\87\87\87\84\82\83\83\83\82\81~||zz|}~\80\82\83\83\83\82\83\83\85\87\87\86\84\83\83\83\83\83\80~}||}|~~\80\80\81\82\82\81\81\82\83\85\85\85\85\83\83\83\83\82\82\80~}}}~~\7f~\7f\81\81\81\82\7f\82\7f\81\7f\81\82\82\80\82\80\82\80\82\81\82\80\80\83~\83~\83\7f\82\81\81\80\83\80\82\7f\82\7f\82\7f\82\7f\83\80\83\80\83\80\82\7f\83\7f\83}\84~\84~\84}\86}\84~\82~\83~\85~\83~\84~\83\7f\83\80\81\81\82\81\81\82\80\84~\83\7f\83\7f\82\80\83\7f\82\7f\81\81\80\83\80\82\80\83~\83\7f\82\80\82\81\82\82\81\82\7f\84}\84\80\82\7f\82\7f\81\80\81\82\80\81\81\83\80\82\80\81\83\80\82\81\81\82~\83\80\82\7f\82~\83\7f\82\7f\82~\82\7f\82\81\82\7f\82\80\83\7f\82\7f\82\81\80\82\81\81\83\7f\80\83}\85}\84\7f\83\80\80\82\83\81\80\81\82\83\7f\82\80\82\81\81\80\81\81\82\80\83\7f\82~\81\81\80\82~\85}\86{\88{\86|\83\80\81\81\80\82\80\83~\84|\87z\87z\87|\85~\81\81\80\86{\87{\88z\86|\85\82|\86}\85{\87z\89|\84~\82\82\80\83|\87}\84}\84~\87{\85~\83\82~\85}\85~\85{\84\80\80\83\7f\83~\83\7f\84~\84}\82\81\7f\82\80\81\81\7f\83\82\83\80\82\80\82\82\81\80\80\82\7f\81}\84~\82\7f\84\80\81\83\80\82\82\83}\83\80\81\80\81\82\7f\82\7f\82\81\81\80\81\83\81\7f\82\84~\85\7f\81\82\7f\80\80\82\80\82\81\82\7f\82\80\80\84~\86~\85}\83}\82\81\81\81\83\80\80\83~\80\84\80\82~\82\80\85}\7f\82\82\81\82|\86~\84\7f\80\85~\81\80\82\80\82\80\80\84~\82\81\83~\85z\88{\85~\80\84\81~\82\82\7f\84\83\7f\82\82\83\82}\82\82\80\83|\80\81\83~\81\83\83~\83\7f\7f\85\7f\82\81\80\84\7f\82\81\83\7f\82\83~\81\80\81\81\7f\83\80\82\80\81\82\81\7f\86|\85}\85~\83}\82\80\85}\84\80\82\80\80~\84\80\81\81\81\83\80\83~\83\81\83\80\81\83~\81\81\7f\80\83\7f\86|\81\81\7f\82\83\80\83\81|\84\80\83}\87}\82~\83\7f\84~\81\84~\84}\85~\83|\85}\83\80\86~\83}\84{\83~\83\80\83\7f\84\80\83\81\87}\85~~\82~\83~\83\80\83~\84|\85\7f\83~\84\80\80\84\81\82~\81\7f\83\80\82\83}\84{\86|\88{\86~\83}\84\81\81\80\81\81\80\82\81\7f\82~\84\7f\82\83\7f\82\83\80\81\81\82\81}\82\7f\81\83\7f\7f\82\81\84}\83\82~\82\81\83\82~\85{\83\80\80\84\7f\83~\83\82}\82\82\81\82\7f\84\80\81\81\81\82\81\81\81\83}\82}\83\82\80\80\82\84~\83\82\80\83~\82\7f\82\80\80\81\81~\84\7f\85~\7f\83\7f\81\80\84{\87}\83\81\84|\85}\84\81\7f\82\83~\83~\84\81\7f\83~\83\7f\84\7f\81\80\82\83~\83~\82\81\82\80\81\83\80\82\7f\83\7f\82\80\81\82\81\7f\85}\83~\82\82\83\80\80\82\7f\81\81\82\81\82}\82\84\82\80\84{\87|\81\84\7f\7f\84}\83\82|\87\7f\84\80\81\84\80\83~\82\84~\80\83\7f\84\7f\81\80\84\7f\81~\82\83\7f\81\83\7f\80\83\80\83\7f\81\81~\82\81\83\82\7f\81\80\82\81\82\80\83\81\84\80\83~\83\81\84}\82\84\7f\81\82\81~\84\82~\82\82\80\7f\82\82\7f\85~\82\81\80\81\81\7f\84\83~\82\82\81\82\83}\85~\84z\89z\87}\85|\81\80\82\83\80\80\81\83~\83\7f\83\7f\84\7f\82\83\83\81\7f\7f\84~\81\81\81\7f\80\84}\85\81\83~\85\80\81\81\81\83|\85~\82|\84\82\82\81\81\81\80\84\7f\81\80\82~\83\80\80\81\82~\83\81\81\83\7f\83}\84~\82\84\7f\82\7f\82\80\80\84~\82\84\7f\82\82~\84~\85z\86\7f~\84\80\80\81\80\86~\80\83\80\82\81\83~\84\82\80}\82\83\7f|\84\7f\86}\80\84\80\7f\86\81~\83\7f\81\80\82\7f\84~\83~\85~\82\82\80\85~\81\82\82\80\84\81\7f\83}\88|\83~\86}\82~\82\82~\82~\84~\84\81\82\80\80\86}\85\7f\80\83\82\7f\82\80\81\84\81~\81\83}\83\7f\85\80\80\83\83\7f\82}\84~\81\82~\82\82\80\82\82\82\81\80\83\82\80\82\80\81\81\80\80\82\80\80\83\80\80\82\82\81\81\82\7f\84\83~\84\80\7f\82\81\83\80\82\82\80\80\82\80\84}\83\81\81\7f\82\82\80\82\82\81\81\83}\83\7f\83\7f\82\82\82\80\82\80\83\81\81\82\82\80\82\84\80\82\7f\83\80\7f\80\82\80\81\7f\83\80\82\83~\84~\7f\83\81\81\7f\82\81\82~\82\83\81\7f\80\82\83\7f\81\7f\84\7f\83~\82\83~~\82\83\80\82\80\85\81\7f\80\83\81\80\82~\84\81\7f\81\7f\82\83\7f\81\7f\81\81\81\83\84\84\87\84\82\83\80\7f}}{\81\80}z~\81\80\83\7f\81\83yi\84\9c\93\8c\94\95\99\86vxpjh`u\84\7f\8b\91\8f\93\8b\87\85{zwsx}\81pK\85\9a\97¥§°\8ahzhSOMcq|\8f­©¥ \8b\80llvs{~{\8a\8b\81u6~½\86\88´¨°\89h\8bfFUSdxk¡¯\9e°£\8bzesvf\83\8f}\84\85\87y*TÈ\92tô»\94m\95p6R[Wqo\98­\93§µ\86qwssd|\9d\87u\8d\8exc\1exËr\88鱨\91\81\94D1lSCu\86¦\9c\92¼¨o|\85jak\8f\8a~\91\9d\84ul8A½\87zã´¬¥\83\84Z+bS8y\8a\95ª\9f´¤u\87x^qu~\7f\8f£\81\89\8ehC\ f«©ZÀô\9b¢¤\86k!Vj%T¤\8f\9d¬¯·zu\86[\~}}\8b©\9fq\93\88T=\f«¤VØÿ\86µÄrX(_T h¸t¢Î³¬|\89r@q\83e\85¢\9e\96\82\94\7fYO\16u·e²ÿ\8a®Éuc<HQ\1c\®l¥Ù¨¥\9d\8b_UurZ\96\9b\7f\9b\9f|v|_'*Ôzrÿµ\8bÔ¡XKK\\1d:¥p\81ÙÀ\9a«\97sMh{P| }\96ª\81\80\89lA\a³\96HçõmËÐWcVW(+\8ata×Ë\86¾ªpaftVl¢|\85´\8dv\94}L.GÂS\87ÿ\85\94ÿ\87OxY;\1a]\8dE¨ã\8bµÓvk\7f]Wj\87|~ª\9dw\94\96aN+j¥M¾ÿ_ÒìSxu=00jeWÔ³\85é©c\8axJa\83ss\9b\97\8a\95\8c\81kU)]²U®ÿiÈéYyy>8:c_ZÊ¥\8bå©n\98xOevgv\98\8e\8c\99\89\88r\/fªK²ÿ[ÔãU\8e~9@A\PZÅ\8f\94ë\94~²kRwrb~\8ez\94\96\7f\90tV& zTçÄ`õ·O©i9CTS<\87°q½àv¢©Yn\7fdg\88~u\9f\84\82\93iZ+µaiÿ\8b~ÿ\86d¿JDTJIG\9b\8ezÛ¹y¼\8fT\80vZp\85t\82\9cw\95\8c^VF¶J\90ÿQÀöS\9f¦1]T8IX\9cu\9aá\8e¦³ux\81gbv{o\8b\91x\9f|dXP²L\9c÷JÝØN½\8b.pF4R[\92q«Ù\89¸¬o\88taplpw\88\8c~£|fa>¸O\8bùSÆçY³\9b1rD5RN\88t\9eÓ\98¶·|\84}]hmht\85\8d\81 \85oi?¶M\85ñQ¿ëW²§3xN3UI\81s\96É\99·µs\99xa}_o{q\8f\82\90\8fou7¡odÜ\8b\80þz\83ÎBhg0OQlw\82¼¤¢É\87\90\8eexgfsm\87\85\84\99xsKy\99I¼ÁM÷¥bÜdT\818DXXup¨¬\98È\94\8d¡j\80s]~bw\8er\91\92ku@«cpÞv\8aùo\90È?zk2TV`h\84¨\9c®¼\83«\8dm\8d^lp`\83}y\9c\82nuH¶S\88æLÀØY¼¥;\90Y+eL_k\8c\9d\98À­\91ª\85{\7falgk|x\86\91~xl[®T\99ÏEÛ¾VÓ\89I\99H:fFan\8b\9a\9e¾\9d¢«|\8a|`mhhw}}\8e{xY\85\97V»§Yò\8cuÛYl\87:Q\Keq\93\93§¸\97´\9a\81\98bnsVuvy\83\87xxL²evÕg\97ãbªÁ=\98h5dKVa}\8f\92³¨\9d¸\89\90\8c^{e\|px\8d|rjq§U®¸Oé\95oÙdj\8e@Q^Jcm\8c\8d\9e·\93³ \84\9bjsvXvsr\85\80t{K·]\88ÑY´Ì^¾¢F\9eWFeF]a\80\86\91·\9dª±\89\9b~h{\hvk~\82q|S¦v{Ëy\8eáf¨·H\9aeAhIXbt\85\8eª¨¤´\92\99\8cg}b`wgu\87nxZ\9c~yÃ\88~åo\9cÁL\95n=iLPep|\90©¦¤¸\91\9e\91i\83`]xbq\86jyX¦t\82Ís\96Ùf¬°M\9dbFiKTbvu\93¬\9a®³\8c§\8ap\83^evcr\80kz]¯a\95ÌVÁ¯eÈ\87c¤SVgH\czt\9c§\90¼ \93­w}}Xpoavujc\81\9cbÄ£fís\94ÌV\91zHaWL_nt\84£\9c ¾\8e§\9bq\8cjcvakxiqQ©q\83Òp¡Õa»¦P¥\PeJS`si\97¤\8bÀ¥\93¹\7f\84\87\tl]tmefn¤Z½¬dè\86\8aËh\83\89J^^FYoly©\8c¦¼\8c³\9b|\92miv\kpbnOªc\93ÌhºÀjÂ\93f\9eZ]`NU`pk\95\94\90¹\9a¥¬\82\95}jzecpbfY\81\88\8e\88âw¬³e\9coXdRI_bf\8f\8b\91·\99¬°\8a\99\86qzkchh^^n\92\9e\84 ¼q\95}ZiTK[]d\85\83\92ª\9b­­\97\9b\8a{~kgjbcZe\92\9f\89¤»w\99\7f`lVOZXdy\81\8b¤\9e¥¯\98\9e\95}\82qfk_aOwwgµ\84\93Ò\7f¸¯v¦rfqSR_Y^~|\86¥\95¤®\97£\93\82\85slk_UdzU\9d\8b\88¨¸\84¤\8bjxeNc\R|p|\9f\89¡©\94¦\9b\87\92{tp[Y~J\84\89\90\97·\91\9c\9cx\7fu[g`Ymqr\8d\85\91 \92 \9b\8d\96\81{yW\83Yl\8a^\91\90\80­\91\95¤~\8c~pqi`nmk\82z\89\98\8a\9e\96\91\98\89\83\81km~R\8arl¤s\99 \88¢\90\81\8dvnxagudz\7fx\93\8c\91\9d\90\98\93\86\87xe\83dj\88c\84\92\92\8c¡\83\8c\85uxpeopi}w\81\8d\87\98\92\94\98\8d\8a\82qwz\\8aks\97p\9a\95\8b\9d\8d\85\8dxvzepqg}u}\88\83\91\92\90\97\91\8e\86\7fo\88^\83uj\8fx\88\96\87\95\97\83\91\80v~kmukxyw\86\83\88\92\8a\94\92\8d\87\84r\8ae\84wm\8eu\87\90\86\92\91\84\8c\80w\81krvk{|v\89\82\87\91\89\91\8f\89\85~z\87h\8eqx\8fu\91\8b\88\8f\8b\81\88{w\80hwwm~zx\89\81\8a\90\88\93\8d\89\83v\86rx\87o\87\88{\98\87\8c\91\81\85\82v{uj|pt\81u\85\85\82\8e\8a\8e\91\8b\84|\81|r\8ck\87\87z\96\86\8b\90\85\82\88s}wjzpt~z\81\88\82\8c\8c\89\91\89\83~\80{t\8bl\87\88|\96\89\8b\91\87\81\87s{vmxqt}z\80\88\82\8d\89\8a\91\89\82z\86r{\88k\8e\82\7f\99\83\90\93\83\88\82s~rlzmw~w\84\84\83\8c\89\8d\8d\88\7f~\88j\8axu\8e}\87\95\86\92\8e\81\8a{v|nrzn|zy\87\82\86\8c\86\8c\8f\80}\8drz\8dg\8d\84y\98\84\89\95\83\84\8at~yl{ss\80w\82\85\80\8a\87\86\8d\85{\8a~r\93l\84\8by\93\8a\86\93\88\81\8bwy}mwxn\82v~\88~\8b\89\86\8d\83{\8a{w\8do\85\87|\91\8a\88\92\87\84\87x{zmyss\80x\80\84\7f\8a\89\86\8b\7f}\8ev\82\86q\8d\81\7f\92\83\8c\90\84\87\84w\7fvq|o{{z\82\81\81\89\85\88\87{\87\83w\8dw\83\8a}\8d\8c\86\8f\87~\86xx{rzxw\80|\7f\86\80\85\87\82\86\80|\89w\88\83{\8b\81\89\90\87\8f\8a\80\83|t{pszu|\81}\86\87\84\8a\86\81\83|\85z\82\82|\89\84\88\8e\8a\8d\8b\84\83\7fvxtpvxw\80~\83\88\85\8b\87\83\82}\85z\83\81~\87\84\88\8c\8b\8b\8b\84\80\80vxuqwxy\7f}\82\86\84\89\86\84\82\80\83z\85\7f\80\89\84\8b\8c\89\8d\89\84\82}uxrqzs}}~\87\83\87\8a\83\86\7f\83\80}\85\7f\84\89\85\8c\8c\8a\8d\87\81\83wuwotwv~|\81\86\84\88\87\85\83\81\84|\83\80\81\87\84\8a\8c\8b\8c\8a\84\83yvyptws}{\7f\84\82\87\88\84\88\80\85\81\82\84\80\85\87\88\8b\8c\89\8a\85\82}vxqtvu{|\7f\83\84\86\87\84\87\81\86\82\83\84\82\85\87\87\89\8b\8a\89\84\84{xvsrvvy}}\83\82\85\86\83\86\81\87\81\83\84\82\87\87\88\8a\8b\8b\8a\84\81{xurvsvz{\81\83\83\88\84\86\84\83\86\81\86\84\85\87\88\89\8b\8a\8a\87\83\7fzxsrttxy}\80\82\85\86\86\87\83\88\84\82\89\83\85\89\84\89\8a\86\88\87\7f\7f{uwtrwwz~}\82\84\85\87\84\84\88\83\88\87\86\89\86\88\89\86\86\87\81\7f}vytswtx|z\81\82\83\87\86\84\8a\86\88\8b\86\88\89\86\89\86\84\86\81\7f~xwurvtw|z\80\81\83\88\87\85\89\89\87\8b\87\88\89\86\87\86\84\85\82\7f}zwuvrvxw|}\80\84\85\88\8a\89\8c\8c\89\8c\88\88\88\83\85\83\7f\82~{zvvvsvxx{~\81\84\86\88\8b\8c\8c\8d\8d\8a\8a\87\87\83\84\80\80~{zwwusvwxz\80~\81\86\86\89\8c\8a\8e\8e\8a\8c\89\86\85\82\80\80}|zwyvuyv|{}\82\80\84\89\87\89\8b\89\8b\8c\88\88\8a\85\82\84~~|zxxxw}yw}\80\80\83\84\81\8b\89\84\8a\8b\88\89\87\84\85\85\82\7f\80}}yy|wy||\80\81\7f\84\82\85\86\85\85\87\87\86\86\84\83\84\85\82~}\80\80{z{}z|\81\81\80\7f\84\86\87\85\84\85\86\85\84\82\84\83\83\83\82}\80~|\7f}{\7f~{\7f\80~\84\84\80\87\87\82\82\85\84\7f\83\80\81\84~\7f\81}~\83~\7f\81\80}\81\84\7f\81\82\82\81\83\84\82\87\83\7f\81\83\81~\81\7f{\7f\7f\7f\80~\80\7f\82\82\80\83\83\80\83\83\83\81\81\84\82\80\81\84\7f\82\82~\7f\7f~\80\81\80{~\83\81\80\81\80\81\86\81\7f\83\85~\82\82\80\82\85\81~\81\7f\81\81~{\80\82|~\81\83\81\84\7f\81\85\84\83\81\84\83\82\82\80\82\81\80\82\7f}\7f\81~\80\81\80~\81\7f\7f\83\84\82\83\83\81\84\84\83\82\83\83\81\80\81~\80\82\7f\81\82\7f\80\82\81~\80\80\80\7f\81\82\81\83\82\82\83\84\83\81\82\83\81\81\80\81\82\80\81\81\7f\81\81\7f\80\82\80\81\81\80\82\81\82\80\83\83\85\81\82\84\81\7f\82\80\81\80\81\80\82\81~\7f\80\80\7f\81\7f~\81\83\80\83\85\82\82\83\81\83\82\82\82\82\80\80\81\83~\80\81\7f\80\82\83\80\7f\81\82\81\80\80\81\80\83\80\80\83\84\82\82\81\81\82\81\81\83\7f\7f\81~\80\83\84\80}\80\82\80\83\82\80\82\83\81\80\81\83\81\82\83\82\82\7f\81\82\7f\82\81\80\81\81\82\7f\81\82~\80\83\80\82\80\81\82\83\81\83\81\82\81\83\82\80\81\82\7f\81\82\7f\82\81\7f\7f\80\83\82\80\7f\80\82\83\81\82~\81\81\82\84\81\81\82\7f\82\82\80\80\7f\83\82\80\7f\80\82\81\80~\80\81\81\81\80\82\80\80\82\83\81\80\82\84\81\82\85\81\80\81\82~\81\81\81\7f\81\83\80\82\81\80\82\85\7f\7f~\81\82\82\82\82\80\80\80\82\81\7f\81\82\7f\81\81\81\81\80\80\82\80\81\7f\80\82\81\82\82\83\82\82\80\81\84\7f\82\84\83\80\82\7f\80\83\85\81\7f\81\80\82\81\7f\7f\81\81\83\85\82\82\82\82\84\82\81\80\81\81\81\83\80\81\7f\80\81\83\83\7f\81\81\83~\7f\81\85\80~\83\82\81\7f\81\81\82\81\83\81}\80\81\83\82\80\7f~\83\82\7f\81\84\84\81\82\81\82\81\83~\82\82\7f\7f\81\82\85\82}\81\7f\82\82\83~\7f\83\80~\82\81~\80\81\85\81\81\7f\80\80\82\81\80\81\83\81\80\83\82\82\82~\80\84\83\7f}\80\80\7f\82\81\82\81\80\7f\81\82\80\81\81\81\84\7f~\81\82\80\80\82\80\81\82\82\7f\81\82\81\80\82\83\83\7f~\82\84\82\80\82\80\80\7f\81\82\80\82\83\81\80\83\80\81\82\80\7f\80\82\82\82\81\80\80\81\81\82\84\83\81\82\80\7f\81\81~\81\80\83\82\7f\81\82\81\82\81\82\80\80\80\7f\82\83\80\82\81\81\81\81\82\80\80\80\82\81\81\81\81\81\83\82\80\82\80\81\81\82\81\80\80\82\82\80\7f\81~\81\80\83\83~\7f\83\81\80\81\82\81\81\81\82\7f\80\82\83\81\81\82\82\82\83\83\81\80\80\80\80\80\82\82\83\82\80\80\81\80\80\82\81\80\81\81\82\82\81\83\7f\80\82\82\83\80\82\82\83\81\80\82\80\81\83\81\81\81\81\82\7f\81\83\82\7f\81\81\80\80\81\83\82\7f\82\82\82\81\82\83\80\83\81~\81\84\80\81\81\83\80\81\82\80\81\80\82\81\82\7f\82\81\83\80\81\82\81\80\81\82\82\81\81\83\80\80\82\80~\7f\82\84\81\80\84\81~\7f\81\80\81\82\80~\80\83\83\81\83\81\80\82\82\82\83\82\80\82\80\7f\82\81\80\82~\81\7f\80\83\80\80\80\82\83\82\82\80\82\82\83\82\81\82\81\81\83\81\7f\80\81\83\81\80\81~~\7f\81\80\83\84\81\7f\81\82\80\80\81\81\81\7f\82\82~\82\83\81\80\82\80\80\82\82\82\81\81\82\83\82\82\81\82\82\82\83\80\7f\81\80\81\7f\82\82\81\81\81\80\82\80~\7f\82\82\81\81~\7f\82\83\84\7f\82\80~\7f\82\82\81\83\80\81\82\83\81\7f~\82\82\7f\7f~\81\81\83\83\80~\81\83\82~}\81\82\81\81\82\80\82\7f\82\81\81\82\81\81\81\81\83\82\80\81\7f\82\82\82\81\7f\80\81\82\81\82\81\82\83\83\7f\80\84\82\7f~\81\84\81\80\83\7f~\7f\83\83\82\7f\80\81\83\83\7f~\84\85\81\80\81\82\80\81\80\81\80\80\81\81\81\81\82\82\82\80\81\80\82\83\81~\82\7f\82\80\81\80\80\82\81\83\7f\80\80\84\83\80\82\81\81\80\81\82\82\82\82\80\7f\81\83\82~\80\82\80\81\81\84\82\80\82\82\83\81\80\82\81\81\80\80\81~\82\81\81\82\80\80\80\82\81\82\80\80\80\82\80\81\82\81~~\82\83\81\82\83\81\80\81\83\82\81\82\81\80\82\80\82\81\81\80\81\83\82\80~\81\82\80\81\82\82\80\82\81\82\82\7f\81\80\80\82\82\80\82\81\81\80\81\81\82\82\7f\80\83\81\81\80\81\82\80\80\82\82\82~\7f\83\80\82\84\83\82\7f\81\81\81\84\82\80\82\80\7f\81\80\80\81\82\81\80\80\82\81\81~\82\84\81\7f\81\83\83~\80\83\81\7f\7f\83\81\7f\80\81\81\7f\81\81\80\80\81\82\81\80\81\81\80\80\81\82\81\83\82\81\81\7f\82\80\81\7f\81\80\81\7f\81\81\81\82\80\82\81\83\83\80\81\81\81\80\83\83\81\80\81\80\81\82\80\80\83\82\81\81\80\81\82\82\81\81\80\81\80\83\81\7f\83\83\7f~\82\81\80\82\80\80\81\7f\83\82\80\80\82\81\7f\80\82\81\81\82\80\83\83\80\80\80\83\81\80\82\82\80\81\82\7f\82\81\80\83\80~\80\81\80\80\81\80\82\80\80\81\82\82\7f\81\81\80\80\82\82\80\82\82\83\84\81\81\84\83\7f\82\80\7f\81\81\81\82\83\80\80\82\83\81\81\82\83\80~\81\82\7f~\80\82\80\80\80\82\81\81\82\7f\82\81\82\81\83\81\80\81\83\82~\7f\7f\83\83\83\80~\80\83\83\83\82~}\81\83\82\82\80~\82\81\81\84\81~\81\7f\81\84\82~\81\81\80\82\82\82\81\80\81\83\81\82\81~\81\82\7f\82\83\80\81\80~\82\84\83\80\80\80\80\80\81\81\81\82~~\81\82\82\80\82\83\82\80\80\80\82\80\80\83\82\82\81~\81\83\80\82\81\82\81\7f\80\80~\7f\83\81\81\80\82\80\81\82\81\82\80\81\82\81\7f\80\81\82\81\81\80\82\82\7f\80
\ No newline at end of file
diff --git a/ROMs/2620_span-5.bin b/ROMs/2620_span-5.bin
new file mode 100644 (file)
index 0000000..0223a7f
Binary files /dev/null and b/ROMs/2620_span-5.bin differ
diff --git a/ROMs/2620_span-6.bin b/ROMs/2620_span-6.bin
new file mode 100644 (file)
index 0000000..25920c5
Binary files /dev/null and b/ROMs/2620_span-6.bin differ
diff --git a/ROMs/2620_span-7.bin b/ROMs/2620_span-7.bin
new file mode 100644 (file)
index 0000000..ff52975
--- /dev/null
@@ -0,0 +1 @@
\9eÈ\8fc|U@;[W[\9d\9c¤¸¸¡\91\90phhhat\87\81\8a\95\8e\84wOZ¤[\94µ\9b¯¯½o\7f}=HIWJv\99\8e¶¹®¢\9b\89pqgdfv|{\90\8d\87\88wG|\96Y£ª\94²±«t\8ar>YDPUt\89\8f¸°¬«\98\8fwqmcgqyt\8c\8d\81\8f{\c¯V\8e½\82²®«\85\82\80KWOC\`~\90¡´¨¶\99\9a\89kyc`iss}\93|\8e\8cmS\9e|fº\97\89Å\9e\95\84\86kJaBY^g\8b\8d¢¬­¢\9e\99y~z]lrnu\80\82\80\8b\80zY\9a\84\89\90Å\84\9d\8c\81lX`@a_g\92\8b¢¬¡\9a\93\93{\85yj|qy~|\82{\81xq[\85\8c\9b\91Å\83\98\7fxqbjTulx\97\86\91\96\82~{}{\84\87\89\8e\88\8d\8cy\89ytykfj\98c­¡\80À\7f\85\88opklfx~|\9a\8c\88\96v{vvz\7f\89\87\91\8c\8d\8ez\83{qxlgk\98h§§\84»\89}\90mlvgkw\7f|\91\8d\80\91sx{q\81\87\84\92\96\8c\90\8fz|~kvoik\8dt\8e±\83¤¡p\95zk\81hpyxz\89\89|\8bxq\83p~\8e\82\91\96\8a\94\8e\80\80}myrlk\87v\82«\80\9c¦n\98\85m\8cpp~q{\84~\82\85yw\83s~\8e|\91\92\84\96\8b\84\85|wzrtk}xs¢\83\90®u\95\94n\91yj\84hu\87t\81\84v}\80v\81\89\7f\90\8f\88\99\89\89\8a{}ysyjw|j\9a\88\86®~\8c\9cs\8f\80h\86jp\89m\80\8aq\81\83u\86\86~\8f\89\88\94\87\8b\8b|\81xu{ks\7ff\90\92\8e\80£|\82\90f}xe\85wt\8buy\87t\82\89|\8d\8b\84\93\8a\88\8d\81\81}w}tn|lv\97\7f\92¦|\92\98v\8f\80m\82kq\86m\81\85q\84}v\88\82\84\8e\87\8d\8f\88\8c\88\82}zzxutvm\81\90\83\98\9c\7f\94\90}\90zq~ju\81r\81\81u\82|~\86\83\88\8a\88\8b\8c\8c\89\85\82|{}xyusn|\8d\85\96\9d\82\8e\93\81\8a\80uynt|w\80\7fx|}\7f\83\86\89\86\88\8c\8a\8c\8b\85\82}{}y|uqnv\8b\8b\90\9c\8b\86\92\87\83\86{rrtxz\80}xzy\7f\83\86\8b\88\89\8c\8c\8b\8c\88\83|{|y|zqos\84\8e\90\99\94\85\8b\8c\83\83\82xorxv}\80xvz\7f\81\87\8c\88\87\8b\8b\8b\8c\8a\84|{{x|}vpo}\8a\90\94\92\89\87\8a\8a\86\81}uqvy|}{wv}\83\87\8a\88\88\87\8a\8c\89\8a\86\7f{||}}|tov\83\8b\92\94\8d\86\88\8a\88\87\82zrrwx|}xuy\7f\85\88\8b\8a\87\89\8b\8b\8b\89\84}z}|}\7f|uov\83\89\91\94\8b\85\88\8b\89\89\83zrqvy{}yvy\80\86\89\8c\89\86\8a\8b\8b\89\86\83}y}~|\80~yts~\88\8c\93\8f\87\87\8b\8b\88\83|vpsx{}{yx}\84\88\8a\8a\86\86\88\89\88\86\81}|}\81\81}\80|uw\81\89\8c\91\8e\86\85\8a\8a\85~{spsvz||{|\80\86\8a\8b\8b\88\88\89\89\87\85\81||~~\80}{}yt|\86\8a\8e\91\8b\87\88\89\86\82}xqpvy|\7f}{}\83\87\89\8a\88\85\86\89\89\86\83\81}}\80\7f~}|~zx\80\87\8a\8d\8c\87\86\87\86\83\7f}vqty|\80\81|{\80\84\87\88\8a\87\85\86\86\88\85\82\80}\7f\7f\7f~}~~zx~\86\8b\8c\8c\86\86\85\87\84\80}wsvz}\80\7f{y\7f\83\86\89\88\84\85\86\88\89\84\84\81~\81\82\80\80~\7f\80}y{\81\85\8a\8b\87\84\84\86\83\83\80|xwy|\7f~|z}\81\84\87\87\84\83\85\87\87\87\86\83\80\80\82\82\81\80~}~~}~\81\84\86\87\88\84\83\86\83\80\81~{xz|{~\80|~\81\83\85\86\86\86\86\87\87\84\85\83\80\80\81\80\80\80~\80\7f}{z~\82\85\88\88\85\86\85\85\85\85\82~|zz|}{{||}\80\82\84\86\87\89\87\88\89\86\84\85\82\81\82\80\80\7f~{wy|\81\85\88\86\82\83\85\84\85\85\83\80|{|~\7f~|{{~\80\83\85\85\86\85\87\89\89\86\84\81\81\82\81\82\83\80}{ywz~\82\86\87\86\84\85\86\87\85\85\82~}{{|}{zz|~\81\83\85\86\86\88\8a\89\8a\87\84\83\83\82\82\80\80}zyyx{~\80\83\86\86\87\88\87\88\86\85\83\80}{zz{|z|}~\81\82\84\86\88\89\89\8a\88\87\84\82\81\82\81\80}||{||}\7f\80\81\84\85\86\88\87\86\85\84\83\83\80~}{z{{|}~\7f\82\84\83\86\86\87\87\86\88\85\85\81\81\80\82\81\7f}}{}\7f~\80\80\82\81\82\83\85\85\86\87\84\84\84\82\81\80}|{~{\7f}\81}\82\82\85\82\85\83\86\85\85\83\84\83\83\81\82\83\81\82\7f|~~\80~~\80\80\7f\81\82\84\85\85\82\83\84\82\82\82\83\7f\81}\7f\7f\7f\80\7f\81~\80\80\81\82\84\82\82\7f\86\80\85\83\83\83\82\81\81\80\82\80~\81~\81~\81\81\80\81\7f\83}\85\82\83\80\84\80\83\7f\81\80\83\80\81~\83\81\7f\82~\85}\81\80\82\82}\83\82\84\83\7f\84}\84\81\80\80\83\7f\7f\81\7f\85\7f\81\83\7f\80}\83\7f\85}\83}\85{\86\82\83\81\83\7f\83\83\83\7f\87\83\7f\82~\86}\83\80\7f~\84{\81\81\80\81~\81\81\7f\84\82\84\84\81\83\80\84\82\80\85\80\84{\84z\84\80{\83~\81|\82\81\84\81\84~\86\83\81\84\83\81\82\83}\84\80\82~\7f|\84~\81}\85|\82\81\82\83\83\7f\89}\87}\86~\87z\89w\87{\84}\81\82}\83~\86{\88|\87~\86\7f\82\83\80\81\84~\84}\84~\83~\84\81\7f\80\7f\83\80\7f\82\87{\84\80\83\81\84z\8c{\84\84\81\80\81\85z\89y\86z\82}\83\7f\84\81\83~\85\82\84\80\86z\88|\85}\86\81~}\87}\81\80\85}\80\81\84~\84\7f\83\7f\82|\87\7f\83~\84\81\84~\84\82\80}\84\80\84\81}\88|\82\80\85}\83}\83\80\81\81\80\80\88|\81\80\87{\84~\87}\7f\85}\84~\82|\87}\85\81\81\80\84\82\80\83\84\84|\82\80\89z\80\82\83{\85\7f\87\80\82\7f\82\84~\84\7f\81\80\80\83\81\81\83\80~\82\80\80\84\80|\82\87{\87z\87|\83~\89w\85}\84\80\80\81\88w\8av\8c{\87y\87\81\82\80\85\80\83\83}\8aw\89z\87~\82x\8fr\89{\88|\83\82\81\86x\88|\89v\8ay\8ev\88{\89v\89|\82\85z\89z\89z\89|\81|\90q\8fx\8du\85\7f\84\80\7f\83z\8cu\8c{\81\85~\83\81\82\82\81\80\80\86|\86\80\82}\86~~\88|\83\80\83\80\84\7f\83\82\7f\7f\85~\7f\87\83~\82~\84\7f\81\87\80|\8a|\82\80\81\83{\87|\86|\82z\8cy\88{\84\7f\82\80\82\89t\8cv\88|\84{\88~\80\87|\86w\8at\8a|\86y\88{\84\7f\84\86{\86{\8ax\8bw\89x\84\84~\85w\93q\8aw\8es\88z\87~\83\82\81\85|\84\80\86y\87{\88v\8ax\8fq\8by\8cx\83\85\81\80\80\89x\88x\89}\81\80\85~\80\84z\86}\84{\8bz\88u\8dw\88~\86z\87z\84\88w\8er\91n\91r\8dw\88z\88{\85\81\80\85|\89x\8au\8c{\82\80\86~\80\8aw\8cs\90s\90s\8az\86z\88}\81\83{\87z\86~\8a{\83\80\85}\84{\89}\83|\85}\87z\88|~\83\80\85{\86{\87~\82\82\85\80|\86z\87{\8bx\86\7f\81\86{\87z\89{\8ax\8a|\82\84}\87y\8bx\87~\86x\88~\83\80\84\81\80\83|\88\7f\81\82\82\82|\86\80\81\80\82\82\81\84}\84}\87z\89z\83{\8a|\86{\89v\88|~\88\80}\84\85\80~\81\88\7f~\88}\7f\80\82\87}\81~\86|\86\7f\85\7f\81\82\83\81\81\83\80\81\82\81\83\82{\86~\82~\88|\83\7f\83\83|\87}\87y\86\81\83}\85|\85|\85\80\87}\83~\80\83~\89{\87{\87~\84~\84\84x\89~\84|\82\80\83\81\81\85\82}\82\81\85}\80\83\81}\84\81\81\7f\82\83\80\80\80\85\82z\86\7f\84~\83\80\84{\82\83\82\80\80\89}\83z\88~\82~\86|\85|\85\80\82{\89|\82\7f\86\80~\80\86~}\85\81\7f\83\80\85\7f~\85\83~\81\82\81}\86~\85~\83~\84|\82\7f\85\80\80\84\82\81~\87~\81\80\84\81\7f}\85\80\80\81\84\7f\83|\88\7f\82\81\83\82|\85\80\80{\86~\83~\84\82}\86\7f\84}\84|\87}\84}\86\80\7f\7f\85\80\80\81\84\80\80\82\82~\82\83\81\7f\86\80\81~\82\81\7f\83\83\81\80\83\7f\80\82\81\80\81\82\80\81\7f\84\80\7f\80\80\81~\83\83\80\82\85\83\84\83\84\86\7f\81\7f}~\7f\82{y\80\81x\85\81\80~\87x|\8a\87}\8e\8f\87\8a\8e\8a}\88\84swwopvvy\82\83|\8d\86\85\8b\89\81o\8d\90k\8d\9eu\8e\9c\8f\88\88\90wf\82i[tojw\87\84\81\98\99\81\8d\98}\83\87d\81\8dg\8b\93w\99\95\93\91\89\92|f}e[qghz\81\84\88\97\97\95\91\96\8a\80\85od\99^x\9bq\84©\87\93\93\93\86q\7foWwi_|z}\86\90\90\92\9f\8b\8b\94y\80b\80\84R\94\90\97\92\89\85z\80\pwUt\80l\87\8a\89\8c\98\96\7f\9a\8au\82`\8cnc¢sk¾}\8a¯\86\8b\88{v_tnT\82pl\90\80\85\94\92\96\87\98\8dx\88^\8cq^\9ewd¾{\88³\84\90\90}{`xjT\80kk\89z\86\8e\8f\9a\8a\95\94}\8a`\90q^\9etdÀu\8a\80\90\93xzgufY|gj\8au\87\93\8e\9c\91\92\9d|\8aa\8drW\9fvYÁw\82½\82\8d\9aw}irdasgo\82w\8a\8e\8d\9b\97\8c \83\84rm\98B\91\8e\9e\95\7f¡\85xrsk\sih~v\82\90\86\9c\99\8a\9c\91z\81c\9cI\83\95U\8cµ\°¨t \93n|qk\red\7fvw\98\81\97\9f\8a\97\9ex\90c\81\82G¡xO¿}yÅ~\8d¦v\7fuoben_tzp\8f\85\8d\9e\94\8e¢\86\86wj\9bD\8c\8cR\9b¤_º\98\8ap\80pe]r_i\80m\82\96~\9e\9f\8b\9e\99{\8a`\8fg`\9fgeÄg\91Âw\95¦j\82sk\odcwwu\94\84\93\9e\96\91¢\85\84wg\9aD\88\8fP\98¬]¸¡u¨\8ci\84lb`m`k}t\7f\97\84\9b¢\8b\9a\9dw\84b\92Xl\9bbjÊd\95Ät\93ªe\7fwc`jjdv\81s\92\92\88¥\99\87§\83}qt\84G\90\87\9f\9a\84h\80k^cp`k\83x~\9c\89\98§\88\98\9as{b\93Iv\98]zÊg ¾y\92§dzsaZhjbx\87t\95\96\8f§\95\8e¢vzd\8eVi\99nbÁ}\8aÈ\95\88¬nfc^T`vjo\95|\8e¬\97\9c\9c\7f\87|zmi\99A~­a\9bÒe\9aªt\87\90jc[lX\\94}q°\85\81©\8e\88\8f\81\85o}Uo\96C\92ÂX´Ëd¤¤n\82qm\N\82`X¨\7f\8e\8e\82\83\8b\89j{M\91h[®\9c`Ø¡uª\95m\81ctQY\8b]d³pz¨\85z\99\8f\8cw\97\87iZq\95;\8eÊb\99àv\8e\9d\8ct]wk6\7f\88T\8b¥o\82\98\85{\8f\9d}|\9b\7fQX¸GhÍ\92\98\90z\91\8dNT\96HY\96\7fk\9c\8b\80y\8a\8b|\8e\9a|\8d\87VI·Qpº\9e\84¼\8f¥px\93a@\8aae\83\86\86\88y\8fuv\8c\8b\8f\94\83\96~KO¹Qt·¤\92«\8a¶he\95g=~m\7fzw \85e\8b{v\81\8a¢\8f}\9b\83;W­b{«¨ª\9c{´oX\84mYve\94\8dg\94\8bgto\82\8b\84¦\9e\85\8fu.\81\8aa\99§¢¹\88\89\9caiw]tyl\99\87x\87ttpk\88\8f\96¢\8d\8f\8cT, ~w\9e§³³l\93\83]mhh\8cu\81\98\7f~qf|kr\93\97¡\9b\89\91\7f5R\9a|\96\9bªÃ\92k\8effp^|\92}\95\89}\80]izj\81\94£¨\8e\8f\87M(\8c\83\97¨¡¯­u\8ddSkl{\90{\9c\94y|b`uk\85\8d\9c«\9b\8b\87g.Y\86\91¶ª¨«\8f\86o@bt|\89\83\91¦\81wbYop{\8a\95­¥\96\84lC@x\8bÁ­¤ª\96\83yCZh\7f\8e~\95¥\8b\80_Vlrz~\8f¯¥\98\86uL.p\8eºª\9f\8b\83\86QP]v\98\90\94\9a\84~c]gr~\82\8c§£\9b\85xa+_\86¾Ë¬¡\82u\8bfQWh\91\9b¦\98\7fpdhgu\80|\8e\9f¢\99\84{h+S\82¿Ù° ys\80r[Wd\8a\9c¬\99\82h]fny\81z\88\99ª\9b\85va2Z\88Éв\96tnytg]f\83\9b¬ \7f[Ybu\85\85\82\85\95£\98\88rO.`\96ÞÓ°\8dbg\82|ice\84\9b±£tKKa\83\99\94\87}\8a\98\99\8cwN'Z\9aåá²\81P^|\88xjbz\96¶¦{JDY\80\9e\9c\8a}\89\96\96\8bu?+`ªñà´n@[}\92\87nbs\90³¦xI@T\85§§\90y\80\8d\94\8es85hÅõà¬W4T\81\9d\91xdi\8c¯\9ftI>X\8c°±\95|z\81\8f\8bk9DuÌíà\9fK1P~¥\9e\86fg\84 \98wOE\\89ª­\95\87|\7f\85\81]AU\98ÖäÐ\84A7X\87¢¢\87gl\86\94\8alOHl\99±©\94|vy\85~VIf¨×åÁo87^\8b¦¨\89im\83\8e\83nQOn\99¬©\9a\82vss]Rd\9dÈØÎ\8fP=Qw\98¦\98wny\83\83waRc\83£§¤\94{qq^Rb\95ÁÒÑ\9e_@Mi\8b¢\9f\83sr~\83ykY^|\98¦§\9a\85wr`TY\82´ÌÖ¯tKF[~\99¤\8fzru{}tebq\88\9a¤¤\96\80s\NW\81±ÈÒ®yRN]z\96\9e\8e\80utx{vkgs\85\92\9e \95\86u]P[\86«Ä̪{\T]y\93\9b\8d\81wpmruqv}\84\8c\96\98\91\8b\7fcO[\84¢½È«\7fcZ^r\8d\99\8f\88}pknmly\86\8b\8f\95\92\8a\83ze\m\8d¢µ¶\9c}pgfu\88\8d\89\8a\81qiihp\81\8a\8e\92\93\8f\86\80rac\81\99ª´¦\88unmq}\87\83\85\88\7fskdds\87\91\96\95\90\88\7f{lcs\8c\9d¬­\9b\81uomv\81\83\83\86\83yoifiz\8a\91\96\95\8f\86\7fsdf~\95¥®£\8d}usty\7f}\83\88\85{oc\h\7f\90\9a\9e\96\87~xlgw\8b\9a¨¨\98\86{vru|~|\83\82~ypedq\81\8f\9d\9d\92\85zlgx\8d\96¡¡\96\8a\83~yvywy\81\82}vpkku~\86\92\98\93\8b\83rjv\89\95\9f\9f\93\87\83\83~{ytsz~|ysnls\7f\89\90\92\8e\87\82wt\81\8d\93\98\96\8c\85\86\86\81\7f{vuzyxuplq{\85\8d\91\8d\85\80|w}\8c\92\96\98\92\88\84\86\84\81\7f{xxwuuplot|\86\8f\93\8d\84~ww\84\93\98\9a\95\8b\84\85\87\83\7fzwy{{xpjin{\85\8b\8e\8b\8a\85\81z|\86\8e\96\9a\95\8c\87\87\84\82}xutvz{tmjmy\86\8d\90\8b\85\81|\80\8a\90\92\93\90\8b\8b\8e\8b\84}yvtttspnrty\81\85\87\88\88\87\83\81\88\90\95\97\91\8a\86\89\8b\89\83}xrpsromos{\84\89\88\83\81\82\81\86\8f\95\98\99\91\8a\86\87\86\84\80\81}xsplkmmq{\83\87\8a\8a\85\81~\82\8b\96\9b\9c\96\8d\86\85\83\83~{xvxysnhfl{\85\8a\8a\86\82\81\82\87\8c\93\97\99\94\8f\8c\89\84\7f{|xvsrnopnry\80\85\87\88\88\84\82\88\8e\93\98\98\92\8c\88\87\83\80\81}yurnmmnpv|\81\82\82\82\85\85\8a\8f\95\99\9b\97\91\8b\87\83~\80~{wrljmnosx}\82\85\85\86\84\87\8c\93\99\9c\99\93\8d\8a\86\82\82|wurnpmkmqu{\81\83\84\87\87\89\8f\95\98\98\99\94\8e\8c\8a\85\81}xrnllkmmqu|\7f\82\84\87\88\89\91\97\9b\9c\98\92\8b\89\8a\86\82}vpnnmkjlov~\82\84\86\87\86\8c\93\98\9b\9b\97\90\8c\8c\88\83\80{uqpolkkmpw}\80\82\86\87\88\8f\95\99\9b\9a\96\8f\8d\8c\89\84\7fyrnnnlkjkow~\81\84\87\88\8a\91\97\9c\9d\9b\95\8e\8c\8c\87\82}volnlklkkqw}\81\87\8a\8c\8e\94\99\9c\9b\98\92\8f\8f\8c\87\81zsmklkjkloty}\81\85\89\8b\93\9a\9e \9c\97\8f\8c\8c\89\85\81yrmkhggilqw{\7f\83\86\89\8d\95\9c  \9d\97\91\8d\8a\86\81{upnkgeghlrx|\81\86\8a\8c\92\98\9d\9f\9f\9a\94\90\8e\8a\84\7fyrnkhfggjnsx}\83\88\8a\90\98\9d  \9d\97\92\8f\8b\86\7f{vpnkfeghlrwz\7f\84\89\8d\95\9b\9f \9e\99\94\91\8f\8a\84~xrmjgeghkotx}\82\86\8c\95\9b\9f \9f\9a\95\92\8f\8a\84\80{upkgeegjosx|\82\86\8a\92\99\9d\9f \9a\95\92\8f\8b\85\7f{vqmigffkorv{\80\85\8a\92\98\9c\9d\9d\98\97\94\91\8d\88\82|vqligffjnrv{\80\84\8a\91\98\9c\9e\9b\97\93\93\90\8d\89\83|vqmkihhlnrw{\7f\84\8a\90\97\9b\9c\9b\96\93\92\90\8c\88\83}wqmkighlptx|\80\85\8a\90\95\9a\9b\9a\97\94\91\8e\8a\86\81|vroljikmpux|\81\86\8c\92\96\99\99\96\93\93\91\8e\8b\86\80ztpnlklmpswz}\81\86\8c\91\96\98\97\96\93\91\8f\8c\89\84\7fzuqoljlnqux{\7f\83\88\8e\93\96\97\95\94\92\90\8d\8b\87\82|xtqpmlnpsvz}\80\85\89\8e\93\96\97\94\92\90\8e\8c\89\85\80zvsrpnnpquy|~\81\85\89\8e\93\94\94\93\8f\8f\8e\8c\89\84\7fzvtspoopsvz|\7f\83\87\8a\90\94\94\93\92\8f\8e\8c\8a\86\82}zwutqooqtx|~\80\84\88\8b\8f\92\92\91\91\8e\8e\8c\89\85\80}zvusqprsvy|~\81\85\88\8c\8f\91\91\8f\8f\8c\8c\8a\88\84\80}ywvtqqsux{~~\81\85\88\8c\8f\91\90\8f\8e\8c\8a\89\85\82~|zxvtrruwy|\7f\81\84\87\89\8b\8e\8e\8d\8d\8c\8a\8a\87\84\81~|zxvtstvwz}\7f\81\83\86\89\8c\8e\8e\8e\8d\8b\8a\88\86\83\80}{ywvttuwy|~\81\83\85\88\8a\8c\8e\8e\8c\8c\8a\89\86\84\81\7f|zywvuuvx{}\80\82\84\86\88\8a\8c\8d\8d\8c\8b\89\86\86\83\80~|zxwwuvxz|~\81\82\84\86\88\8a\8b\8c\8b\8b\89\88\86\84\82\80~|zyxwvwy{}\7f\81\83\85\87\89\8a\8b\8b\8a\8a\89\87\85\83\82\7f}|zzxwwy{}\7f\80\82\83\85\87\88\89\8a\8a\89\88\86\86\83\81\80~}|{zyxzz|~\80\82\83\84\85\87\88\88\88\88\87\86\86\83\83\81\7f~}||{{|{}~\81\81\82\84\84\85\86\86\86\86\86\85\85\84\84\82\80\80~}|||}}}~~\80\82\83\84\85\85\85\85\85\85\84\85\84\82\82\80\80~~~}~}~\7f\80\80\81\81\82\83\84\84\84\84\84\83\84\83\83\82\82\81\80\80\7f\7f~~\7f\7f\81\80\81\81\82\82\82\81\81\82\81\81\82\80\81\81\82\82\81\81\81\81\81\81\81\81\81\81\81\81\82\81\81\81\82\81\82\82\81\81\81\80\81\81\82\82\81\81\82\81\82\81\81\81\80\82\82\80\80\82\81\80\82\82\82\81\81\81\82\80\82\81\81\81\80\81\82\82\81\81\81\83\81\81\82\80\80\81\82\80\82\81\81\82\82\81\80\80\82\82\80\82\81\81\81\81\81\80\82\80\82\81\81\81\80\82\80\80\82\82\81\80\82\82\80\82\82\80\82\83\80\80\82\82\81\82\80\81\81\81\82\82\81\82\81\80\82\80\81\83\81\82\80\81\83\80\81\82\82\81\81\80\82\80\81\82\82\80\81\82\83\80\82\80\81\83\7f\81\82\81\83\83\7f\81\81\81\81\81\80\82\83\80\81\81\81\82\81\83\80\80\82\81\82\81\82\80\81\82\82\81\82\81\82\82\82\7f\82\82\80\80\81\81\82\82\80\82\81\7f\82\81\7f\81\81\82\81\81\81\83\81\82\82\7f\82\82\81\81\81\80\83\80\82\82\80\81\83\7f\81\82\82\81\80\81\83\81\82\81\7f\82\81\80\82\80\80\82\82\81\81\81\82\7f\81\81\80\82\80\82\82\82\81\82\81\81\81\82\82\80\81\82\81\80\83\83\80\81\80\81\82\81\82\80\82\81\82\81\82\83\81\81\81\7f\83\81\80\80\80\82\82\7f\81\81\82\81\81\82\81\81\82\83\80\82\82\7f\81\81\82\81\81\80\83\80\81\82\80\82\80\80\82\82\81\81\81\80\82\81\80\82\82\80\82\81\83\80\82\81\7f\82\81\82\81\80\83\81\81\82\80\81\81\81\83\7f\82\80\81\83\80\81\80\81\84\7f\81\83\81\82\7f\81\83\81\80\81\7f\82\82\82\83\7f\82\82\7f\81\82\81\7f\82\81\7f\81\81\82\83\80\82\83\80\80\81\82\81\80\82\81\80\80\82\81\83\80\82\82\80\82\83\80\82\80\80\82\83\81\81\81\80\81\82\81\82\80\82\82\81\83\82\7f\81\82\80\82\82\82~\81\82\80\82\82\80\81\81\80\81\81\83\81\80\80\82\83\80\82\81\81\81\81\80\82\81\82\82\82\80\81\82\81}\7f\88\81\7f\80\7f\81\80\82\80\82\83\81~\81\83\83\82\81\82\81\81\82~\81\82\82\81\7f\81\83\80\81\81\82\82\80\82\82\80\7f\83\83\7f\81\83\81\81\81\81\82\81\7f\80\82\82\80\81\83\80\81\83\81\7f\81\82\80~\83\83\7f\82\80\81\82\7f\82\83\80\81\83\80~\82\81\82\80\81\83\82\80\82\80\82\83\80\80\82\82\81\81\82\80\81\81\82\80\82\82\81\80\81\81\83\81\82\80~\82\81\81\81\81\82\81\83\80\81\7f\83\84\7f~\83\80\82\7f\81\83\81\83\83\7f\80\82\80\81\82\80\83\80\81\83\82\80\82\81\80\81\82\82\80\7f\83\81\7f\81\82\80\81\81\82\80\83\82\80\82\83\80\82\7f\82\81~\81\83\80\81\83\83\7f\81\83\7f\81\80\83\81\80\83\82\82\82\7f\83\82\7f\81\82\80\82\80\82\82\80\81\83\7f\82~\83\81\80\82\83\80\83\80\80\82\83\7f\82\7f\81\81\83\83\80\7f\83\81\80\81\80\82\80\81\84\7f\80\83~\82\83\7f\82\82\81\82~\81\84\80\7f\83\81\7f\81\85\82\7f~\82\82\7f\81\82\81\83\82\81\80\83\84}\82\82~\82\82\82\81\7f\82\7f\82\83~\80\83\81\80~\84\82\7f~\84\81~\81\82\80\80~\83\81\82}\80\89\7f\82\84\80\80{\7f\81|~\84\82\80\84\85\82\81\83\83\80~\80\7f\81\82\82\80\82\82\84\81~\81\82~\81\84\80\81\82\83\80\80\83\81\80\82\82\82\81\80\82\81\81\83\7f\82\82\82\81\7f\81\82\80\81\82\81\81\80\83\81\7f\82\83\80\81\81\82\82\81\82\80\82\82\82\81\7f\81\82\7f\81\83\81\80\82\83\81\82\82\7f\81\82\82\82\81\82\83\81\81\82\83\80\82\80\81\80\81~\80\83\82\80\81~\81\82~\80\81\80\82\80\81\82\7f\82\86\85\86\88\89\87\86\84\82\7f|yxvvy|~\81\7f\83\87\86\87\84\83\85\81|r\84\92~\83\96\8c\8a\8f\8b\87\7fvznclpmw~\8a\8e\8c\94\98\8e\8d\87\81~y||tzxf\85\97v\86¤\8c\8c\98\92\8a\80{|e_khaw\80\87\8c\97\9d\9a\95\99\88\82\7fvrpnqef\93\82\9d\86¦¡\8f\8d\88\80qai`Ucpt\7f\90\9c\99\9f©\9a\8c\92\83svmegSn\8ee\8d´\85 À\94\97¢\84{je\LWaQ~\87~§§\9c¶¥\98\93\8b{qmga\T\84qmª\94\81Å¥\8e²\97|\81l^SSZNdy{\91¢¡®­©¢\93\8a\7foheZVRvrm£\9a\85Æ«\92»\9cz\8em[WTNNcmp\92\9d\99¶¯¦­\9b\8b\89sje\[PY\85`\84µ\7f¢Ñ\8c«¼y\8e\89Ub\IUServ\98\99\9f±§ª¨\93\95\82rr^[WL~_sª{\97Ð\8a®¿~\99\8e\sXI`M`ku\8c\8e£©¢´¤\9a\99\85zoeaWNrjb\9e\88\84Æ\96 Â\8c\91\9cgqgS\Y\lp|\8d\8e\99¥\9f¢§\92\92\8cvyl_eRppd\9c\83\82Ä\8c Â\83\98\9d_}jHjSYrg}\90\88¤¡¡¨¡\95\90\87tvi\`Vy_{\98x µ\85¼¦\84©}k~VYeOfoi\81\90\88¤¤\99® \8e\99\82rzdbfU}gt\9bu\96±|´£\83©\83r\8a\akT`tfy\8e\83\9b¤\97©£\90\99\86v|gafPnzT¤\81\7fÅ\8a¡¿\83\9f\9af\87eWgUVlgo\8d\84\91§\98£®\92\9c\8f{~nciZX\89S\89\95n«ª\83Â\97\8e¤yx{Y`bSfik~\86\8c\9e\9e ¦\9e\98\93\88z|kfhXg\81P\9f\81\8e\99½\86\9b\9bn\82n\c_Xhqg\86\8f\82¯\95\9c\87¤\8dy\87lgl[\g\80\80\82À\8e\9d¾\82\9d\99i\84jUe]Rmlj\89\8a\8d©\9d ­\95\9b\91\7f\81nig_bW\88`\83¢t©³\7f¾\95\8c {m~S[gPgsi\84\8d\8a£\9d\9f£\9e\95\92\85|tmfeeZr\83X´z\8d½\88£³\8b¡\90ipZLa`[pst\8c\9f\9a³«\95 \84\80\87txuakdS\90X\8e¥p´¬|À\8d\8f\8fxgheVkme\83|w\9e\81\90¢\86\98\95\88\91\8b\7f\82}mulh_\86ipµr\9bÀz¨ \83\8a\7fqf_pZr}r\87\85\86\87\8e\8e\8a\90\91\85\8f\89\84\88\7f}utrmspxy\87\8b\8d\98\9b\9c\9b\93\8e\7fvqkgknnrw}\83\88\8e\91\90\8f\91\8b\8c\8b\84\81|wrnmqy|\88\8b\8c\93\9c\9c\98\95\8a{snhfjlpp{\82\84\8c\92\91\90\94\94\90\90\8c\88\81|vqlhmpv\7f\87\8c\92\9b\9e\9d\9a\94\86yqnggmmnu}\81\85\8f\90\8e\93\90\90\8d\8b\8b\84}ztihlqw\82\8b\8c\91\9f\9e\9d\9a\92\84vnnfflmmt|\81\85\8e\92\93\94\93\93\8f\8c\8d\86\80zslehqs~\88\8a\90\9d\9f\9d\9a\94\85vpnhgmoot}\83\85\8d\93\8f\90\93\90\8c\8e\8b\85~xskemqt\81\89\8b\93\9c¡\9e\98\93\83uqnihnlos|\82\86\8a\91\90\91\93\95\90\8e\8a\85\7fysjeipu\80\8a\8e\91\9e¡\9c\99\93\84uongflops}\83\85\8b\90\92\92\93\93\8e\8d\8a\85\80yrmfipu\7f\88\8b\8f\9a\9f\9e\99\94\87xqojglpot{\82\86\8a\8e\91\91\90\92\91\8e\8b\87\82xqiehos\80\8b\8d\92 £\9f\9a\94\84tnmgfjnps~\84\87\8c\8e\91\92\91\92\92\8f\8b\85\80xqffjos\83\8c\8d\93 ¢\9e\97\91\83tnlhhlosv}\82\8a\8e\8b\8e\93\94\90\8e\90\8b\83\7fxnegmpv\86\8e\90\96 ¢\9e\97\8d~smhfkmlsx\80\84\8a\8f\91\90\91\91\91\8d\8d\8a\84}ukbhprx\89\90\8f\98¢£\9d\94\89yomhglnmr|\83\84\8a\90\90\8f\91\93\93\8f\8d\88\83}uibjpow\8b\92\8f\98¡¡\9c\91\87ypnfipmor}\85
\ No newline at end of file
diff --git a/ROMs/2620_span-8.bin b/ROMs/2620_span-8.bin
new file mode 100644 (file)
index 0000000..03fc607
Binary files /dev/null and b/ROMs/2620_span-8.bin differ
diff --git a/ROMs/README.md b/ROMs/README.md
new file mode 100644 (file)
index 0000000..c494fb8
--- /dev/null
@@ -0,0 +1 @@
+# The files in this directory are from the [Crypto Museum](https://www.cryptomuseum.com/spy/owvl/32620/index.htm)
diff --git a/extract.c b/extract.c
new file mode 100644 (file)
index 0000000..79fd423
--- /dev/null
+++ b/extract.c
@@ -0,0 +1,148 @@
+/* Extractor for Geraet 32620 ROM files
+ *
+ * Copyright (c) 2020 Michael Gernoth <michael@gernoth.net>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+#include <errno.h>
+#include <inttypes.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+int main(int argc, char **argv)
+{
+       uint8_t header[64];
+       uint32_t adrs[(64/3)+1] = { 0 };
+       uint8_t last_cs = 0;
+       int fd;
+       int r;
+       int i;
+       int count = 0;
+
+       if (argc != 3) {
+               fprintf(stderr, "Syntax: %s in.bin prefix\n", argv[0]);
+               exit(EXIT_FAILURE);
+       }
+
+       fd = open(argv[1], O_RDONLY);
+       if (fd == -1) {
+               perror("Can't open ROM");
+               exit(EXIT_FAILURE);
+       }
+
+       r = read(fd, header, sizeof(header));
+       if (r != sizeof(header)) {
+               perror("Can't read header");
+               exit(EXIT_FAILURE);
+       }
+
+       /*
+        * From: https://blog.ardy.io/2020/8/geraet-32620/
+        *
+        * 00000000 01000000 01000011 10110111 01001010 01000011 11000011 01011000
+        * ^^^^^^^^ ^^^^^^^^ ^^^^^^^^|                          |
+        * LIIIIIII LIILIIII I????LII
+        *        I   I    I I      +-- Amplification (Default: 3)
+        *        I   I    I +--------- Remaining chip select line? (but not quite?)
+        *        I   I    +----------- Address (HI Byte)
+        *        I   +---------------- Chip Select lines A15, A14, A13
+        *        +-------------------- Address (LO Byte)
+        */ 
+       for (i = 0; i < 62; i+=3) {
+               uint8_t hi, lo, amp, cs;
+               uint32_t adr;
+
+               lo = header[i];
+               if ((header[i+2] & 0xf8) & 0x40) {
+                       cs = ((header[i+1] & 0xe0) >> 5) - 2;
+               } else {
+                       cs = (((header[i+1] & 0xe0) >> 5) | (1 << 3)) - 4;
+               }
+
+               //EOF?!
+               if ((header[i+2] & 0xf8) == 0xf8)
+                       cs = last_cs;
+               else
+                       last_cs = cs;
+
+               hi = header[i+1] & 0x1f;
+               amp = header[i+2] & 0x3;
+
+               adr = ((hi << 8) | lo) + (cs * 8192);
+               if (cs == 0)
+                       adr += sizeof(header);
+
+               printf("%02d. hi: 0x%02x, lo: 0x%02x, cs: 0x%02x -> adr: 0x%04x; amp: 0x%02x\n",
+                      i/3, hi, lo, cs, adr, amp);
+
+               adrs[i/3] = adr;
+               if ((header[i+2] & 0xf8) == 0xf8)
+                       break;
+
+               count++;
+       }
+
+       for (i = 0; i < count; i++) {
+               uint8_t buf[65536];
+               uint32_t len;
+               char file[32];
+               int fd_out;
+
+               lseek(fd, adrs[i], SEEK_SET);
+
+               len = adrs[i+1] - adrs[i];
+
+               if (!len)
+                       break;
+
+               printf("%02d. Length: %d\n", i, len);
+               memset(file, 0, sizeof(file));
+               snprintf(file, sizeof(file)-1, "%s-%02d.raw", argv[2], i);
+
+               fd_out = open(file, O_WRONLY|O_CREAT|O_TRUNC, 0644);
+               if (fd_out == -1) {
+                       perror("Can't open out");
+                       exit(EXIT_FAILURE);
+               }
+
+               r = read(fd, buf, len);
+               if (r != len) {
+                       perror("Can't read content");
+                       exit(EXIT_FAILURE);
+               }
+
+               r = write(fd_out, buf, len);
+               if (r != len) {
+                       perror("Can't write content");
+                       exit(EXIT_FAILURE);
+               }
+
+               close(fd_out);
+
+       }
+
+       close(fd);
+
+       return EXIT_SUCCESS;
+}
Impressum, Datenschutz