in src/generic/nca_d.c [433:476]
int crypt_packD(unsigned char in)
{
int out;
int type = 0;
if (in < 48) {
type = 1;
out = (int) in;
}
else if (in <= 57) {
out = ((int) in - 48);
}
else if (in < 65) {
type = 1;
out = ((int) in - 10);
}
else if (in <= 86) {
out = ((int) in - 55);
}
else if (in <= 90) {
type = 4;
out = ((int) in - 33);
}
else if (in < 97) {
type = 4;
out = ((int) in - 60);
}
else if (in <= 122) {
out = ((int) in - 65);
}
else if (in <= 173) {
type = 2;
out = ((int) in - 123);
}
else if (in <= 224) {
type = 3;
out = ((int) in - 167);
}
else {
type = 4;
out = ((int) in - 225);
}
out += 256 * type;
return out;
}