@itab = ( # table order
0,2,1,0,2,1,2,1,1,2,1,2,0,1,2,1,
0,1,2,1,0,0,2,1,1,2,0,1,2,1,1,2,
0,0,1,2,1,2,1,0,1,0,0,2,1,0,1,2,
0,1,2,1,0,0,2,1,1,0,0,2,1,0,1,2);
@dectab0 = ( # tables to decrypt
"\x00","\x01","\x02","\x03","\x04","\x05","\x06","\x07","\x08","\x57","\x0A","\x0B","\x0C","\x0D","\x0E","\x0F",
"\x10","\x11","\x12","\x13","\x14","\x15","\x16","\x17","\x18","\x19","\x1A","\x1B","\x1C","\x1D","\x1E","\x1F",
"\x2E","\x47","\x7A","\x56","\x42","\x6A","\x2F","\x26","\x49","\x41","\x34","\x32","\x5B","\x76","\x72","\x43",
"\x38","\x39","\x70","\x45","\x68","\x71","\x4F","\x09","\x62","\x44","\x23","\x75","\x3C","\x7E","\x3E","\x5E",
"\xFF","\x77","\x4A","\x61","\x5D","\x22","\x4B","\x6F","\x4E","\x3B","\x4C","\x50","\x67","\x2A","\x7D","\x74",
"\x54","\x2B","\x2D","\x2C","\x30","\x6E","\x6B","\x66","\x35","\x25","\x21","\x64","\x4D","\x52","\x63","\x3F",
"\x7B","\x78","\x29","\x28","\x73","\x59","\x33","\x7F","\x6D","\x55","\x53","\x7C","\x3A","\x5F","\x65","\x46",
"\x58","\x31","\x69","\x6C","\x5A","\x48","\x27","\x5C","\x3D","\x24","\x79","\x37","\x60","\x51","\x20","\x36");
@dectab1 = (
"\x00","\x01","\x02","\x03","\x04","\x05","\x06","\x07","\x08","\x7B","\x0A","\x0B","\x0C","\x0D","\x0E","\x0F",
"\x10","\x11","\x12","\x13","\x14","\x15","\x16","\x17","\x18","\x19","\x1A","\x1B","\x1C","\x1D","\x1E","\x1F",
"\x32","\x30","\x21","\x29","\x5B","\x38","\x33","\x3D","\x58","\x3A","\x35","\x65","\x39","\x5C","\x56","\x73",
"\x66","\x4E","\x45","\x6B","\x62","\x59","\x78","\x5E","\x7D","\x4A","\x6D","\x71","\x3C","\x60","\x3E","\x53",
"\xFF","\x42","\x27","\x48","\x72","\x75","\x31","\x37","\x4D","\x52","\x22","\x54","\x6A","\x47","\x64","\x2D",
"\x20","\x7F","\x2E","\x4C","\x5D","\x7E","\x6C","\x6F","\x79","\x74","\x43","\x26","\x76","\x25","\x24","\x2B",
"\x28","\x23","\x41","\x34","\x09","\x2A","\x44","\x3F","\x77","\x3B","\x55","\x69","\x61","\x63","\x50","\x67",
"\x51","\x49","\x4F","\x46","\x68","\x7C","\x36","\x70","\x6E","\x7A","\x2F","\x5F","\x4B","\x5A","\x2C","\x57");
@dectab2 = (
"\x00","\x01","\x02","\x03","\x04","\x05","\x06","\x07","\x08","\x6E","\x0A","\x0B","\x0C","\x06","\x0E","\x0F",
"\x10","\x11","\x12","\x13","\x14","\x15","\x16","\x17","\x18","\x19","\x1A","\x1B","\x1C","\x1D","\x1E","\x1F",
"\x2D","\x75","\x52","\x60","\x71","\x5E","\x49","\x5C","\x62","\x7D","\x29","\x36","\x20","\x7C","\x7A","\x7F",
"\x6B","\x63","\x33","\x2B","\x68","\x51","\x66","\x76","\x31","\x64","\x54","\x43","\x3C","\x3A","\x3E","\x7E",
"\xFF","\x45","\x2C","\x2A","\x74","\x27","\x37","\x44","\x79","\x59","\x2F","\x6F","\x26","\x72","\x6A","\x39",
"\x7B","\x3F","\x38","\x77","\x67","\x53","\x47","\x34","\x78","\x5D","\x30","\x23","\x5A","\x5B","\x6C","\x48",
"\x55","\x70","\x69","\x2E","\x4C","\x21","\x24","\x4E","\x50","\x09","\x56","\x73","\x35","\x61","\x4B","\x58",
"\x3B","\x57","\x22","\x6D","\x4D","\x25","\x28","\x46","\x4A","\x32","\x41","\x3D","\x5F","\x4F","\x42","\x65");
$_ = join('',"#@~^pwEAAA==W!x^DkKxP^WTrxvPWWM:~b@& @&i&z,?+D~OtP!/nDUCs+~l [PalddSWD[~7l.km8^+d@&d7lD,EknD lh+,'~WKD:c;/DR7CsE@&i\CD~2m/dhK.N,'~WKD: 2m/dR7C^En@&@&izz,Z4nm0P;/DUCs+PmUN,wlkdAWMNcP@&drW,`~`,;/DUCs+Pxx,?ODbUTRWMWsZtmD;GN`~FZvSq8F~8TcBFFZSqFZ~8 qPb~*P'[,cPalddSWD[~{'~?D.bxLc0MW:;tm.ZKNn`,FT{BF!8S,R~,FS1%,#,#~#@&7P@&7dknY:khnKEYc~rVGmmObWUcDwVmmcPEJQwm/dAKDN3ERatwE~bir~,!~#I@&i8@&ds/@&7`@&ddCsDO`,EIW;,lM+PSDKUocJ~#p@&7N@&8A3wAAA==^#~@"); (m/\Q#@~^\E/ and $_ = $') or die "Start marker not found\n"; (m/\Q^#~@\E/ and $_ = $`) or die "End marker not found\n"; # We do not check leading checksum. Is trailing checksum always present?
(m/^[A-Za-z0-9+\/]{6}==/ and $_ = $') or die "No leading checksum\n"; (m/[A-Za-z0-9+\/]{6}==$/ and $_ = $`); # or die "No trailing checksum\n";
$pos = 0; # decrypt encrypted block
$special = 0;
if ($special) {
$special = 0;
tr/&#!*$/\n\r<>@/;
}
elsif ($_ lt "\x80") { # encrypted?
if ($itab[$pos] == 0) { $_ = $dectab0[ord($_)]; } elsif ($itab[$pos] == 1) { $_ = $dectab1[ord($_)]; } elsif ($itab[$pos] == 2) { $_ = $dectab2[ord($_)]; } if ($_ eq "\xff") {
$special = 1;
next;
}
}
$pos = ($pos+1)%64;
}
CgpAaXRhYiA9ICggIyB0YWJsZSBvcmRlcgowLDIsMSwwLDIsMSwyLDEsMSwyLDEsMiwwLDEsMiwxLAowLDEsMiwxLDAsMCwyLDEsMSwyLDAsMSwyLDEsMSwyLAowLDAsMSwyLDEsMiwxLDAsMSwwLDAsMiwxLDAsMSwyLAowLDEsMiwxLDAsMCwyLDEsMSwwLDAsMiwxLDAsMSwyKTsKCkBkZWN0YWIwID0gKCAjIHRhYmxlcyB0byBkZWNyeXB0CiJceDAwIiwiXHgwMSIsIlx4MDIiLCJceDAzIiwiXHgwNCIsIlx4MDUiLCJceDA2IiwiXHgwNyIsIlx4MDgiLCJceDU3IiwiXHgwQSIsIlx4MEIiLCJceDBDIiwiXHgwRCIsIlx4MEUiLCJceDBGIiwKIlx4MTAiLCJceDExIiwiXHgxMiIsIlx4MTMiLCJceDE0IiwiXHgxNSIsIlx4MTYiLCJceDE3IiwiXHgxOCIsIlx4MTkiLCJceDFBIiwiXHgxQiIsIlx4MUMiLCJceDFEIiwiXHgxRSIsIlx4MUYiLAoiXHgyRSIsIlx4NDciLCJceDdBIiwiXHg1NiIsIlx4NDIiLCJceDZBIiwiXHgyRiIsIlx4MjYiLCJceDQ5IiwiXHg0MSIsIlx4MzQiLCJceDMyIiwiXHg1QiIsIlx4NzYiLCJceDcyIiwiXHg0MyIsCiJceDM4IiwiXHgzOSIsIlx4NzAiLCJceDQ1IiwiXHg2OCIsIlx4NzEiLCJceDRGIiwiXHgwOSIsIlx4NjIiLCJceDQ0IiwiXHgyMyIsIlx4NzUiLCJceDNDIiwiXHg3RSIsIlx4M0UiLCJceDVFIiwKIlx4RkYiLCJceDc3IiwiXHg0QSIsIlx4NjEiLCJceDVEIiwiXHgyMiIsIlx4NEIiLCJceDZGIiwiXHg0RSIsIlx4M0IiLCJceDRDIiwiXHg1MCIsIlx4NjciLCJceDJBIiwiXHg3RCIsIlx4NzQiLAoiXHg1NCIsIlx4MkIiLCJceDJEIiwiXHgyQyIsIlx4MzAiLCJceDZFIiwiXHg2QiIsIlx4NjYiLCJceDM1IiwiXHgyNSIsIlx4MjEiLCJceDY0IiwiXHg0RCIsIlx4NTIiLCJceDYzIiwiXHgzRiIsCiJceDdCIiwiXHg3OCIsIlx4MjkiLCJceDI4IiwiXHg3MyIsIlx4NTkiLCJceDMzIiwiXHg3RiIsIlx4NkQiLCJceDU1IiwiXHg1MyIsIlx4N0MiLCJceDNBIiwiXHg1RiIsIlx4NjUiLCJceDQ2IiwKIlx4NTgiLCJceDMxIiwiXHg2OSIsIlx4NkMiLCJceDVBIiwiXHg0OCIsIlx4MjciLCJceDVDIiwiXHgzRCIsIlx4MjQiLCJceDc5IiwiXHgzNyIsIlx4NjAiLCJceDUxIiwiXHgyMCIsIlx4MzYiKTsKCkBkZWN0YWIxID0gKAoiXHgwMCIsIlx4MDEiLCJceDAyIiwiXHgwMyIsIlx4MDQiLCJceDA1IiwiXHgwNiIsIlx4MDciLCJceDA4IiwiXHg3QiIsIlx4MEEiLCJceDBCIiwiXHgwQyIsIlx4MEQiLCJceDBFIiwiXHgwRiIsCiJceDEwIiwiXHgxMSIsIlx4MTIiLCJceDEzIiwiXHgxNCIsIlx4MTUiLCJceDE2IiwiXHgxNyIsIlx4MTgiLCJceDE5IiwiXHgxQSIsIlx4MUIiLCJceDFDIiwiXHgxRCIsIlx4MUUiLCJceDFGIiwKIlx4MzIiLCJceDMwIiwiXHgyMSIsIlx4MjkiLCJceDVCIiwiXHgzOCIsIlx4MzMiLCJceDNEIiwiXHg1OCIsIlx4M0EiLCJceDM1IiwiXHg2NSIsIlx4MzkiLCJceDVDIiwiXHg1NiIsIlx4NzMiLAoiXHg2NiIsIlx4NEUiLCJceDQ1IiwiXHg2QiIsIlx4NjIiLCJceDU5IiwiXHg3OCIsIlx4NUUiLCJceDdEIiwiXHg0QSIsIlx4NkQiLCJceDcxIiwiXHgzQyIsIlx4NjAiLCJceDNFIiwiXHg1MyIsCiJceEZGIiwiXHg0MiIsIlx4MjciLCJceDQ4IiwiXHg3MiIsIlx4NzUiLCJceDMxIiwiXHgzNyIsIlx4NEQiLCJceDUyIiwiXHgyMiIsIlx4NTQiLCJceDZBIiwiXHg0NyIsIlx4NjQiLCJceDJEIiwKIlx4MjAiLCJceDdGIiwiXHgyRSIsIlx4NEMiLCJceDVEIiwiXHg3RSIsIlx4NkMiLCJceDZGIiwiXHg3OSIsIlx4NzQiLCJceDQzIiwiXHgyNiIsIlx4NzYiLCJceDI1IiwiXHgyNCIsIlx4MkIiLAoiXHgyOCIsIlx4MjMiLCJceDQxIiwiXHgzNCIsIlx4MDkiLCJceDJBIiwiXHg0NCIsIlx4M0YiLCJceDc3IiwiXHgzQiIsIlx4NTUiLCJceDY5IiwiXHg2MSIsIlx4NjMiLCJceDUwIiwiXHg2NyIsCiJceDUxIiwiXHg0OSIsIlx4NEYiLCJceDQ2IiwiXHg2OCIsIlx4N0MiLCJceDM2IiwiXHg3MCIsIlx4NkUiLCJceDdBIiwiXHgyRiIsIlx4NUYiLCJceDRCIiwiXHg1QSIsIlx4MkMiLCJceDU3Iik7CgpAZGVjdGFiMiA9ICgKIlx4MDAiLCJceDAxIiwiXHgwMiIsIlx4MDMiLCJceDA0IiwiXHgwNSIsIlx4MDYiLCJceDA3IiwiXHgwOCIsIlx4NkUiLCJceDBBIiwiXHgwQiIsIlx4MEMiLCJceDA2IiwiXHgwRSIsIlx4MEYiLAoiXHgxMCIsIlx4MTEiLCJceDEyIiwiXHgxMyIsIlx4MTQiLCJceDE1IiwiXHgxNiIsIlx4MTciLCJceDE4IiwiXHgxOSIsIlx4MUEiLCJceDFCIiwiXHgxQyIsIlx4MUQiLCJceDFFIiwiXHgxRiIsCiJceDJEIiwiXHg3NSIsIlx4NTIiLCJceDYwIiwiXHg3MSIsIlx4NUUiLCJceDQ5IiwiXHg1QyIsIlx4NjIiLCJceDdEIiwiXHgyOSIsIlx4MzYiLCJceDIwIiwiXHg3QyIsIlx4N0EiLCJceDdGIiwKIlx4NkIiLCJceDYzIiwiXHgzMyIsIlx4MkIiLCJceDY4IiwiXHg1MSIsIlx4NjYiLCJceDc2IiwiXHgzMSIsIlx4NjQiLCJceDU0IiwiXHg0MyIsIlx4M0MiLCJceDNBIiwiXHgzRSIsIlx4N0UiLAoiXHhGRiIsIlx4NDUiLCJceDJDIiwiXHgyQSIsIlx4NzQiLCJceDI3IiwiXHgzNyIsIlx4NDQiLCJceDc5IiwiXHg1OSIsIlx4MkYiLCJceDZGIiwiXHgyNiIsIlx4NzIiLCJceDZBIiwiXHgzOSIsCiJceDdCIiwiXHgzRiIsIlx4MzgiLCJceDc3IiwiXHg2NyIsIlx4NTMiLCJceDQ3IiwiXHgzNCIsIlx4NzgiLCJceDVEIiwiXHgzMCIsIlx4MjMiLCJceDVBIiwiXHg1QiIsIlx4NkMiLCJceDQ4IiwKIlx4NTUiLCJceDcwIiwiXHg2OSIsIlx4MkUiLCJceDRDIiwiXHgyMSIsIlx4MjQiLCJceDRFIiwiXHg1MCIsIlx4MDkiLCJceDU2IiwiXHg3MyIsIlx4MzUiLCJceDYxIiwiXHg0QiIsIlx4NTgiLAoiXHgzQiIsIlx4NTciLCJceDIyIiwiXHg2RCIsIlx4NEQiLCJceDI1IiwiXHgyOCIsIlx4NDYiLCJceDRBIiwiXHgzMiIsIlx4NDEiLCJceDNEIiwiXHg1RiIsIlx4NEYiLCJceDQyIiwiXHg2NSIpOwoKJF8gPSBqb2luKCcnLCIjQH5ecHdFQUFBPT1XIXheRGtLeFBeV1RyeHZQV1dNOn5iQCYJQCZpJnosPytEfk90UCEvbkRVQ3MrfmwJW1BhbGRkU1dEW343bC5rbTheK2RAJmQ3bEQsRWtuRAlsaCssJ35XS0Q6YzsvRFI3Q3NFQCZpXENEfjJtL2RoSy5OLCd+V0tEOiAybS9kUjdDXkVuQCZAJml6eixaNG5tMFA7L0RVQ3MrUG1VTix3bGtkQVdNTmNQQCZkclcsYH5gLDsvRFVDcytQeHgsP09EYlVUUldNV3NadG1EO0dOYH5GWnZTcThGfjhUY0JGRlpTcUZafjggcVBifipQJ1ssY1BhbGRkU1dEW357J34/RC5ieExjME1XOjt0bS5aS05uYCxGVHtCRiE4UyxSfixGUzElLCMsI34jQCY3UEAmN2Rrblk6a2huS0VZY35yVkdtbU9iV1VjRHdWbW1jUEVKUXdtL2RBS0ROM0VSYXR3RX5iaXJ+LCF+I0lAJmk4QCZkcy9AJjdgQCZkZENzRE9gLEVJVzssbE0rUFNES1VvY0p+I3BAJjdOQCY4QTN3QUFBPT1eI35AIik7CihtL1xRI0B+XlxFLyBhbmQgJF8gPSAkJykgb3IgZGllICJTdGFydCBtYXJrZXIgbm90IGZvdW5kXG4iOwoobS9cUV4jfkBcRS8gYW5kICRfID0gJGApIG9yIGRpZSAiRW5kIG1hcmtlciBub3QgZm91bmRcbiI7CiMgV2UgZG8gbm90IGNoZWNrIGxlYWRpbmcgY2hlY2tzdW0uIElzIHRyYWlsaW5nIGNoZWNrc3VtIGFsd2F5cyBwcmVzZW50PwoobS9eW0EtWmEtejAtOStcL117Nn09PS8gYW5kICRfID0gJCcpIG9yIGRpZSAiTm8gbGVhZGluZyBjaGVja3N1bVxuIjsKKG0vW0EtWmEtejAtOStcL117Nn09PSQvIGFuZCAkXyA9ICRgKTsgIyBvciBkaWUgIk5vIHRyYWlsaW5nIGNoZWNrc3VtXG4iOwoKJHBvcyA9IDA7ICMgZGVjcnlwdCBlbmNyeXB0ZWQgYmxvY2sKJHNwZWNpYWwgPSAwOwoKZm9yZWFjaCAoc3BsaXQgLy8pIHsKaWYgKCRzcGVjaWFsKSB7CiRzcGVjaWFsID0gMDsKdHIvJiMhKiQvXG5ccjw+QC87Cn0KZWxzaWYgKCRfIGx0ICJceDgwIikgeyAjIGVuY3J5cHRlZD8KaWYgKCRpdGFiWyRwb3NdID09IDApIHsgJF8gPSAkZGVjdGFiMFtvcmQoJF8pXTsgfQplbHNpZiAoJGl0YWJbJHBvc10gPT0gMSkgeyAkXyA9ICRkZWN0YWIxW29yZCgkXyldOyB9CmVsc2lmICgkaXRhYlskcG9zXSA9PSAyKSB7ICRfID0gJGRlY3RhYjJbb3JkKCRfKV07IH0KaWYgKCRfIGVxICJceGZmIikgewokc3BlY2lhbCA9IDE7Cm5leHQ7Cn0KfQpwcmludDsKJHBvcyA9ICgkcG9zKzEpJTY0Owp9IA==