private MemHandle ResHandle(uint id)
{
if ((id >> 16) == 0x0405)
id = _srIdList[id & 0xFFFF];
byte cluster = (byte)((id >> 24) - 1);
byte group = (byte)(id >> 16);
// There is a known case of reading beyond array boundaries when trying to use
// portuguese subtitles (cluster file 2, group 6) with a version that does not
// contain subtitles for this languages (i.e. has only 6 languages and not 7).
if (cluster >= _prj.noClu || group >= _prj.clu[cluster].noGrp)
return null;
return _prj.clu[cluster].grp[group].resHandle[id & 0xFFFF];
}