0
-------------------------------------------------------------------------------
| Metroid Password Format Guide
| by John David Ratliff
|
| The most recent version of this guide can always be found at
| http://games.technoplaza.net/mpg/password.txt
|
| Copyright (C) 2005 emuWorks (http://games.technoplaza.net/)
| Permission is granted to copy, distribute and/or modify this document
| under the terms of the GNU Free Documentation License, Version 1.2
| or any later version published by the Free Software Foundation;
| with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
| Texts. A copy of the license can be found at
| http://www.gnu.org/licenses/fdl.html
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
| Table of Contents
-------------------------------------------------------------------------------
1.0 Introduction
2.0 Copyright Notice
3.0 Revision History
4.0 Password Data
4.1 Basics
4.2 The Metroid Alphabet
4.3 The Checksum
4.4 The Shift Byte
4.5 Known Password Bits
4.6 Encoding
4.7 Decoding
4.8 The Debug Password
5.0 mpg - The Metroid Password Generator
6.0 Credits & Acknowledgments
7.0 Contact Information
-------------------------------------------------------------------------------
| 1.0 Introduction
-------------------------------------------------------------------------------
This document is a guide to the password system used by Metroid for the NES.
It applies to the original Metroid 1 released in the US and Europe. I believe
the information is also accurate for the hidden Metroid 1 game that can be
unlocked in Metroid Prime, and for Metroid Zero Mission for Game Boy
Advance. I have only tested the information with the original Metroid for
the US version of Metroid. Please contact me if you find anything to be
inaccurate, either as it applies to the Metroid 1 for the NES or any of the
others mentioned.
This guide is not a walkthrough for Metroid, and will probably not really
help you create passwords. This guide is a document describing the password
format for anyone who may be interested in it. I'm writing it because there
doesn't seem to be any document to describe the password format in and of
itself. The only thing close is the documentation contained with SnoBro's
metroid password generator (MetCode) and its source code.
If you just want to create passwords, I suggest using a password generator.
There are several choices, but because I have written one, it's the one I'm
going to recommend. You can find my program, mpg (Metroid Password
Generator), on emuWorks at http://games.technoplaza.net/mpg/. I wrote the
program to help me learn about the password format so that I could write this
document.
-------------------------------------------------------------------------------
| 2.0 Copyright Notice
-------------------------------------------------------------------------------
This document is Copyright (C) 2005 emuWorks (http://games.technoplaza.net/)
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts. A copy of the license can be found at
http://www.gnu.org/licenses/fdl.html
Basically, it is free documentation in much the same way software under the
GNU General Public License is free software. You can modify it, redistribute
it, sell it, publish it, etc.
-------------------------------------------------------------------------------
| 3.0 Revision History
-------------------------------------------------------------------------------
Version 1.0 - Friday, September 30, 2005
- First Public Release
-------------------------------------------------------------------------------
| 4.0 Password Data
-------------------------------------------------------------------------------
This is the important section. It covers the details of the Metroid password
format.
-------------------------------------------------------------------------------
| 4.1 Basics
-------------------------------------------------------------------------------
The Metroid Password is a string of 24 characters in the Metroid Alphabet.
The password string is an encoded 144-bit data field, with 128 bits reserved
for game data, 8 bits for the checksum, and 8 bits for the shift byte.
Each character in the password represents 6 bits of the password (24 * 6 bits
= 144 bits). To obtain the contiguous 144-bits, you will need to string the
character bits together. After this has been done, you can perform operations
on the comprising 18 individual bytes.
There are 12 bits of the password data whose function is currently unknown.
It is probable that some of the bits are unused. I have seen one in use, but
have yet to discover it's function. If you learn the function of any of the
bits marked Unknown in the document, I would very much appreciate an email.
The remaining 116 bits are used to store data about the game. This data
includes how many missiles Samus is carrying, what equipment Samus has in her
inventory (Long Beam, Maru Mari, etc), which missile containers Samus has
picked up, which energy tanks Samus has collected, how long the game has been
played, which red and yellow doors have been opened, Samus' starting
location, which statues have been raised, if Samus is wearing her space suit
or her swimsuit, which zebetites have been destroyed, and finally which
bosses have been killed.
The password can be encrypted using a shift value, which is not part of the
128-bit password data. It comprises the 8-bits just following the password
data. More about the shift byte will be said in 4.4 The Shift Byte.
The final 8 bits are the checksum, which is the first 136-bits added
together. This provides Metroid a way to ensure that a valid password is
being entered.
Because the checksum is the same for every unique combination of the first
136 bits, there are 2^136 valid Metroid passwords, which is approximately
8.7112285931760246646623899502533e+40 passwords. Many of them are
functionally equivalent.
-------------------------------------------------------------------------------
| 4.2 The Metroid Alphabet
-------------------------------------------------------------------------------
Passwords, as well as all text in the game are comprised from an alphabet
of 65 characters, which include the entire alphabet A-Z (both upper and lower
case), the numbers 0-9, and the characters dash (-), question mark (?), and
space ( ).
Each character has a distinct value in a Metroid password, and they are
ordered as follows:
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz?-
The space character, which is at the end carries a special value of 255. The
remaining characters are all numbered from 0-63. In other words, the Metroid
character 'C' has a value of 13.
These values are used to decode the password into raw bit values. Because
(with the exception of space), they can all be expressed in 6-bits. You may
think that this means a space has the same value as the dash, but this is not
entirely true. Because of the way the data is converted from 6-bit values to
8-bit values (it is not simply strung together), the space can introduce it's
high 2 bits over the lower order bits of the character which preceeded it.
This means the space has the potential to alter the character which came
before it. This will be discussed more in 4.7 Decoding.
-------------------------------------------------------------------------------
| 4.3 The Checksum
-------------------------------------------------------------------------------
Metroid passwords use a simple checksum to confirm their authenticity as a
valid Metroid password. The last 8-bits (1 byte) comprises the checksum.
To calculate the checksum for a password, add the first 136 bits (17 bytes)
together. Take the result bit-wise ANDed with 255 and you have your checksum.
The checksum is not a perfect means of validation. It can only do a glib
test stating that the data is likely to be what you meant to enter.
-------------------------------------------------------------------------------
| 4.4 The Shift Byte
-------------------------------------------------------------------------------
The 17th byte (bits 128-135) comprise the shift byte. It is used to encrypt
the password.
Basically, when the password is encoded, bits are rotated from one byte to
the next and the bit rotated off the last byte goes onto the first byte.
The shift byte determines how many times this bit rotation occurs. So, a
value of 0 means the password is not encrypted at all.
The method for bit rotation will be covered in 4.6 Encoding and 4.7 Decoding.
-------------------------------------------------------------------------------
| 4.5 Known Password Bits
-------------------------------------------------------------------------------
This section lists all the bits in the 128-bit password data that are known.
I with I could be more specific about the locations of missile containers,
energy tanks, and certain red doors, but without a good point of refernece
(like a public map), this is difficult to do.
There is another password generator written in Flash that contains a map and
does a great job of telling you exactly where things are and which bit
corresponds with what item. It is available at
http://www.geocities.com/passgens/pa...d/metflash.htm. If you have
Flash, and want to know specifics, I suggest you check it out.
I'm going to list them in the order they exist in the password.
Bit 0: Maru Mari Taken
Bit 1: Missile Container (Brinstar)
Bit 2: Red Door (Long Beam)
Bit 3: Red Door (Tourian Bridge)
Bit 4: Energy Tank (Brinstar)
Bit 5: Red Door (Bombs)
Bit 6: Bombs Taken
Bit 7: Red Door (Ice Beam Brinstar)
Bit 8: Missile Container (Brinstar)
Bit 9: Energy Tank (Brinstar)
Bit 10: Red Door (Varia)
Bit 11: Varia Taken
Bit 12: Energy Tank (Brinstar)
Bit 13: Missile Container (Norfair)
Bit 14: Missile Container (Norfair)
Bit 15: Red Door (Ice Beam Norfair)
Bit 16: Missile Container (Norfair)
Bit 17: Missile Container (Norfair)
Bit 18: Missile Container (Norfair)
Bit 19: Missile Container (Norfair)
Bit 20: Missile Container (Norfair)
Bit 21: Missile Container (Norfair)
Bit 22: Missile Container (Norfair)
Bit 23: Red Door (High Jump Boots)
Bit 24: High Jump Boots Taken
Bit 25: Red Door (Screw Attack)
Bit 26: Screw Attack Taken
Bit 27: Missile Container (Norfair)
Bit 28: Missile Container (Norfair)
Bit 29: Red Door (Wave Beam)
Bit 30: Energy Tank (Norfair)
Bit 31: Missile Container (Norfair)
Bit 32: Red Door (Kraid's Lair)
Bit 33: Missile Container (Kraid's Lair)
Bit 34: Missile Container (Kraid's Lair)
Bit 35: Red Door (Kraid's Lair)
Bit 36: Energy Tank (Kraid's Lair)
Bit 37: Red Door (Kraid's Lair)
Bit 38: Red Door (Kraid's Lair)
Bit 39: Missile Container (Kraid's Lair)
Bit 40: Missile Container (Kraid's Lair)
Bit 41: Red Door (Kraid's Room)
Bit 42: Energy Tank (Kraid's Room)
Bit 43: Missile Container (Ridley's Lair)
Bit 44: Red Door (Ridley's Lair)
Bit 45: Energy Tank (Ridley's Lair)
Bit 46: Missile Container (Ridley's Lair)
Bit 47: Yellow Door (in Ridley's Room)
Bit 48: Energy Tank (Room Behind Ridley)
Bit 49: Missile Container (Ridley's Lair)
Bit 50: Yellow Door (Tourian)
Bit 51: Red Door (Tourian)
Bit 52: Red Door (Tourian)
Bit 53: Zebetite 1 Killed
Bit 54: Zebetite 2 Killed
Bit 55: Zebetite 3 Killed
Bit 56: Zebetite 4 Killed
Bit 57: Zebetite 5 Killed
Bit 58: Mother Brain Killed
Bit 59: Unknown
Bit 60: Unknown
Bit 61: Unknown
Bit 62: Unknown
Bit 63: Unknown
Bit 64: Start in Norfair
Bit 65: Start in Kraid's Lair
Bit 66: Start in Ridley's Lair
Bit 67: Reset
Bit 68: Unknown
Bit 69: Unknown
Bit 70: Unknown
Bit 71: Samus in Swimsuit
Bit 72: Samus Has Bombs
Bit 73: Samus Has High Jump Boots
Bit 74: Samus Has Long Beam
Bit 75: Samus Has Screw Attack
Bit 76: Samus Has Maru Mari
Bit 77: Samus Has Varia
Bit 78: Samus Has Wave Beam
Bit 79: Samus Has Ice Beam
Bit 80: Missile Count (+1 Missile)
Bit 81: Missile Count (+2 Missiles)
Bit 82: Missile Count (+4 Missiles)
Bit 83: Missile Count (+8 Missiles)
Bit 84: Missile Count (+16 Missiles)
Bit 85: Missile Count (+32 Missiles)
Bit 86: Missile Count (+64 Missiles)
Bit 87: Missile Count (+128 Missiles)
Bit 88: Game Age (32-bit Value -- Low Bit)
Bit 89: ...
Bit 90: ...
Bit 91: ...
Bit 92: ...
Bit 93: ...
Bit 94: ...
Bit 95: ...
Bit 96: ...
Bit 97: ...
Bit 98: ...
Bit 99: ...
Bit 100: ...
Bit 101: ...
Bit 102: ...
Bit 103: ...
Bit 104: ...
Bit 105: ...
Bit 106: ...
Bit 107: ...
Bit 108: ...
Bit 109: ...
Bit 110: ...
Bit 111: ...
Bit 112: ...
Bit 113: ...
Bit 114: ...
Bit 115: ...
Bit 116: ...
Bit 117: ...
Bit 118: ...
Bit 119: Game Age (32-bit Value -- High Bit)
Bit 120: Unknown
Bit 121: Unknown
Bit 122: Unknown
Bit 123: Unknown
Bit 124: Ridley Killed
Bit 125: Ridley Statue Raised
Bit 126: Kraid Killed
Bit 127: Kraid Statue Raised
Most of these are obvious, but some require some additional explanation.
The bits that say "XXX Taken", such as Maru Mari Taken, are used to determine
whether the item will appear in the place it is supposed to be. If Samus
doesn't have the Maru Mari (Bit 76), but Maru Mari is Taken (Bit 0), then
Samus can never get the Maru Mari. All the beams (Long, Ice, and Wave) are
always there.
The game will not let you pick up the Ice Beam and Wave Beam simultaneously.
If you pick up one, the other will deactivate. If you activate both bits
yourself, you get a weird cross between the two beams. It doesn't seem to
hurt the game.
There are five valid start locations. They are specified using bits 64-66.
To start in Brinstar, all the bits should be off. Norfair, Kraid's Lair, and
Ridley's Lair can be specified by turning their bit on and leaving the others
off. Tourian is specified by turning on Norfair and Kraid's Lair
simultaneously. Any other combination of these three bits is invalid and will
cause Metroid to reset.
The reset bit is part of the start location. There are 16 possible values,
but only 5 valid ones. Turning on the reset bit will produce and invalid
start location and cause Metroid to reset. This is why it is called it is
called the reset bit, because it guarantees an invalid password.
If Mother Brain is dead, the door will already be there when you get to the
end of Tourian. The bomb timer will not activate, and you will be able to
spend as much time as you like escaping Tourian.
The missile count is an 8-bit (1 byte) value ranging from 0-255. Just convert
the number you want to binary and turn on the appropriate bits.
The game age is a complicated number. It is a 32-bit value, though in
reality, it only has a range of 2^24 * 208 because the least significant byte
overflows at 208. This means there are 3,489,661,135 distinct values in the
range 0 - 4,294,967,295.
The game age is in what I will call 'game ticks'. The exact value of a tick
depends upon whether you have an NTSC NES (the US Nintendo) or a PAL NES
(the European Nintendo). If you have an NTSC NES, then 1 game tick = (256 /
60) seconds or approximately 4.2666666666666666666666666666667 seconds. For a
PAL NES, 1 game tick = (256 / 50) seconds or 5.12 seconds. Where did these
values come from? 1 game tick is actually the amount of time it takes to
draw 256 frames. Because the NTSC NES draws 60 frames per second, you get
(256 / 60). The PAL NES draws 50 frames per second, so you get (256 / 50).
The difference is related to television signal differences between North
American (NTSC) and Europe (PAL).
-------------------------------------------------------------------------------
| 4.6 Encoding
-------------------------------------------------------------------------------
Here comes the good part; taking the password data from its raw format and
creating a Metroid password from it.
The encode is a fairly simple process, although it involves a lot of tedious
math. If you actually want to encode raw data, I highly recommend using a
password generator, such as mpg (http://games.technoplaza.net/mpg/).
The encoding process involves four steps.
1. Calculate the checksum
2. Encode the password data using the shift byte
3. Convert the 18 8-bit blocks to 24 6-bit blocks
4. Translate the 6-bit blocks into a readable password
Step 1 - Calculate the Checksum
Calculating the checksum is a fairly simple process. Take the first 136
bits and add them together. Take the result and bit-wise and it with 255.
The result if the checksum.
The checksum should be stored in the last byte (bits 136-143).
Step 2 - Encode the Password Data Using the Shift Byte
This is the part where the password gets encrypted using bit rotation. Here
is how it works.
You need two variables, which I will call carry (1 bit) and copy (8 bits).
As many times as the shift byte indicates, do the following
Save the first byte of the password data in copy.
For each byte of the password data (0-15 starting at 0) do the following
Rotate the password byte right one bit.
The least significant bit of the password byte should become the new
carry value.
The most significant bit of the password byte should be the old carry
value.
Rotate the copy byte right one bit.
The least significant bit of copy should become the new carry value.
The most significant bit of copy should be the old carry value.
Overwrite the first byte of the password data with the copy byte.
Very simply, we are rotating bits down the password data from byte to byte.
The copy is needed because the last byte's rotated bit has to become the
high bit of the first byte. I use the name carry because there is an
instruction in x86 assembly which can perform this task using the carry
flag internally. If you take a look at SnoBro's password generator MetCode,
his x86 assembly source is much more compact than my C++ source for mpg.
Step 3 - Convert the 18 8-bit Blocks to 24 6-bit Blocks
Now that we have our password encoded using the shift byte, we can
translate to the Metroid alphabet.
Because each letter of the Metroid alphabet can be represented in 6-bits,
the encoding process will never produce a password with spaces. You can
read more about spaces in 4.7 Decoding.
To convert from 8-bit blocks to 6-bit blocks, all we need to do is take
every 6 bits in order. So just take your 144-bit string and separate it
into 24 6-bit segments.
Step 4 - Translate the 6-bit Blocks into a Readable Password
Since each letter can be represented in 6-bits, converting between the
6-bit blocks and the western alphabet is trivial. Convert each 6-bit
value to a decimal number, and take that as the offset from 0 in the
Metroid alphabet.
In other words, 000000 binary = 0 decimal = '0'
111111 binary = 63 decimal = '-'
You can fill in the rest from 4.2 The Metroid Alphabet.
That's all there is to it. The math is rote, but hard to do by hand. I highly
recommend using a password generator if you want to actually encode Metroid
passwords.
-------------------------------------------------------------------------------
| 4.7 Decoding
-------------------------------------------------------------------------------
Decoding is nearly a mirror image of encoding, but there are a couple of
minor differences that are important to note.
Decoding, like encoding, is a four step process. Just like encoding, I
recommend using a password generator if you really want to decode Metroid
passwords.
1. Convert the password to the Metroid alphabet
2. Convert the 24 characters to 18 8-bit blocks
3. Decode the password data using the shift byte
4. Verify the checksum
Step 1 - Convert the Password to the Metroid Alphabet
This is basically the same as step 4 in the original, but we have to be
careful, because we are not dealing with 6-bit blocks here. Although 64 of
the 65 characters in the Metroid alphabet can be represented in 6-bits,
the final character (space) cannot. Therefore, we must use 24 8-bit blocks,
rather than 6-bit blocks.
All the characters use their same values except for space which uses 255.
In a minute, we will see how this causes spaces in passwords to sometimes
affect the character that came before it.
Step 2 - Convert the 24 characters to 18 8-bit blocks.
Although we have 8-bit blocks now, we need to have 18 contiguous 8-bit
blocks, and since most of the characters (if any) won't be spaces, we will
have the upper two bits of every character off.
If you have no spaces in the password, then you can just remove the leading
two bits from each character and create a 144-bit string.
If you have spaces, it gets more complicated. The character that preceeds
the space must be altered to have its lowest two bits turned on. After
that, you can treat the space like a dash.
If you take a look at the source code for mpg, you can glean a more
mathematical reason for why you have to do this with spaces, but for this
document, I'm just doing to tell you that it has to be done.
Step 3 - Decode the Password Data Using the Shift Byte
This is the same process we did for encoding, but in reverse. Instead of
rotating right, we rotate left, and we swap least significant bit and
most significant bit. Here is the whole process.
As many times as the shift byte indicates, do the following
Save the last byte of the password data (byte 15) in copy.
For each byte of the password data (15-0 starting at 15) do the following
Rotate the password byte left one bit.
The most significant bit of the password byte should become the new
carry value.
The least significant bit of the password byte should be the old
carry value.
Rotate the copy byte left one bit.
The most significant bit of copy should become the new carry value.
The least significant bit of copy should be the old carry value.
Overwrite the last byte of the password data with the copy byte.
Step 4 - Verify the Checksum
Finally, we have our password data. Now we need to verify the checksum.
All we have to do is calculate the checksum on the data we have, and make
sure it's equal to byte 18 (bits 137-144). If not, then the password is
not valid and will be rejected by Metroid.
That's all there is to decoding.
-------------------------------------------------------------------------------
| 4.8 The Debug Password
-------------------------------------------------------------------------------
One password, which I will call the debug password, and is also known as the
NAR PASSWORD, is a special password which does not use the shift byte or the
checksum. This is because it is hard coded into Metroid and the password data
has no meaning. It simply triggers a debugging mode in Metroid that was used
to help test the US version of the game.
The NAR PASSWORD, which if written completely is
NARPAS SWORD0
0000
The last 8 characters can be anything and are not checked at all. This is
because 16 * 6 = 96 bits = 12 bytes = 3 quads. I don't know if this is
specifically why you need the last 5 zeros, but it is my theory.
Why 3 quads? I don't know, but it's a nice number from a computer science
point of view. If not 3 quads, then 12 characters which would be 12 * 6 =
72 bits = 9 bytes would have been pretty easy to check in 6502 assembly.
It is also possible they simply wanted to restrict the number of passwords
that would trigger debug mode, and requiring 5 zeros at the end is one way it
could have been done. However, if that is the reason, why not require they
all be zeros? Why have any wildcard characters at all?
Blanks are interpreted as 0's in the Metroid password screen, so you never
need to enter more than NARPAS SWORD anyways. (That's blank, meaning no
character present, not space, which looks identical to, but is interpreted
very differently from a blank).
What does NAR mean? There are a few theories, but no one knows for sure. The
three most popular are as follows:
1. NAR = North American Release
The Japanese version did not have passwords and used the FDS (Famicom
Disk System) to store Metroid save games.
2. NAR = Not a Real (as in Not a Real Password)
3. NAR = Tohru Narihito
Tohru Narihito designed and implemented the password system in Metroid.
Maybe he named the debug password after himself.
-------------------------------------------------------------------------------
| 5.0 mpg - The Metroid Password Generator
-------------------------------------------------------------------------------
As I have mentioned many times, it is inconvenient to use the methods
described here by hand. This document wasn't written so people would try to
do this by hand. Rather it was written to further the understanding of the
Metroid password format.
I wrote a program called mpg (The Metroid Password Generator) as a
replacement for a program I had seen called MetCode (the first Metroid
password creation tool written by SnoBro). SnoBro only updated it within
his MetEdit (Metroid Editor) program, and the program itself leaves quite a
lot to be desired. SnoBro did not have complete information on the password
format, so many bits in the password that I learned about were blank in his
program. It was also Windows only and has what I consider to be a less than
optimal interface.
mpg is a replacement for SnoBro's MetCode. It takes the basic idea and turns
it into a nicer program. It runs on Windows, Linux, and Mac OS X for sure,
but should also run on any unix supporting the GTK+ toolkit.
mpg also takes inspiration from a program called metpass by tapper, which was
written to aid in the creation of Metroid passwords as strings of words. If
you want to spell words in Metroid Passwords, you could use metpass to fix
the checksum so the password would work in Metroid. I thought the two ideas
should be combined, so I added the features of metpass into mpg.
I have spent a lot of time refining the interface, and although there are at
least 5 other programs that create metroid passwords, I truly feel that mine
is better than all of them. The one thing that it doesn't have that one of
the others does is a reference map for where each item, red door, energy
tank, and missile container is. It is written in Flash and will run in a
web browser if you have the Flash plugin. You can find it at
http://www.geocities.com/passgens/pa...d/metflash.htm. Despite his
nice map, I still feel I have a better overall program.
If you would like to use mpg, it is available for download at
http://games.technoplaza.net/mpg/. It is free software under the GNU General
Public License, comes with full source, and runs on nearly every platform.
-------------------------------------------------------------------------------
| 6.0 Credits & Acknowledgments
-------------------------------------------------------------------------------
While I have learned a great deal on my own about the password format used in
Metroid, much of my information comes originally from others. I will try to
acknowledge everyone who has lead to the creation of this document here.
SnoBro (aka Kent Hansen)
Creator of SnoBro's Metroid Password Generator (MetCode) and MetEdit, an
editor for Metroid ROMs. He did the original work on Metroid and learned
the checksum and shift byte meanings, along with decoding the Metroid
alphabet. I'm 99% positive that every Metroid password generator owes its
existence to SnoBro and the original data he shared in his readme and
source code. This include mpg. Thanks SnoBro!
tapper (aka Sebastian Pettersson)
Creator of metpass, a checksum generation utility that helps turn strings
of words into valid Metroid passwords. His program inspired me to improve
mpg beyond what I had originally envisioned and his readme contained
information that helped me learn more about the password format.
Xodnizel
Creator of FCEU, an NES emulator with a debugger. I was able to confirm
many of my theories about the password data using the debugger in FCEU.
-------------------------------------------------------------------------------
| 7.0 Contact Information
-------------------------------------------------------------------------------
The author (John Ratliff) can be contacted at
webmaster [AT] technoplaza [DOT] net. Replace as necessary.
I can also be reached via an online feedback form at
http://www.technoplaza.net/feedback.php