├── README.md ├── start.py └── zhangdama ├── README.md ├── decrypt.py ├── geetest.py ├── img_locate.py ├── rea_handle.py ├── requirements.txt ├── result.png ├── run.py ├── start.py ├── t_dict.pkl └── trace_.py /README.md: -------------------------------------------------------------------------------- 1 | # smzdm 2 | 什么值得买模拟登陆,签到,非selenium 3 | 4 | 1) 使用了 https://github.com/Kevin-Cherish/geetest 的极验破解代码 5 | 2) 抓包获取 RSA的公钥破解 6 | 3) 在 start.py 输入自己的用户名和密码就可以登陆。 7 | -------------------------------------------------------------------------------- /start.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Time : 2020-03-06 15:19 4 | Author : Yaodi 5 | Object : 6 | """ 7 | from zhangdama.start import get_geetest_challenge 8 | 9 | if __name__ == '__main__': 10 | get_geetest_challenge(username="yaorUserName", password="yourPassword") -------------------------------------------------------------------------------- /zhangdama/README.md: -------------------------------------------------------------------------------- 1 | # geetest-v2 2 | 滑动验证码 纯python实现 如果对你有用给个star哦🌟 3 | 4 | 5 | w参数破解:💗AES(JSON.stringify(Z9S)) + RSA()💗 6 | 7 | 8 | 9 | 发送方创建一个AES私钥,并对这个私钥通过RSA进行加密。 10 | ## 文件说明 11 | trace.py 轨迹 12 | run.py 主程序 13 | decrypt.py 解密模块 14 | 15 | 16 | ## **RSA**: 17 | - n : "00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81" 18 | - e : "10001" 19 | - pkcs1 pad 20 | 21 | 22 | 23 | ## 轨迹数组[[x, y, t]...] 24 | - x 25 | - y 26 | - t 拖动滑块时间 27 | 28 | ## JSON字符串 29 | - userresponse: function(distance, challege) 30 | - aa: function(轨迹数组arr,s) 31 | - passtime: 轨迹数组[-1][-1] 32 | - imgload : 图片加载时间,随机值 33 | - ep : 版本号 34 | - rp : MD5(gt, challenge, passtime) 35 | 36 | 37 | ## AES: 38 | - 随机创建128bit的密钥 39 | - JSon字符串 40 | - 初始iv 0000000000000000 41 | - pkcs7 pad 42 | 43 | 44 | ## 运行结果 45 | ![运行结果](/zhangdama/result.png) 46 | 本代码库提供的轨迹可能forbidden,不是全部有效。 47 | 48 | ### 第一种方法可自行修改trace.py文件的轨迹生成函数。 49 | 轨迹是一个[[x, y,t],[x2, y2, t2]...]的数组。自己构造轨迹函数时需要注意以下几点 50 | - 第一组数组[-x, -y, 0] 前两个值为负值,大概在-15到-25之间 51 | - 第二组数组[0, 0, 0] 52 | - 每一组的最后一个元素是t,是递增的。 53 | - x是拖动距离(0~distance),随机值,但是最后一个数组元素[x, y, t] x为缺口距离distance,t为通过时间passtime 54 | - y是拖动过程中鼠标上下波动。在[-3, 3]之间 55 | 56 | ### 第二种方法 手动滑动滑块,把你手动滑动的滑块数据记录下来取代文件中的数据。 57 | - [ 点击这里](https://github.com/Kevin-Cherish/geetest/issues/3) 58 | 59 | ## 联系我 60 | - 欢迎反馈! 61 | - My Email : cherish_kevin@163.com 62 | 63 | ## 注意: 64 | - 本项目仅用于学习和交流 65 | > 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远 66 | -------------------------------------------------------------------------------- /zhangdama/decrypt.py: -------------------------------------------------------------------------------- 1 | from Crypto.Cipher import AES 2 | from Crypto.Util.Padding import pad 3 | import binascii, json, os 4 | import random 5 | import hashlib 6 | import rsa 7 | 8 | 9 | class Encrypyed(): 10 | def __init__(self): 11 | self.modulus = "00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81" 12 | self.pub_key = '10001' 13 | 14 | def encrypted_request(self, initData, userresponse, passtime, aa): 15 | # md5 加密 16 | hash = hashlib.md5() 17 | hash.update(bytes(initData['gt'], encoding='utf-8')) 18 | hash.update(bytes(initData['challenge'][0:32], encoding='utf-8')) 19 | hash.update(bytes(str(passtime), encoding='utf-8')) 20 | text = { 21 | "userresponse": userresponse, 22 | "passtime": passtime, 23 | "imgload": random.randint(100, 800), 24 | "aa": aa, 25 | "ep": {"v": "6.0.9"}, 26 | 'rp': hash.hexdigest() 27 | } 28 | text = json.dumps(text, separators=(',', ':')) 29 | sec_key = self.create_secret_key(8) 30 | # rsa 不对称性对 aes的密钥进行加密 31 | enc_sec_key = self.rsa_encrpt(sec_key, self.pub_key, self.modulus) 32 | 33 | # aes 对称加密 进行轨迹加密 34 | iv = b"0000000000000000" 35 | enc_text = self.aes_encrypt(text, sec_key.decode('utf-8'), iv) 36 | array = [] 37 | for byte in enc_text: 38 | array.append(byte) 39 | 40 | enc_text = self.bytes_to_string(array) 41 | # print(enc_text) 42 | data = { 43 | 'gt': initData['gt'], 44 | 'challenge': initData['challenge'], 45 | 'w': enc_text + enc_sec_key, 46 | # 'callback': 'geetest_' + str(int(time.time() * 1000)), 47 | } 48 | return data 49 | 50 | def aes_encrypt(self, text, secKey, iv, style='pkcs7'): 51 | """ 52 | :param text: 文本 53 | :param secKey: 密钥 54 | :param iv: 初始iv bytes 55 | :param style: 返回函数类型 56 | :return: 57 | """ 58 | encryptor = AES.new(secKey.encode('utf-8'), AES.MODE_CBC, iv) 59 | pad_pkcs7 = pad(text.encode('utf-8'), AES.block_size, style=style) 60 | ciphertext = encryptor.encrypt(pad_pkcs7) 61 | return ciphertext 62 | 63 | def rsa_encrpt(self, text, pubKey, modulus): 64 | ''' 65 | 对text 进行rsa加密 # reverseText^pubKey%modulus 66 | ''' 67 | PublicKey = rsa.PublicKey(int(modulus, 16), int(pubKey, 16)) # rsa库公钥形式 68 | rs = rsa.encrypt(text, PublicKey) 69 | return rs.hex() 70 | 71 | def create_secret_key(self, size): 72 | # 作用是返回的二进制数据的十六进制表示。每一个字节的数据转换成相应的2位十六进制表示 73 | return binascii.hexlify(os.urandom(size)) 74 | 75 | def bytes_to_string(slef, enc_byte): 76 | flag = 3 77 | I9z = 3 78 | t6B = { 79 | 'wa': 7274496, 80 | 'xa': 9483264, 81 | 'ya': 19220, 82 | 'za': 235, 83 | 'r': '.' 84 | } 85 | string = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()" 86 | 87 | def da(r0B): 88 | if r0B < 0 or r0B >= len(string): 89 | return "." 90 | else: 91 | return string[r0B] 92 | 93 | def function(Q6B, x6B): 94 | a5r = 0 95 | while a5r != -1: 96 | if a5r == 1: 97 | a5r = 2 if v6B >= 0 else 4 98 | elif a5r == 0: 99 | I6B = 0 100 | v6B = 24 - 1 # t6B["Aa"] 101 | a5r = 1 102 | elif a5r == 2: 103 | if 1 == (x6B >> v6B & 1): 104 | I6B = (I6B << 1) + (Q6B >> v6B & 1) 105 | a5r = 3 106 | elif a5r == 4: 107 | return I6B 108 | elif a5r == 3: 109 | v6B -= 1 110 | a5r = 1 111 | 112 | N6B = function 113 | j6B = "" 114 | K6B = "" 115 | c6B = len(enc_byte) 116 | f6B = 0 117 | 118 | while flag != -1: 119 | if flag == 6: 120 | # 每三位为一组 246 76 179 121 | B6B = (enc_byte[f6B] << 16) + (enc_byte[f6B + 1] << 8) + enc_byte[f6B + 2] 122 | j6B += da(N6B(B6B, t6B["wa"])) + da(N6B(B6B, t6B["xa"])) + da(N6B(B6B, t6B["ya"])) + da( 123 | N6B(B6B, t6B["za"])) 124 | flag = 8 125 | elif flag == 5: 126 | flag = 6 if f6B + 2 < c6B else 9 127 | elif flag == 3: 128 | flag = 5 if f6B < c6B else 11 129 | elif flag == 8: 130 | f6B += 3 131 | flag = 3 132 | elif flag == 9: 133 | n6B = c6B % 3 134 | flag = 10 135 | elif flag == 10: 136 | if 2 == n6B: 137 | B6B = (enc_byte[f6B] << 16) + (enc_byte[f6B + 1] << 8) 138 | j6B += da(N6B(B6B, t6B["wa"])) + da(N6B(B6B, t6B["xa"])) + da(N6B(B6B, t6B["ya"])) 139 | K6B = t6B["r"] 140 | else: 141 | if 1 == n6B: 142 | B6B = enc_byte[f6B] << 16 143 | j6B += da(N6B(B6B, t6B["wa"])) + da(N6B(B6B, t6B["xa"])) 144 | K6B = t6B["r"] + t6B["r"] 145 | flag = 8 146 | elif flag == 11: 147 | tmp = { 148 | '\x72\x65\x73': j6B, 149 | '\x65\x6e\x64': K6B 150 | } 151 | return j6B + K6B 152 | -------------------------------------------------------------------------------- /zhangdama/geetest.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | import time 4 | from zhangdama import trace_ 5 | import random 6 | import os 7 | from zhangdama.img_locate import ImgProcess 8 | from zhangdama.decrypt import Encrypyed 9 | import re 10 | 11 | base_dir = os.path.dirname(__file__) 12 | headers = { 13 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36" 14 | } 15 | 16 | # 轨迹处理来自FanhuaandLuomu/geetest_break 17 | def cal_userresponse(a, b): 18 | d = [] 19 | c = b[32:] 20 | for e in range(len(c)): 21 | f = ord(str(c[e])) 22 | tmp = f - 87 if f > 57 else f - 48 23 | d.append(tmp) 24 | 25 | c = 36 * d[0] + d[1] 26 | g = int(round(a)) + c 27 | b = b[:32] 28 | 29 | i = [[], [], [], [], []] 30 | j = {} 31 | k = 0 32 | e = 0 33 | for e in range(len(b)): 34 | h = b[e] 35 | if h in j: 36 | pass 37 | else: 38 | j[h] = 1 39 | i[k].append(h) 40 | k += 1 41 | k = 0 if (k == 5) else k 42 | 43 | n = g 44 | o = 4 45 | p = "" 46 | q = [1, 2, 5, 10, 50] 47 | while n > 0: 48 | if n - q[o] >= 0: 49 | m = int(random.random() * len(i[o])) 50 | p += str(i[o][m]) 51 | n -= q[o] 52 | else: 53 | del i[o] 54 | del q[o] 55 | o -= 1 56 | return p 57 | 58 | 59 | # 由challenge+track ==> 解析得到 userresponse 和 a 60 | def get_userresponse_a(initData, track_list): 61 | # 路径需要自己拟合 62 | challenge = initData["challenge"] 63 | l = track_list[-1][0] 64 | 65 | a = fun_f(track_list) 66 | arr = [12, 58, 98, 36, 43, 95, 62, 15, 12] 67 | s = initData["s"] 68 | a = fun_u(a, arr, s) 69 | userresponse = cal_userresponse(l, challenge) 70 | return userresponse, a 71 | 72 | 73 | def fun_u(a, v1z, T1z): 74 | while not v1z or not T1z: 75 | pass 76 | else: 77 | x1z = 0 78 | c1z = a 79 | y1z = v1z[0] 80 | k1z = v1z[2] 81 | L1z = v1z[4] 82 | 83 | i1z = T1z[x1z : x1z + 2] 84 | while i1z: 85 | x1z += 2 86 | n1z = int(i1z, 16) 87 | M1z = chr(n1z) 88 | I1z = (y1z * n1z * n1z + k1z * n1z + L1z) % len(a) 89 | c1z = c1z[0:I1z] + M1z + c1z[I1z:] # 插入一个值 90 | i1z = T1z[x1z : x1z + 2] 91 | return c1z 92 | 93 | 94 | # 计算每次间隔 相当于c函数 95 | def fun_c(a): 96 | g = [] 97 | e = [] 98 | f = 0 99 | for h in range(len(a) - 1): 100 | b = int(round(a[h + 1][0] - a[h][0])) 101 | c = int(round(a[h + 1][1] - a[h][1])) 102 | d = int(round(a[h + 1][2] - a[h][2])) 103 | g.append([b, c, d]) 104 | 105 | if b == c == d == 0: 106 | pass 107 | else: 108 | if b == c == 0: 109 | f += d 110 | else: 111 | e.append([b, c, d + f]) 112 | f = 0 113 | if f != 0: 114 | e.append([b, c, f]) 115 | return e 116 | 117 | 118 | def fun_e(item): # 相当于e函数 119 | b = [[1, 0], [2, 0], [1, -1], [1, 1], [0, 1], [0, -1], [3, 0], [2, -1], [2, 1]] 120 | c = "stuvwxyz~" 121 | for i, t in enumerate(b): 122 | if t == item[:2]: 123 | return c[i] 124 | return 0 125 | 126 | 127 | def fun_d(a): 128 | b = "()*,-./0123456789:?@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqr" 129 | c = len(b) 130 | d = "" 131 | e = abs(a) 132 | f = int(e / c) 133 | if f >= c: 134 | f = c - 1 135 | if f > 0: 136 | d = b[f] 137 | e %= c 138 | g = "" 139 | if a < 0: 140 | g += "!" 141 | if d: 142 | g += "$" 143 | return g + d + b[e] 144 | 145 | 146 | def fun_f(track_list): 147 | skip_list = fun_c(track_list) 148 | g, h, i = [], [], [] 149 | for j in range(len(skip_list)): 150 | b = fun_e(skip_list[j]) 151 | if b: 152 | h.append(b) 153 | else: 154 | g.append(fun_d(skip_list[j][0])) 155 | h.append(fun_d(skip_list[j][1])) 156 | i.append(fun_d(skip_list[j][2])) 157 | return "".join(g) + "!!" + "".join(h) + "!!" + "".join(i) 158 | 159 | 160 | def get_new_challenge(session, gt, challenge): 161 | url = "https://api.geetest.com/get.php" 162 | params = { 163 | "gt": gt, 164 | "challenge": challenge, 165 | "offline": "false", 166 | "new_captcha": "true", 167 | "product": "bind", 168 | "protocol": "https://", 169 | "pencil": "/static/js/pencil.1.0.3.js", 170 | "type": "slide", 171 | "path": "/static/js/geetest.6.0.9.js", 172 | "maze": "/static/js/maze.1.0.1.js", 173 | "beeline": "/static/js/beeline.1.0.1.js", 174 | "voice": "/static/js/voice.1.2.0.js", 175 | "callback": "geetest_" + str(int(time.time() * 1000)), 176 | } 177 | response = session.get(url, params=params, headers=headers).text 178 | res = re.search(r"({.*})", response[:-1]).group() 179 | res = json.loads(res) 180 | return res 181 | 182 | 183 | def crack(gt, challenge, referer, session): 184 | response = get_new_challenge(session, gt, challenge) 185 | challenge = response["challenge"] 186 | 187 | # 下载图片 188 | fullbg = str(time.time()) + str(random.random()) 189 | bg = str(time.time()) + str(random.random()) 190 | open(base_dir + "/Image/" + fullbg + ".jpg", "wb").write( 191 | session.get( 192 | "https://static.geetest.com/" + response["fullbg"], headers=headers 193 | ).content 194 | ) 195 | open(base_dir + "/Image/" + bg + ".jpg", "wb").write( 196 | session.get("https://static.geetest.com/" + response["bg"]).content 197 | ) 198 | 199 | # 图片处理 200 | # 代码改自 OSinoooO/bilibili_geetest 201 | img_process = ImgProcess() 202 | img1 = img_process.get_merge_image(base_dir + "/Image/" + fullbg + ".jpg") 203 | img2 = img_process.get_merge_image(base_dir + "/Image/" + bg + ".jpg") 204 | os.remove(base_dir + "/Image/" + fullbg + ".jpg") 205 | os.remove(base_dir + "/Image/" + bg + ".jpg") 206 | distance = int(img_process.get_gap(img1, img2) - 7) 207 | 208 | track = trace_.choice_track(distance) 209 | userresponse, aa = get_userresponse_a(response, track) 210 | passtime = track[-1][-1] 211 | time.sleep(1) 212 | ep = Encrypyed() 213 | params = ep.encrypted_request(response, userresponse, passtime, aa) 214 | response = session.get( 215 | "https://api.geetest.com/ajax.php", params=params, headers=headers 216 | ) 217 | print("geetest返回结果:{}".format(response.text)) 218 | try: 219 | return response.json(), challenge 220 | except: 221 | if "geetest" in response.text: 222 | text = re.sub("geetest_\d*\(", "", response.text) 223 | return json.loads(text[:-1]), challenge 224 | else: 225 | return json.loads(response.text[1:-1]), challenge 226 | -------------------------------------------------------------------------------- /zhangdama/img_locate.py: -------------------------------------------------------------------------------- 1 | """ 2 | 此文件代码来自 https://github.com/OSinoooO/bilibili_geetest/blob/master/bilibili_geetest_crack.py 3 | """ 4 | 5 | from PIL import Image 6 | 7 | 8 | class ImgProcess: 9 | location_list = [ 10 | {'y': -58, 'x': -157}, 11 | {'y': -58, 'x': -145}, 12 | {'y': -58, 'x': -265}, 13 | {'y': -58, 'x': -277}, 14 | {'y': -58, 'x': -181}, 15 | {'y': -58, 'x': -169}, 16 | {'y': -58, 'x': -241}, 17 | {'y': -58, 'x': -253}, 18 | {'y': -58, 'x': -109}, 19 | {'y': -58, 'x': -97}, 20 | {'y': -58, 'x': -289}, 21 | {'y': -58, 'x': -301}, 22 | {'y': -58, 'x': -85}, 23 | {'y': -58, 'x': -73}, 24 | {'y': -58, 'x': -25}, 25 | {'y': -58, 'x': -37}, 26 | {'y': -58, 'x': -13}, 27 | {'y': -58, 'x': -1}, 28 | {'y': -58, 'x': -121}, 29 | {'y': -58, 'x': -133}, 30 | {'y': -58, 'x': -61}, 31 | {'y': -58, 'x': -49}, 32 | {'y': -58, 'x': -217}, 33 | {'y': -58, 'x': -229}, 34 | {'y': -58, 'x': -205}, 35 | {'y': -58, 'x': -193}, 36 | {'y': 0, 'x': -145}, 37 | {'y': 0, 'x': -157}, 38 | {'y': 0, 'x': -277}, 39 | {'y': 0, 'x': -265}, 40 | {'y': 0, 'x': -169}, 41 | {'y': 0, 'x': -181}, 42 | {'y': 0, 'x': -253}, 43 | {'y': 0, 'x': -241}, 44 | {'y': 0, 'x': -97}, 45 | {'y': 0, 'x': -109}, 46 | {'y': 0, 'x': -301}, 47 | {'y': 0, 'x': -289}, 48 | {'y': 0, 'x': -73}, 49 | {'y': 0, 'x': -85}, 50 | {'y': 0, 'x': -37}, 51 | {'y': 0, 'x': -25}, 52 | {'y': 0, 'x': -1}, 53 | {'y': 0, 'x': -13}, 54 | {'y': 0, 'x': -133}, 55 | {'y': 0, 'x': -121}, 56 | {'y': 0, 'x': -49}, 57 | {'y': 0, 'x': -61}, 58 | {'y': 0, 'x': -229}, 59 | {'y': 0, 'x': -217}, 60 | {'y': 0, 'x': -193}, 61 | {'y': 0, 'x': -205} 62 | ] 63 | 64 | def get_merge_image(self, filename): 65 | """ 66 | 根据图片位置合并还原 67 | :param filename: 图片 68 | :param location: 位置 69 | :return:合并后的图片对象 70 | """ 71 | im = Image.open(filename) 72 | width, height = im.size 73 | 74 | new_im = Image.new('RGB', (260, height)) 75 | im_list_upper = [] 76 | im_list_lower = [] 77 | 78 | for location in self.location_list: 79 | if location['y'] == -58: 80 | im_list_upper.append(im.crop((abs(location['x']), height//2, abs(location['x']) + 10, height))) 81 | if location['y'] == 0: 82 | im_list_lower.append(im.crop((abs(location['x']), 0, abs(location['x']) + 10, height//2))) 83 | 84 | x_offset = 0 85 | for img in im_list_upper: 86 | new_im.paste(img, (x_offset, 0)) 87 | x_offset += img.size[0] 88 | 89 | x_offset = 0 90 | for img in im_list_lower: 91 | new_im.paste(img, (x_offset, height//2)) 92 | x_offset += img.size[0] 93 | return new_im 94 | 95 | def is_px_equal(self, img1, img2, x, y): 96 | """ 97 | 判断两个像素是否相同 98 | :param img1: 图片1 99 | :param img2:图片2 100 | :param x:位置1 101 | :param y:位置2 102 | :return:像素是否相同 103 | """ 104 | pix1 = img1.load()[x, y] 105 | pix2 = img2.load()[x, y] 106 | threshold = 60 107 | 108 | if abs(pix1[0] - pix2[0]) < threshold and abs(pix1[1] - pix2[1]) < threshold and abs( 109 | pix1[2] - pix2[2]) < threshold: 110 | return True 111 | else: 112 | return False 113 | 114 | def get_gap(self, img1, img2): 115 | """ 116 | 获取缺口偏移量 117 | :param img1: 不带缺口图片 118 | :param img2: 带缺口图片 119 | :return: 120 | """ 121 | left = 0 122 | for i in range(left, img1.size[0]): 123 | for j in range(img1.size[1]): 124 | if not self.is_px_equal(img1, img2, i, j): 125 | left = i 126 | return left 127 | return left 128 | 129 | 130 | if __name__ == '__main__': 131 | """ 132 | test 图像还原 133 | """ 134 | img_process = ImgProcess() 135 | img1 = img_process.get_merge_image('Image/' + "demo_fullbg" + '.jpg') 136 | img2 = img_process.get_merge_image('Image/' + "demo_bg" + '.jpg') 137 | img1.show() 138 | img2.show() 139 | distance = int(img_process.get_gap(img1, img2) - 7) 140 | print(distance) 141 | -------------------------------------------------------------------------------- /zhangdama/rea_handle.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Time : 2019-08-20 17:52 4 | Author : Yaodi 5 | Object : 6 | """ 7 | 8 | import base64 9 | from Crypto.PublicKey import RSA 10 | from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5 11 | 12 | 13 | def crack_pwd(pwd, pub_key): 14 | key = base64.b64decode(pub_key.encode()).decode() 15 | rsakey = RSA.importKey(key) 16 | cipher = Cipher_pkcs1_v1_5.new(rsakey) # 生成对象 17 | cipher_text = base64.b64encode(cipher.encrypt(pwd.encode(encoding="utf-8"))) # 对传递进来的用户名或密码字符串加密 18 | value = cipher_text.decode('utf8') # 将加密获取到的bytes类型密文解码成str类型 19 | return value 20 | -------------------------------------------------------------------------------- /zhangdama/requirements.txt: -------------------------------------------------------------------------------- 1 | # Requirements automatically generated by pigar. 2 | # https://github.com/damnever/pigar 3 | 4 | # img_locate.py: 5 5 | Pillow == 5.4.1 6 | 7 | # decrypt.py: 1,2 8 | # rea_handle.py: 9,10 9 | pycryptodome == 3.8.2 10 | 11 | # geetest.py: 1 12 | # start.py: 14 13 | requests == 2.21.0 14 | 15 | # decrypt.py: 6 16 | rsa == 4.0 17 | -------------------------------------------------------------------------------- /zhangdama/result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaodi962464/smzdm/6cda37a8033ee5471b69394fb4925138f9cb8ae2/zhangdama/result.png -------------------------------------------------------------------------------- /zhangdama/run.py: -------------------------------------------------------------------------------- 1 | from zhangdama import geetest 2 | 3 | 4 | def gee(session, geetest_code_url): 5 | while True: 6 | # total = total + 1 7 | geeData = session.get( 8 | geetest_code_url, 9 | headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"} 10 | ).json() 11 | # print(geeData) 12 | referer = "https://zhiyou.smzdm.com/user/login/window/" 13 | ans, challenge = geetest.crack(geeData["gt"], geeData["challenge"], referer, session) 14 | 15 | try: 16 | r = ans['validate'] 17 | return ans['validate'], geeData, challenge 18 | except KeyError: 19 | pass 20 | 21 | -------------------------------------------------------------------------------- /zhangdama/start.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Time : 2019-08-20 16:58 4 | Author : yuyuyu 5 | Object : 6 | """ 7 | # python 内置库 8 | import json 9 | import re 10 | import time 11 | import base64 12 | 13 | # python 第三方库 14 | import requests 15 | 16 | # python 项目库 17 | from zhangdama import run 18 | from zhangdama.rea_handle import crack_pwd 19 | 20 | 21 | headers = { 22 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit" 23 | "/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36", 24 | "Referer": "https://zhiyou.smzdm.com", 25 | "Accept": "text/javascript, application/javascript, " 26 | "application/ecmascript, application/x-ecmascript, */*; q=0.01", 27 | "Accept-Encoding": "gzip, deflate, br", 28 | "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", 29 | "Connection": "keep-alive", 30 | } 31 | session = requests.session() 32 | 33 | 34 | def get_geetest_challenge(username, password): 35 | geetest_code_url = "https://zhiyou.smzdm.com/user/getgeetest/captcha_init?rand=64" 36 | login_url = "https://zhiyou.smzdm.com/user/login/ajax_normal_check" 37 | checkin_url = "https://zhiyou.smzdm.com/user/checkin/jsonp_checkin?callback= &_={}".format( 38 | time.time() * 1000 39 | ) 40 | s = run.gee(session, geetest_code_url) 41 | validate, geeData, new_challenge = s 42 | # 获取公钥 43 | pub_key_url = "https://zhiyou.smzdm.com/user/login/pre" 44 | pub_key = ( 45 | session.get(pub_key_url, headers=headers).json().get("data").get("pub_key") 46 | ) 47 | # 获取密码 48 | password = crack_pwd(password, pub_key) 49 | 50 | data = { 51 | "username": base64.b64encode(username.encode()).decode(), 52 | "password": password, 53 | "rememberme": 1, 54 | "captcha": "", 55 | "redirect_to": "", 56 | "geetest_challenge": new_challenge, 57 | "geetest_validate": validate, 58 | "geetest_seccode": "{}|jordan".format(validate), 59 | } 60 | 61 | login_res = session.post(login_url, data=data, headers=headers) 62 | print("登陆结果:{}".format(login_res.json())) 63 | if login_res.json().get("error_code") != 0: 64 | print("登陆失败") 65 | return 66 | time.sleep(1) 67 | 68 | response = session.get(checkin_url, headers=headers) 69 | 70 | check_res = response.text.replace("callback(", "")[:-1] 71 | check_res_json = json.loads(check_res) 72 | res = re.findall(r".*?>(.*?)<", str(check_res_json["data"])) 73 | print("".join(res)) 74 | 75 | 76 | if __name__ == "__main__": 77 | get_geetest_challenge(username="yaorUserName", password="yourPassword") 78 | -------------------------------------------------------------------------------- /zhangdama/t_dict.pkl: -------------------------------------------------------------------------------- 1 | (dp1 2 | S'150' 3 | p2 4 | S'{-17,-18,0};{0,0,0};{2,0,194};{3,0,199};{5,0,209};{6,1,215};{8,1,231};{9,1,247};{11,1,263};{12,1,287};{14,1,303};{15,1,311};{17,1,321};{18,1,328};{19,1,343};{21,1,351};{23,1,367};{24,1,376};{25,1,383};{28,1,392};{29,1,399};{32,1,407};{35,1,415};{38,1,423};{39,1,431};{40,1,440};{42,1,447};{43,1,463};{45,1,471};{46,1,479};{49,1,487};{51,1,495};{53,1,503};{56,1,519};{58,1,527};{60,1,535};{62,1,543};{64,1,551};{66,1,559};{69,1,567};{71,1,575};{75,1,583};{78,1,591};{79,1,599};{82,1,607};{84,1,615};{85,1,623};{88,1,631};{89,1,639};{90,1,647};{91,1,655};{92,1,671};{93,1,679};{94,1,687};{95,1,704};{97,1,711};{98,1,720};{100,1,735};{101,1,743};{104,1,751};{106,1,759};{108,1,767};{109,1,775};{110,1,791};{111,1,799};{112,1,807};{113,1,832};{114,1,839};{115,1,855};{116,1,863};{118,1,871};{119,1,887};{120,1,895};{121,1,903};{122,1,919};{123,1,927};{124,1,935};{125,1,959};{126,1,967};{127,1,983};{128,1,1007};{129,1,1017};{130,1,1023};{131,1,1039};{132,1,1047};{133,1,1055};{134,1,1071};{135,1,1079};{136,1,1087};{137,1,1111};{138,1,1119};{139,1,1127};{140,1,1151};{141,1,1167};{142,1,1192};{143,1,1231};{144,1,1239};{145,1,1288};{146,1,1320};{147,1,1336};{148,1,1384};{149,1,1408};{150,1,1645};{150,1,1648};' 5 | p3 6 | sS'152' 7 | p4 8 | S'{-27,-22,0};{0,0,0};{0,0,6};{3,0,124};{5,0,132};{8,0,141};{11,0,148};{14,0,156};{16,0,164};{19,0,172};{22,0,180};{24,0,189};{26,0,196};{27,0,212};{29,0,220};{30,0,228};{31,0,236};{33,0,244};{34,0,253};{36,0,260};{38,0,269};{39,0,276};{42,0,285};{45,0,300};{46,0,308};{49,0,317};{50,0,324};{53,0,332};{54,0,340};{56,0,348};{58,0,356};{61,0,364};{63,0,371};{65,0,380};{68,0,388};{71,0,396};{75,0,404};{77,0,412};{80,0,420};{83,0,428};{84,0,436};{87,0,443};{90,0,453};{92,0,460};{94,0,469};{95,0,476};{97,0,484};{99,0,492};{100,0,501};{101,0,507};{103,0,516};{105,0,523};{108,0,532};{109,0,539};{111,0,548};{114,0,556};{116,0,564};{118,0,571};{119,0,580};{122,0,588};{123,0,596};{125,0,604};{126,0,612};{128,0,620};{129,0,629};{130,0,636};{131,0,643};{133,0,652};{135,0,676};{136,0,700};{138,0,723};{139,0,748};{140,0,764};{141,0,771};{142,0,787};{143,0,819};{144,0,835};{145,0,868};{146,0,892};{147,0,915};{148,0,939};{149,0,1003};{150,0,1020};{151,0,1035};{152,0,1125};{152,0,1260};' 9 | p5 10 | sS'155' 11 | p6 12 | S'{-11,-18,0};{0,0,0};{1,0,47};{2,0,55};{3,0,63};{4,0,79};{5,0,87};{7,0,104};{8,0,111};{9,0,127};{10,0,136};{11,0,143};{12,0,151};{13,0,159};{14,0,168};{15,0,183};{16,0,192};{18,0,199};{19,0,215};{20,0,233};{21,0,247};{22,0,279};{23,0,287};{24,0,295};{25,0,311};{26,0,319};{27,0,336};{29,0,343};{30,0,359};{33,0,367};{35,0,383};{36,0,391};{39,0,399};{40,0,407};{42,-1,415};{44,-1,423};{47,-1,431};{50,-1,439};{51,-1,447};{54,-1,455};{56,-1,463};{59,-1,471};{61,-1,479};{66,-1,487};{70,-1,495};{73,-1,504};{74,-1,511};{76,-1,519};{78,-1,527};{80,-1,535};{82,-1,551};{84,-1,559};{84,-2,567};{87,-2,575};{90,-2,583};{92,-2,591};{95,-2,599};{96,-3,607};{99,-3,615};{101,-4,623};{104,-4,632};{107,-4,639};{110,-5,647};{111,-5,655};{114,-6,663};{115,-6,671};{118,-6,679};{120,-6,687};{121,-6,695};{123,-6,703};{124,-6,711};{125,-6,719};{127,-7,735};{128,-8,743};{130,-8,759};{131,-8,775};{133,-8,791};{134,-8,807};{136,-8,832};{137,-8,855};{139,-8,879};{140,-8,919};{142,-8,943};{143,-8,967};{145,-8,983};{146,-8,1007};{148,-8,1023};{149,-8,1047};{151,-8,1071};{152,-8,1111};{154,-8,1151};{155,-8,1207};{155,-8,1391};' 13 | p7 14 | sS'154' 15 | p8 16 | S'{-17,-19,0};{0,0,0};{1,0,103};{3,0,111};{4,0,120};{7,0,128};{9,0,136};{11,0,144};{14,0,151};{15,0,160};{17,0,167};{19,0,175};{22,0,183};{23,0,192};{25,0,199};{27,0,208};{29,0,216};{32,0,224};{33,0,239};{34,0,248};{35,0,257};{36,0,263};{37,0,274};{39,0,279};{42,0,296};{43,0,306};{46,0,311};{48,0,320};{50,0,328};{53,0,337};{54,0,343};{57,0,352};{59,0,360};{62,0,368};{65,0,376};{68,0,384};{72,0,392};{75,0,399};{76,0,407};{79,0,416};{82,0,423};{84,0,431};{86,0,439};{88,0,447};{90,0,455};{93,0,463};{95,0,471};{98,0,479};{102,0,487};{105,0,495};{107,0,505};{109,0,511};{112,0,519};{113,0,527};{114,0,535};{117,0,543};{119,0,559};{120,0,567};{122,1,575};{123,1,583};{124,1,600};{126,1,607};{128,1,623};{129,1,631};{130,1,648};{131,1,655};{132,1,664};{133,1,671};{134,1,679};{135,1,687};{136,1,703};{137,2,711};{139,2,727};{141,2,743};{142,2,759};{144,2,775};{145,2,791};{146,2,807};{147,2,815};{148,2,823};{149,2,847};{150,2,863};{151,2,879};{152,2,911};{153,2,943};{154,2,983};{154,2,1159};' 17 | p9 18 | sS'156' 19 | p10 20 | S'{-25,-20,0};{0,0,0};{3,0,88};{6,0,96};{9,0,104};{13,0,112};{16,0,119};{19,1,128};{21,1,136};{24,1,144};{27,1,152};{29,1,160};{34,1,167};{35,1,176};{38,1,183};{39,1,192};{41,1,200};{43,1,208};{44,1,215};{45,1,224};{46,1,232};{47,1,240};{48,1,249};{49,1,255};{51,1,264};{52,1,271};{54,1,279};{56,1,287};{58,1,295};{59,1,307};{62,1,312};{63,1,320};{66,1,327};{69,1,336};{70,1,343};{74,1,352};{78,1,359};{81,1,367};{84,1,375};{86,1,383};{89,1,391};{92,1,399};{95,1,407};{97,1,416};{99,1,423};{102,1,433};{104,1,439};{106,1,447};{108,1,455};{109,1,464};{111,1,471};{113,1,487};{115,1,495};{117,1,506};{119,1,519};{120,1,527};{121,1,535};{123,1,551};{124,1,559};{125,1,575};{127,1,585};{129,1,599};{130,1,607};{131,1,615};{132,1,623};{133,1,639};{134,1,650};{135,1,656};{136,1,671};{138,1,687};{139,1,703};{141,1,719};{142,1,759};{144,1,775};{146,1,791};{147,1,807};{148,1,847};{149,1,863};{150,1,887};{151,1,919};{152,1,943};{153,1,975};{154,1,1448};{155,1,1464};{156,1,1535};{156,1,1752};' 21 | p11 22 | sS'67' 23 | p12 24 | S'{-17,-17,0};{0,0,0};{0,1,69};{3,1,77};{5,1,85};{8,1,93};{11,1,101};{14,1,110};{16,1,117};{19,1,125};{22,1,134};{23,1,142};{25,1,149};{26,1,158};{27,1,165};{29,1,174};{30,1,181};{32,1,191};{33,1,197};{35,1,205};{36,1,213};{37,1,222};{38,1,229};{39,1,255};{40,1,270};{41,1,278};{42,1,293};{43,1,309};{44,1,317};{46,0,334};{47,0,365};{48,0,373};{49,0,389};{51,0,413};{52,0,432};{53,0,445};{54,-1,453};{55,-1,477};{57,-1,493};{58,-1,549};{60,-1,566};{61,-1,582};{63,-1,613};{64,-1,661};{65,-2,701};{65,-3,733};{66,-3,757};{67,-3,773};{67,-3,886};' 25 | p13 26 | sS'190' 27 | p14 28 | S'{-22,-18,0};{0,0,0};{0,0,10};{0,-1,132};{1,-1,155};{4,-1,162};{5,-1,171};{7,-1,179};{8,-1,187};{11,-1,194};{14,-1,203};{17,-2,210};{19,-2,218};{23,-4,226};{25,-4,235};{27,-4,242};{30,-4,251};{32,-4,258};{34,-4,268};{37,-4,274};{41,-4,283};{43,-4,290};{45,-4,299};{48,-4,308};{51,-4,314};{53,-4,323};{56,-4,331};{59,-4,340};{61,-4,347};{64,-4,354};{66,-4,362};{67,-4,370};{70,-4,378};{71,-4,386};{74,-4,394};{77,-4,402};{79,-4,410};{82,-4,418};{84,-4,427};{86,-4,434};{89,-4,442};{92,-4,450};{93,-4,458};{96,-4,466};{99,-4,474};{101,-4,482};{104,-4,490};{106,-4,498};{109,-4,508};{112,-4,514};{114,-4,523};{115,-4,530};{118,-4,539};{120,-4,546};{123,-4,554};{126,-3,562};{128,-3,570};{130,-3,579};{133,-2,586};{134,-2,595};{137,-1,602};{139,-1,611};{140,-1,618};{142,-1,627};{144,-1,634};{145,-1,642};{147,-1,650};{148,-1,658};{150,-1,666};{151,-1,674};{153,-1,682};{154,-1,691};{155,-1,698};{157,-1,707};{158,-1,714};{160,-1,724};{161,-1,730};{163,-1,739};{164,-1,746};{165,-1,755};{167,-1,762};{168,-1,770};{170,-1,786};{171,-1,810};{173,-1,826};{174,-1,834};{175,-1,842};{176,-1,850};{177,-1,866};{178,-1,874};{179,-1,882};{180,-1,898};{181,-1,908};{182,-1,914};{183,-1,930};{184,-1,939};{185,-1,956};{185,-1,965};{185,-1,970};{185,-1,975};{185,-1,979};{186,-1,987};{187,-1,1002};{188,-1,1026};{189,-1,1082};{189,-1,1098};{189,-1,1102};{190,-1,1163};{190,-1,1285};' 29 | p15 30 | sS'60' 31 | p16 32 | S'{-18,-23,0};{0,0,0};{-1,0,103};{1,-2,118};{3,-2,127};{5,-2,136};{7,-2,143};{9,-2,150};{10,-2,159};{12,-3,166};{13,-3,175};{16,-4,182};{17,-4,191};{19,-4,198};{21,-4,207};{22,-4,214};{23,-4,223};{24,-4,230};{26,-4,240};{27,-4,255};{28,-4,271};{29,-4,278};{30,-4,287};{31,-4,303};{32,-4,310};{33,-4,319};{34,-4,406};{35,-4,414};{36,-4,439};{37,-4,447};{38,-4,455};{39,-5,462};{41,-5,478};{42,-5,494};{44,-5,519};{45,-6,536};{47,-6,558};{48,-6,583};{50,-6,606};{51,-6,631};{52,-6,638};{53,-6,646};{54,-6,662};{55,-7,678};{56,-7,687};{57,-7,710};{59,-7,742};{60,-8,782};{60,-8,919};' 33 | p17 34 | sS'164' 35 | p18 36 | S'{-22,-21,0};{0,0,0};{1,0,87};{3,0,104};{5,0,111};{7,0,119};{9,0,135};{12,0,143};{14,0,151};{17,0,159};{20,-1,167};{22,-1,175};{25,-1,183};{26,-1,191};{28,-2,199};{29,-2,208};{30,-2,215};{32,-3,223};{33,-3,231};{36,-3,240};{39,-3,247};{40,-3,256};{43,-3,263};{44,-3,272};{48,-5,279};{49,-5,295};{50,-5,304};{51,-6,310};{53,-6,319};{54,-6,328};{57,-7,336};{58,-7,344};{61,-7,352};{65,-7,360};{68,-7,368};{69,-7,376};{73,-9,384};{75,-9,392};{78,-9,400};{81,-9,408};{83,-9,416};{85,-10,423};{88,-10,432};{91,-10,440};{94,-10,448};{97,-10,456};{100,-10,464};{103,-10,472};{106,-10,480};{107,-10,488};{110,-10,495};{111,-10,505};{114,-10,511};{115,-10,521};{117,-10,527};{118,-10,536};{120,-10,543};{121,-10,559};{123,-10,568};{124,-10,575};{126,-10,584};{128,-10,591};{130,-10,600};{131,-10,607};{134,-10,616};{135,-10,623};{138,-10,632};{140,-10,648};{141,-10,656};{142,-10,672};{144,-10,680};{145,-10,688};{146,-10,704};{147,-10,711};{148,-10,720};{149,-10,727};{150,-10,736};{151,-10,744};{152,-10,759};{154,-10,775};{156,-10,800};{157,-10,816};{159,-10,840};{160,-10,856};{161,-10,881};{162,-10,912};{163,-10,935};{164,-10,1041};{164,-10,1178};' 37 | p19 38 | sS'62' 39 | p20 40 | S'{-23,-25,0};{0,0,0};{0,0,3};{1,0,126};{4,0,134};{6,0,142};{9,0,151};{13,0,158};{19,0,167};{24,0,175};{28,0,183};{31,0,190};{34,0,198};{36,0,206};{38,0,214};{39,0,222};{40,0,230};{41,0,238};{42,0,262};{43,0,270};{44,0,279};{45,0,303};{46,0,313};{47,1,319};{48,1,350};{49,1,359};{50,1,375};{51,1,399};{53,1,406};{55,1,430};{56,1,440};{56,2,447};{57,2,454};{58,2,463};{59,2,486};{61,2,510};{62,3,574};{62,3,758};' 41 | p21 42 | sS'130' 43 | p22 44 | S'{-22,-15,0};{0,0,0};{0,0,5};{1,0,144};{2,0,155};{3,0,166};{4,0,173};{6,0,180};{7,0,187};{9,-1,194};{10,-1,200};{11,-1,207};{12,-1,215};{13,-1,223};{13,-2,231};{14,-2,247};{15,-2,264};{16,-2,271};{17,-2,295};{18,-2,307};{19,-2,312};{20,-2,319};{22,-2,328};{22,-3,335};{25,-3,343};{27,-4,351};{29,-5,359};{30,-5,367};{31,-5,375};{32,-5,384};{33,-5,391};{35,-6,401};{36,-6,416};{38,-6,431};{40,-6,439};{42,-6,447};{43,-6,455};{45,-6,463};{47,-8,471};{50,-9,479};{52,-9,487};{54,-9,495};{56,-9,506};{58,-9,513};{61,-10,519};{64,-10,527};{66,-10,535};{70,-12,544};{72,-12,551};{75,-12,559};{77,-12,567};{79,-12,578};{81,-13,583};{84,-13,591};{86,-13,599};{87,-13,607};{90,-14,615};{92,-14,623};{95,-16,631};{97,-16,639};{98,-16,647};{101,-16,655};{102,-16,671};{104,-16,679};{106,-16,695};{107,-16,703};{109,-16,711};{110,-16,719};{112,-17,728};{114,-17,743};{116,-17,751};{117,-17,767};{118,-17,777};{119,-18,792};{120,-18,799};{121,-18,807};{122,-18,823};{124,-18,839};{124,-19,847};{125,-19,879};{126,-19,895};{127,-19,919};{128,-19,996};{129,-19,1023};{130,-19,1056};{130,-19,1231};' 45 | p23 46 | sS'65' 47 | p24 48 | S'{-17,-16,0};{0,0,0};{1,0,183};{2,0,208};{2,0,218};{2,0,218};{2,0,218};{2,0,219};{2,0,219};{4,0,223};{5,0,231};{6,0,247};{7,0,256};{8,0,263};{9,0,279};{10,0,287};{11,0,312};{12,0,319};{13,0,328};{14,0,335};{15,0,344};{16,0,352};{17,0,360};{19,-2,367};{21,-2,376};{22,-2,383};{24,-2,391};{25,-2,400};{27,-2,408};{28,-2,416};{31,-2,424};{33,-2,439};{34,-2,448};{35,-2,458};{36,-2,463};{38,-2,471};{40,-2,479};{42,-3,496};{44,-3,504};{46,-4,520};{47,-4,528};{48,-4,536};{50,-4,544};{52,-4,552};{54,-4,560};{56,-4,575};{57,-4,591};{58,-4,615};{59,-4,703};{60,-4,800};{61,-4,833};{62,-4,880};{63,-4,896};{64,-4,959};{65,-4,1023};{65,-4,1216};' 49 | p25 50 | sS'113' 51 | p26 52 | S'{-18,-17,0};{0,0,0};{0,0,4};{1,1,89};{4,1,105};{7,1,113};{8,1,121};{11,1,129};{14,1,137};{16,1,146};{19,1,153};{21,1,162};{23,1,169};{26,1,178};{28,1,185};{32,1,194};{34,1,201};{37,1,210};{40,1,217};{41,1,226};{43,1,233};{46,1,242};{48,1,249};{49,1,265};{51,2,274};{52,2,292};{53,2,297};{55,2,306};{58,2,313};{59,2,322};{62,2,329};{65,2,339};{66,2,346};{69,2,354};{70,2,362};{72,2,370};{73,3,377};{76,3,386};{77,3,393};{80,3,402};{82,4,409};{84,4,417};{86,4,425};{87,5,433};{89,5,441};{90,5,449};{91,5,457};{93,6,465};{94,6,473};{96,6,482};{97,6,490};{100,6,497};{101,6,506};{103,6,513};{104,6,522};{105,6,528};{106,6,537};{107,6,544};{108,6,560};{109,6,592};{110,6,608};{110,7,617};{111,8,624};{112,8,656};{113,8,704};{113,8,1090};' 53 | p27 54 | sS'165' 55 | p28 56 | S'{-28,-25,0};{0,0,0};{-1,0,55};{0,0,109};{1,0,116};{3,0,125};{5,0,133};{8,0,141};{9,0,149};{11,0,157};{12,0,165};{15,0,176};{16,0,180};{18,0,191};{19,0,196};{22,0,205};{23,0,212};{25,0,222};{26,0,228};{28,0,237};{29,0,253};{31,0,261};{32,0,269};{34,0,277};{36,0,285};{37,0,301};{40,0,309};{42,0,317};{43,-1,325};{46,-1,333};{49,-1,341};{52,-2,348};{57,-2,357};{60,-2,365};{63,-2,373};{66,-3,380};{71,-4,389};{74,-4,396};{78,-4,405};{82,-4,412};{84,-4,421};{86,-4,428};{89,-4,437};{91,-4,444};{94,-4,453};{96,-4,460};{97,-4,471};{99,-4,476};{102,-4,486};{105,-4,493};{107,-4,504};{109,-4,509};{111,-4,517};{114,-4,525};{116,-4,533};{119,-4,541};{120,-4,548};{122,-4,556};{123,-4,565};{125,-4,573};{126,-4,581};{128,-4,589};{129,-4,596};{130,-4,605};{131,-4,612};{132,-4,621};{133,-4,628};{134,-4,652};{135,-4,660};{136,-4,669};{137,-4,692};{138,-4,700};{139,-4,716};{140,-4,732};{141,-4,748};{142,-4,764};{143,-4,797};{144,-4,804};{145,-4,813};{146,-4,829};{147,-4,845};{148,-4,853};{149,-4,877};{150,-4,884};{151,-4,900};{152,-4,916};{153,-4,925};{154,-4,948};{155,-4,973};{156,-4,980};{157,-4,996};{158,-4,1012};{159,-4,1020};{160,-4,1045};{161,-4,1069};{162,-4,1076};{163,-4,1126};{164,-4,1164};{165,-4,1204};{165,-4,1367};' 57 | p29 58 | sS'68' 59 | p30 60 | S'{-26,-24,0};{0,0,0};{2,0,167};{4,0,176};{6,0,183};{7,0,192};{8,0,199};{10,0,207};{11,0,216};{12,0,224};{13,0,232};{16,0,239};{18,0,255};{20,0,263};{21,0,272};{23,0,280};{24,0,288};{26,0,303};{27,0,319};{29,0,335};{30,0,351};{32,0,367};{33,0,383};{35,0,399};{36,0,415};{38,0,431};{39,0,440};{41,0,457};{42,0,472};{44,0,495};{45,0,511};{47,0,527};{48,0,543};{50,0,567};{51,0,591};{53,0,607};{54,0,623};{56,0,639};{57,0,663};{59,0,679};{60,0,719};{62,0,759};{63,0,783};{65,0,1199};{66,0,1224};{68,0,1408};{68,0,1544};' 61 | p31 62 | sS'69' 63 | p32 64 | S'{-27,-22,0};{0,0,0};{0,0,12};{0,0,14};{0,0,15};{1,0,145};{3,0,152};{4,0,160};{5,0,168};{8,0,177};{10,0,184};{14,0,192};{17,0,200};{19,0,208};{22,0,216};{25,0,224};{27,0,232};{29,0,240};{30,0,248};{32,0,256};{34,0,264};{36,0,272};{37,0,280};{39,0,288};{41,0,296};{42,0,304};{43,0,312};{44,0,320};{45,0,328};{46,0,336};{47,0,368};{49,0,392};{50,0,400};{51,0,409};{53,0,416};{55,0,424};{56,0,440};{57,0,448};{58,0,456};{60,0,472};{61,0,480};{62,0,489};{63,0,512};{64,0,520};{65,0,536};{66,0,593};{67,0,616};{68,0,680};{69,0,768};{69,0,936};' 65 | p33 66 | sS'175' 67 | p34 68 | S'{-23,-23,0};{0,0,0};{1,0,88};{5,0,96};{6,0,104};{8,0,112};{11,1,121};{13,1,128};{15,1,136};{16,1,144};{17,2,152};{18,2,160};{19,2,168};{22,2,176};{23,2,184};{26,4,192};{28,4,201};{29,4,208};{30,4,216};{32,5,224};{33,5,232};{35,5,240};{36,5,249};{38,5,256};{40,5,264};{42,5,272};{44,5,280};{47,5,288};{49,5,297};{52,5,305};{54,5,312};{55,5,320};{58,5,328};{62,5,336};{65,5,344};{69,5,352};{74,5,360};{79,5,368};{85,5,376};{90,5,384};{97,5,392};{104,5,400};{112,5,408};{119,5,416};{123,5,424};{128,5,432};{131,5,440};{134,5,448};{136,6,456};{138,6,464};{141,6,472};{144,6,480};{146,6,488};{149,6,496};{150,6,504};{152,6,512};{153,6,520};{155,6,528};{157,6,544};{158,6,552};{160,6,568};{162,6,576};{163,6,592};{164,6,600};{165,6,616};{166,6,640};{167,6,664};{168,6,680};{169,6,736};{170,6,761};{171,6,776};{172,6,873};{173,6,896};{174,6,928};{175,7,1080};{175,7,1090};' 69 | p35 70 | sS'138' 71 | p36 72 | S'{-13,-24,0};{0,0,0};{0,-1,91};{0,-2,106};{2,-3,115};{4,-3,124};{7,-3,131};{9,-4,139};{11,-4,147};{14,-4,155};{15,-4,163};{18,-4,171};{20,-4,179};{21,-4,187};{22,-5,195};{24,-5,203};{25,-5,210};{29,-5,219};{31,-5,234};{32,-5,242};{36,-7,251};{38,-7,266};{39,-7,274};{41,-7,291};{43,-7,299};{45,-7,310};{46,-7,315};{49,-7,323};{51,-7,331};{53,-7,339};{56,-7,347};{57,-7,355};{59,-7,363};{62,-7,371};{64,-7,379};{67,-7,394};{68,-7,403};{70,-7,411};{72,-7,419};{74,-7,427};{76,-7,435};{77,-8,443};{80,-8,451};{81,-8,459};{84,-8,467};{86,-8,474};{88,-8,483};{91,-8,490};{94,-8,499};{97,-8,510};{101,-8,515};{104,-8,523};{107,-8,530};{108,-8,538};{111,-8,546};{114,-8,554};{115,-8,562};{118,-8,570};{119,-8,579};{122,-8,588};{124,-8,594};{125,-8,605};{126,-8,610};{128,-8,620};{129,-8,635};{130,-8,642};{131,-8,651};{132,-8,666};{133,-8,674};{134,-8,683};{135,-8,722};{136,-8,738};{137,-8,754};{138,-8,794};{138,-8,995};' 73 | p37 74 | sS'86' 75 | p38 76 | S'{-16,-18,0};{0,0,0};{0,0,8};{1,0,111};{3,0,119};{4,0,127};{6,0,135};{8,0,143};{11,0,150};{15,0,159};{18,0,167};{20,0,176};{22,0,183};{25,0,191};{26,0,199};{27,-1,207};{29,-1,215};{30,-1,223};{32,-1,231};{34,-1,239};{36,-1,248};{37,-1,255};{40,-2,263};{43,-2,270};{44,-2,279};{47,-4,286};{49,-4,295};{52,-4,305};{54,-4,312};{56,-4,319};{58,-4,327};{61,-4,335};{63,-4,343};{66,-4,350};{69,-4,358};{70,-4,366};{72,-4,375};{74,-4,382};{76,-4,391};{77,-4,398};{78,-4,407};{79,-4,415};{80,-4,423};{81,-4,439};{82,-4,447};{83,-4,470};{84,-4,505};{84,-5,510};{85,-5,534};{86,-5,550};{86,-5,743};' 77 | p39 78 | sS'172' 79 | p40 80 | S'{-10,-20,0};{0,0,0};{0,0,5};{1,0,117};{2,0,126};{4,0,133};{5,0,141};{8,0,149};{11,0,157};{12,0,165};{14,0,173};{16,0,181};{20,-2,189};{22,-2,205};{23,-2,213};{25,-2,221};{26,-2,230};{28,-2,237};{29,-2,246};{30,-2,253};{31,-2,262};{32,-2,269};{35,-2,278};{36,-2,293};{39,-3,306};{40,-3,312};{43,-3,318};{46,-3,325};{47,-3,333};{50,-3,341};{53,-3,348};{54,-3,358};{56,-3,365};{58,-3,373};{61,-3,381};{64,-3,389};{65,-3,397};{68,-3,405};{71,-3,413};{73,-3,421};{76,-3,429};{79,-3,437};{82,-3,445};{85,-3,453};{88,-3,461};{91,-3,469};{94,-3,477};{95,-3,485};{98,-3,493};{100,-3,506};{102,-3,512};{105,-3,519};{106,-3,525};{107,-3,532};{109,-3,542};{110,-3,548};{111,-3,557};{112,-3,564};{113,-3,580};{115,-3,589};{116,-3,597};{118,-3,605};{119,-3,612};{122,-4,621};{123,-4,628};{125,-4,638};{126,-5,645};{127,-5,653};{129,-5,660};{130,-5,669};{131,-5,677};{132,-5,685};{133,-5,693};{134,-5,708};{135,-5,717};{136,-5,732};{137,-6,748};{138,-6,757};{139,-6,765};{141,-6,780};{142,-6,789};{144,-6,812};{145,-6,829};{147,-6,845};{148,-6,870};{150,-6,887};{151,-6,909};{153,-6,949};{154,-6,973};{156,-6,996};{157,-6,1020};{159,-6,1060};{160,-6,1076};{162,-6,1109};{162,-7,1140};{163,-7,1165};{165,-7,1189};{166,-7,1220};{168,-7,1269};{169,-8,1324};{170,-9,1389};{171,-9,1445};{172,-10,1477};{172,-10,1605};' 81 | p41 82 | sS'171' 83 | p42 84 | S'{-20,-16,0};{0,0,0};{2,0,103};{4,0,111};{7,0,119};{10,0,126};{13,0,135};{16,0,142};{19,0,151};{22,0,158};{25,0,166};{27,0,174};{31,0,182};{34,0,191};{37,0,198};{39,0,206};{42,0,214};{44,0,222};{45,0,238};{48,0,246};{48,-1,255};{50,-1,263};{52,-1,271};{54,-1,279};{55,-1,287};{57,-1,295};{59,-1,305};{60,-1,310};{61,-1,320};{63,-1,326};{66,-2,335};{68,-2,342};{70,-2,352};{72,-3,358};{76,-3,368};{81,-3,374};{84,-3,384};{86,-5,391};{89,-5,399};{91,-5,406};{93,-5,416};{97,-5,422};{99,-5,431};{102,-5,439};{105,-5,447};{108,-5,455};{111,-5,463};{113,-5,471};{117,-5,479};{119,-5,487};{120,-5,494};{122,-5,505};{123,-5,510};{125,-5,519};{127,-5,535};{128,-5,542};{130,-5,558};{131,-5,567};{132,-5,576};{133,-5,583};{134,-5,590};{135,-5,599};{136,-5,622};{138,-5,630};{139,-5,646};{141,-5,654};{142,-5,663};{144,-5,679};{145,-5,687};{147,-5,710};{147,-6,718};{148,-6,727};{150,-6,743};{151,-6,759};{152,-6,782};{153,-6,790};{154,-7,798};{155,-7,814};{156,-7,822};{157,-7,838};{159,-7,846};{160,-7,870};{162,-8,894};{163,-8,918};{165,-9,935};{166,-9,976};{168,-9,1007};{169,-9,1040};{171,-9,1095};{171,-9,1223};' 85 | p43 86 | sS'170' 87 | p44 88 | S'{-19,-23,0};{0,0,0};{3,1,87};{4,1,95};{5,1,103};{8,1,112};{10,1,119};{11,1,127};{12,1,135};{14,1,144};{15,1,151};{17,1,167};{19,1,183};{20,1,192};{21,1,199};{23,1,207};{25,1,215};{27,1,223};{28,1,239};{29,1,247};{31,1,255};{32,1,271};{34,1,279};{35,1,287};{38,1,295};{40,1,304};{42,1,311};{45,1,319};{48,1,327};{50,1,335};{53,1,343};{55,1,351};{58,1,360};{60,1,367};{63,1,376};{66,1,383};{69,1,393};{72,1,399};{75,1,407};{79,1,415};{83,1,423};{87,1,431};{93,1,439};{97,1,447};{101,1,455};{104,1,463};{109,1,471};{112,1,479};{113,1,487};{115,1,495};{117,1,504};{119,1,511};{120,1,519};{122,1,527};{123,1,535};{124,1,543};{125,1,551};{127,1,559};{128,1,575};{130,1,583};{132,1,591};{134,1,607};{136,1,615};{137,1,624};{139,1,631};{140,1,639};{142,1,656};{143,1,662};{145,1,673};{146,1,678};{148,1,695};{149,1,706};{151,1,719};{152,1,727};{153,1,743};{155,1,751};{156,1,759};{158,1,775};{159,1,783};{159,1,788};{159,1,792};{159,1,795};{161,1,799};{162,1,815};{164,1,831};{165,1,847};{166,1,855};{167,1,871};{169,1,903};{169,1,916};{169,1,919};{170,1,951};{170,1,1111};' 89 | p45 90 | sS'104' 91 | p46 92 | S'{-22,-25,0};{0,0,0};{1,0,96};{3,0,112};{4,0,121};{5,0,128};{8,0,137};{11,0,144};{14,0,152};{15,0,160};{18,0,168};{20,0,176};{23,0,184};{25,0,192};{26,0,200};{29,0,208};{30,0,216};{32,0,232};{33,0,240};{34,0,248};{35,0,256};{36,0,272};{37,0,288};{38,0,296};{39,0,312};{40,0,321};{41,0,328};{42,0,337};{44,0,344};{46,0,352};{48,0,360};{50,0,376};{51,0,384};{52,0,392};{53,-1,400};{54,-1,416};{55,-1,424};{56,-1,432};{58,-1,440};{59,-1,448};{61,-1,456};{62,-1,472};{64,-1,496};{65,-1,528};{67,-1,536};{68,-1,552};{71,-1,560};{72,-1,568};{74,-1,576};{75,-1,584};{77,-1,600};{78,-1,617};{80,-1,633};{81,-1,639};{83,-1,648};{85,-1,656};{87,-1,664};{88,-1,671};{90,-1,688};{91,-1,704};{93,-1,728};{94,-1,744};{96,-1,760};{97,-1,776};{98,-1,784};{99,-1,792};{100,-1,807};{101,-2,816};{102,-2,839};{103,-2,856};{104,-2,888};{104,-2,1072};' 93 | p47 94 | sS'169' 95 | p48 96 | S'{-18,-20,0};{0,0,0};{0,0,3};{1,0,54};{2,0,70};{3,0,86};{5,0,94};{6,0,102};{8,0,111};{9,0,126};{12,0,143};{13,0,158};{15,0,166};{16,0,182};{18,0,190};{19,0,198};{21,0,207};{22,0,214};{24,0,222};{26,0,238};{27,0,246};{28,0,255};{29,0,262};{31,0,270};{33,0,286};{35,0,294};{37,0,318};{38,0,326};{39,0,334};{41,0,342};{42,0,358};{43,0,366};{44,0,374};{45,0,390};{47,0,398};{49,0,414};{51,0,423};{53,0,430};{54,0,438};{56,0,446};{58,0,454};{61,0,462};{64,0,470};{65,0,478};{67,0,486};{70,0,494};{73,0,503};{77,0,510};{79,0,519};{82,0,526};{85,0,535};{88,0,542};{92,0,552};{96,0,558};{99,0,566};{103,0,574};{108,0,582};{111,0,590};{112,0,599};{114,0,606};{116,0,614};{118,0,622};{120,0,638};{123,0,646};{126,0,654};{127,0,662};{130,0,670};{132,0,679};{134,0,686};{137,0,694};{139,0,710};{140,0,718};{143,0,726};{144,0,735};{146,0,742};{147,0,750};{150,0,758};{151,0,766};{152,0,774};{154,0,783};{155,0,799};{157,0,815};{159,0,838};{160,0,846};{161,0,854};{162,0,862};{163,0,870};{164,0,886};{165,0,902};{166,0,918};{167,0,942};{168,0,958};{169,0,998};{169,0,1222};' 97 | p49 98 | sS'49' 99 | p50 100 | S'{-18,-22,0};{0,0,0};{1,0,89};{3,0,104};{5,0,112};{6,0,121};{8,2,128};{9,2,137};{10,2,144};{12,2,153};{14,2,160};{15,2,168};{17,2,176};{19,2,186};{20,2,193};{23,2,200};{24,2,208};{26,2,216};{28,2,224};{30,2,232};{31,2,240};{33,2,248};{35,2,256};{37,2,264};{38,2,272};{39,2,288};{40,2,296};{41,2,304};{42,2,320};{43,2,328};{44,2,344};{45,2,352};{46,2,361};{47,2,376};{48,2,385};{49,2,408};{49,2,700};' 101 | p51 102 | sS'106' 103 | p52 104 | S'{-23,-21,0};{0,0,0};{2,0,119};{3,0,128};{5,0,135};{6,0,145};{8,0,152};{10,0,167};{12,0,177};{13,0,183};{15,0,193};{17,0,199};{18,0,209};{19,0,215};{20,0,224};{22,0,231};{23,0,240};{24,0,247};{26,0,255};{28,0,263};{29,0,272};{31,0,287};{32,0,295};{33,0,303};{34,0,311};{36,0,319};{38,0,327};{40,0,343};{41,0,351};{43,0,367};{45,0,375};{46,0,383};{47,0,392};{49,0,400};{52,0,409};{53,0,415};{54,0,423};{56,0,431};{57,0,442};{58,0,447};{60,0,456};{62,-1,463};{64,-1,479};{66,-1,487};{69,-1,495};{71,-1,511};{73,-1,520};{75,-1,535};{76,-1,543};{78,-1,559};{79,-1,567};{80,-1,575};{81,-1,583};{82,-1,601};{83,-1,607};{84,-1,615};{85,-1,623};{86,-1,631};{87,-1,647};{88,-1,663};{89,-1,672};{90,-1,679};{91,-1,695};{92,-1,703};{93,-1,711};{95,-2,727};{96,-2,743};{97,-2,759};{98,-3,769};{99,-3,791};{100,-3,799};{101,-3,832};{102,-3,855};{103,-4,879};{104,-4,919};{105,-4,959};{106,-4,983};{106,-4,1209};' 105 | p53 106 | sS'42' 107 | p54 108 | S'{-11,-24,0};{0,0,0};{1,0,40};{2,1,46};{4,1,55};{6,1,62};{7,1,71};{8,1,79};{9,1,87};{11,1,95};{12,1,103};{13,1,111};{14,1,118};{15,1,127};{16,1,134};{18,1,143};{20,1,158};{22,1,167};{24,1,175};{26,1,191};{28,1,200};{30,1,207};{32,1,223};{34,1,230};{35,1,255};{36,1,271};{37,1,287};{38,1,318};{39,1,326};{40,1,335};{41,1,374};{42,1,390};{42,1,505};' 109 | p55 110 | sS'178' 111 | p56 112 | S'{-20,-22,0};{0,0,0};{0,1,208};{1,1,217};{4,1,223};{6,1,233};{8,1,240};{11,1,248};{12,1,256};{13,1,265};{15,1,272};{17,1,280};{19,1,296};{21,1,304};{24,1,312};{25,1,320};{28,1,328};{30,1,336};{32,0,344};{34,0,359};{36,0,368};{38,-1,375};{39,-1,384};{41,-1,392};{44,-2,400};{48,-2,409};{52,-3,416};{54,-3,423};{57,-3,432};{62,-4,440};{64,-4,448};{66,-5,456};{70,-5,464};{73,-5,472};{75,-5,481};{78,-5,488};{82,-5,497};{83,-5,504};{86,-5,512};{89,-5,520};{90,-5,528};{93,-5,536};{96,-5,544};{97,-5,552};{99,-5,560};{101,-5,568};{103,-5,576};{104,-5,584};{106,-5,591};{107,-5,600};{110,-5,608};{111,-5,616};{114,-5,624};{115,-5,632};{117,-5,640};{118,-5,656};{121,-5,664};{122,-5,679};{124,-5,688};{126,-5,704};{127,-5,711};{128,-5,721};{129,-5,728};{132,-5,736};{133,-5,751};{134,-5,768};{137,-4,775};{138,-4,792};{139,-4,816};{140,-4,825};{141,-4,847};{142,-4,856};{143,-3,863};{144,-3,880};{146,-3,888};{147,-3,896};{149,-2,911};{150,-2,920};{152,-2,927};{154,-2,944};{155,-2,967};{157,-2,983};{158,-2,992};{159,-1,1000};{160,0,1007};{162,0,1016};{163,0,1032};{165,0,1047};{166,0,1063};{167,1,1072};{168,1,1079};{169,1,1111};{171,1,1143};{172,1,1192};{174,1,1240};{175,1,1440};{177,1,1592};{177,2,1607};{178,3,1672};{178,3,1848};' 113 | p57 114 | sS'183' 115 | p58 116 | S'{-31,-17,0};{0,0,0};{0,0,3};{2,0,126};{4,0,134};{6,0,142};{7,0,159};{9,0,166};{10,0,182};{11,0,198};{12,0,206};{13,0,230};{14,0,238};{15,0,246};{17,0,270};{18,0,279};{19,0,286};{20,0,294};{21,0,303};{22,0,310};{24,0,318};{25,0,327};{27,0,334};{29,0,343};{32,-1,350};{35,-1,359};{37,-2,366};{41,-2,375};{46,-4,382};{48,-4,390};{52,-4,398};{56,-4,407};{60,-4,414};{66,-4,423};{71,-4,430};{76,-4,438};{80,-4,446};{84,-4,456};{87,-4,462};{91,-4,470};{94,-4,478};{97,-4,486};{100,-4,494};{103,-4,503};{106,-4,510};{107,-4,518};{109,-4,526};{111,-4,534};{113,-4,543};{114,-4,550};{115,-4,558};{118,-4,566};{120,-4,576};{121,-4,582};{123,-4,594};{125,-4,598};{127,-4,608};{128,-4,614};{130,-4,624};{132,-4,630};{134,-4,638};{135,-4,646};{136,-4,654};{138,-4,662};{139,-4,678};{141,-4,687};{143,-4,702};{144,-4,719};{146,-4,726};{147,-4,743};{149,-4,750};{150,-4,768};{152,-4,775};{153,-4,782};{154,-4,798};{155,-4,806};{156,-4,814};{157,-4,822};{158,-4,830};{159,-4,839};{160,-4,854};{161,-4,862};{162,-4,870};{163,-4,888};{164,-4,894};{165,-4,903};{166,-4,926};{167,-4,936};{168,-4,943};{169,-4,967};{170,-4,974};{171,-4,990};{172,-4,1030};{173,-4,1054};{174,-4,1078};{175,-4,1127};{176,-4,1150};{177,-4,1174};{178,-4,1206};{179,-4,1232};{180,-4,1263};{181,-4,1302};{182,-4,1334};{183,-4,1350};{183,-4,1582};' 117 | p59 118 | sS'180' 119 | p60 120 | S'{-19,-19,0};{0,0,0};{1,0,136};{5,0,144};{8,0,152};{9,0,160};{12,0,168};{15,0,176};{17,0,184};{19,0,192};{23,0,200};{25,0,208};{28,0,216};{31,0,224};{32,0,232};{34,0,240};{37,0,248};{38,0,256};{39,0,264};{41,0,272};{43,0,280};{45,0,288};{46,0,296};{49,0,306};{50,0,312};{52,0,320};{53,0,328};{56,0,336};{57,0,344};{60,0,352};{64,0,360};{67,0,368};{71,0,376};{75,0,384};{80,-1,392};{84,-1,400};{87,-1,408};{91,-2,416};{96,-4,424};{98,-4,432};{102,-4,440};{106,-4,448};{110,-5,456};{114,-6,464};{118,-6,472};{123,-7,480};{126,-7,488};{130,-8,496};{133,-8,507};{135,-8,512};{138,-8,520};{139,-8,528};{141,-8,536};{142,-8,544};{144,-8,552};{145,-8,560};{146,-8,568};{147,-8,576};{148,-8,584};{149,-8,592};{150,-8,600};{151,-8,608};{153,-9,616};{154,-9,624};{155,-9,632};{156,-9,648};{157,-9,656};{158,-9,665};{159,-9,680};{160,-9,688};{161,-9,696};{162,-9,712};{163,-9,720};{164,-9,728};{166,-9,744};{167,-9,752};{169,-9,776};{170,-9,792};{172,-9,816};{173,-9,840};{175,-9,856};{176,-9,880};{177,-9,913};{178,-9,929};{179,-9,944};{179,-10,960};{180,-10,1016};{180,-10,1104};' 121 | p61 122 | sS'181' 123 | p62 124 | S'{-24,-19,0};{0,0,0};{1,0,199};{3,0,207};{4,0,215};{6,0,223};{7,0,231};{8,0,240};{10,0,247};{11,0,263};{12,0,273};{13,0,279};{15,0,295};{16,0,304};{18,0,319};{20,0,328};{22,0,337};{24,0,343};{26,0,352};{27,0,360};{30,0,368};{31,0,376};{34,0,383};{36,0,391};{38,0,399};{41,0,407};{44,0,415};{49,0,423};{53,0,431};{57,0,439};{61,0,447};{64,0,455};{66,0,463};{70,0,471};{73,0,480};{76,0,487};{78,0,495};{81,0,504};{84,0,511};{85,0,519};{89,0,528};{92,0,535};{95,0,543};{97,0,551};{100,0,559};{102,0,567};{104,0,576};{107,0,583};{110,0,591};{111,0,599};{114,2,607};{116,3,615};{118,3,623};{120,3,639};{121,3,648};{122,3,655};{123,3,663};{124,3,671};{125,4,679};{127,6,687};{129,6,703};{130,6,712};{131,6,719};{132,6,728};{133,6,735};{134,6,743};{135,6,751};{136,6,760};{137,6,767};{139,7,776};{140,7,783};{141,7,791};{143,7,799};{144,7,815};{146,7,823};{148,7,839};{149,7,847};{150,7,855};{151,8,863};{151,9,871};{152,9,879};{153,9,895};{154,9,903};{155,9,911};{156,9,927};{157,9,944};{159,9,951};{160,9,967};{161,9,976};{163,9,983};{164,9,999};{165,9,1007};{166,9,1015};{168,10,1039};{169,10,1063};{171,10,1087};{172,10,1127};{174,10,1167};{175,10,1215};{176,10,1264};{177,10,1287};{178,10,1295};{179,10,1367};{180,10,1439};{181,10,1479};{181,10,1679};' 125 | p63 126 | sS'116' 127 | p64 128 | S'{-22,-17,0};{0,0,0};{0,0,4};{2,0,143};{4,-1,150};{6,-2,159};{8,-2,166};{10,-2,174};{12,-2,182};{13,-2,190};{16,-3,198};{17,-3,206};{19,-3,214};{20,-3,222};{22,-3,230};{23,-4,238};{26,-4,246};{27,-4,254};{30,-4,262};{31,-4,270};{33,-4,278};{34,-4,286};{37,-4,294};{38,-4,303};{40,-4,310};{41,-4,318};{44,-4,326};{46,-4,334};{48,-4,342};{51,-4,350};{53,-4,357};{56,-4,366};{58,-4,374};{60,-4,382};{62,-4,390};{63,-4,398};{64,-4,406};{65,-4,414};{66,-4,423};{66,-4,425};{66,-4,427};{69,-4,429};{70,-4,446};{73,-4,455};{74,-4,462};{75,-4,470};{76,-4,478};{77,-4,487};{78,-4,494};{79,-4,503};{80,-4,510};{81,-4,526};{82,-4,534};{83,-4,542};{85,-4,558};{86,-4,566};{87,-4,582};{88,-4,589};{89,-4,598};{91,-4,605};{92,-4,621};{94,-4,638};{95,-4,653};{97,-4,662};{98,-4,678};{99,-4,685};{101,-4,694};{102,-4,710};{103,-4,717};{104,-4,726};{105,-4,742};{107,-4,751};{108,-4,774};{109,-4,783};{110,-4,789};{111,-4,798};{112,-4,805};{113,-4,814};{114,-4,845};{115,-4,878};{116,-4,909};{116,-4,1054};' 129 | p65 130 | sS'84' 131 | p66 132 | S'{-20,-22,0};{0,0,0};{3,1,63};{5,1,71};{9,1,81};{14,2,87};{18,3,95};{23,3,103};{26,3,112};{29,3,119};{30,3,128};{33,3,135};{34,3,144};{36,3,151};{37,3,160};{39,3,167};{41,3,176};{43,3,192};{44,3,199};{47,3,207};{48,3,216};{49,3,223};{50,3,231};{51,3,247};{52,3,263};{53,3,280};{54,3,295};{56,3,306};{57,3,319};{58,3,328};{59,3,335};{60,3,351};{62,3,360};{63,3,367};{65,3,383};{66,3,393};{69,3,399};{70,3,416};{71,3,424};{72,3,432};{73,3,439};{74,3,447};{75,3,463};{76,3,488};{77,3,506};{78,3,512};{79,3,535};{80,3,551};{81,3,559};{82,3,599};{83,3,623};{84,3,679};{84,3,801};' 133 | p67 134 | sS'184' 135 | p68 136 | S'{-19,-24,0};{0,0,0};{3,0,119};{6,0,127};{9,0,136};{13,0,145};{16,0,151};{19,0,161};{20,0,167};{23,0,175};{26,0,183};{28,0,191};{31,0,199};{34,0,209};{35,0,215};{38,0,223};{40,0,231};{42,0,239};{45,0,247};{47,0,263};{48,0,271};{50,0,287};{51,0,295};{52,0,304};{54,0,312};{56,0,319};{57,0,328};{58,0,335};{61,0,344};{62,0,351};{64,0,360};{66,0,367};{69,0,377};{72,0,383};{75,0,391};{77,0,399};{79,0,409};{81,0,415};{83,0,424};{87,0,431};{90,0,439};{93,0,447};{97,0,455};{100,0,463};{103,0,471};{104,0,479};{106,0,487};{109,0,495};{111,0,504};{113,0,511};{115,0,519};{117,0,527};{120,0,535};{122,0,543};{125,0,551};{128,0,559};{130,0,567};{132,0,575};{135,0,583};{137,0,591};{141,0,599};{144,0,608};{145,0,615};{146,1,625};{148,1,631};{149,1,647};{151,2,656};{153,2,672};{154,2,679};{155,2,688};{157,2,695};{158,2,704};{160,2,711};{161,2,719};{163,2,735};{164,2,743};{165,2,753};{166,2,759};{167,2,775};{168,2,783};{169,2,791};{170,2,807};{171,2,815};{172,2,895};{173,2,940};{175,2,951};{176,2,976};{177,2,1007};{178,2,1032};{179,2,1081};{180,2,1095};{181,2,1103};{182,2,1151};{183,2,1167};{184,2,1183};{184,2,1392};' 137 | p69 138 | sS'128' 139 | p70 140 | S'{-16,-15,0};{0,0,0};{1,0,103};{3,0,111};{6,0,119};{8,0,127};{11,0,135};{12,0,143};{14,0,151};{15,0,159};{17,0,175};{18,0,191};{20,0,207};{22,0,223};{23,0,231};{24,0,247};{25,0,255};{26,-1,263};{27,-1,272};{28,-1,279};{29,-1,288};{30,-1,294};{31,-1,311};{33,-1,319};{34,-1,335};{36,-1,343};{37,-1,351};{39,-2,359};{40,-2,367};{42,-2,375};{44,-2,383};{46,-2,391};{47,-2,398};{49,-2,407};{50,-2,415};{52,-2,423};{55,-2,430};{57,-2,439};{58,-2,446};{60,-2,455};{63,-2,463};{65,-2,471};{67,-2,487};{69,-2,495};{72,-2,506};{74,-2,510};{75,-2,519};{77,-2,526};{79,-2,535};{80,-3,542};{81,-4,551};{82,-4,559};{83,-4,568};{84,-4,575};{85,-4,600};{86,-4,607};{87,-4,615};{88,-4,639};{89,-4,647};{90,-4,655};{91,-4,662};{92,-4,671};{94,-4,678};{95,-4,695};{96,-4,703};{97,-4,710};{98,-4,726};{100,-4,735};{101,-4,751};{102,-4,759};{103,-4,767};{104,-4,783};{105,-4,791};{106,-4,799};{107,-4,807};{108,-4,815};{109,-4,823};{110,-4,839};{111,-4,846};{113,-4,855};{114,-4,871};{115,-4,879};{116,-4,887};{118,-4,911};{119,-4,927};{121,-4,943};{122,-4,959};{124,-4,983};{125,-4,1015};{127,-4,1047};{128,-4,1111};{128,-4,1233};' 141 | p71 142 | sS'188' 143 | p72 144 | S'{-20,-21,0};{0,0,0};{3,0,79};{5,0,88};{7,0,95};{11,0,103};{13,0,111};{16,0,119};{19,0,127};{21,0,135};{22,0,143};{24,0,151};{26,0,159};{28,0,168};{30,0,175};{31,0,183};{33,0,191};{35,0,199};{36,0,207};{37,0,216};{38,0,223};{39,0,231};{40,0,239};{42,0,247};{43,0,255};{45,0,263};{46,0,271};{48,0,279};{49,0,289};{51,0,295};{52,0,304};{55,0,311};{56,0,319};{58,0,327};{60,0,335};{63,0,343};{66,0,351};{68,0,359};{72,0,367};{76,0,375};{79,0,384};{83,0,391};{84,0,399};{87,0,407};{90,0,415};{91,0,423};{93,0,431};{97,0,439};{99,0,448};{101,0,455};{103,0,463};{105,0,471};{108,0,479};{110,0,487};{113,0,495};{115,0,504};{117,0,511};{120,0,519};{123,0,527};{126,0,535};{128,0,543};{131,0,551};{134,0,559};{136,0,567};{139,0,575};{140,0,583};{142,0,591};{144,1,599};{146,2,607};{147,2,615};{150,2,623};{152,2,631};{154,2,647};{155,2,655};{156,2,664};{157,2,671};{158,2,679};{159,2,687};{160,2,695};{161,2,703};{162,2,711};{163,2,720};{164,2,727};{165,2,735};{166,2,743};{168,2,759};{169,2,767};{170,2,791};{171,2,807};{172,2,815};{173,2,831};{174,2,847};{175,2,887};{176,2,928};{177,2,943};{178,2,959};{179,2,983};{180,2,999};{181,2,1015};{182,2,1047};{183,2,1063};{184,2,1071};{185,2,1105};{186,2,1143};{187,2,1159};{188,2,1258};{188,2,1319};' 145 | p73 146 | sS'85' 147 | p74 148 | S'{-17,-18,0};{0,0,0};{0,0,7};{0,-1,128};{3,-1,135};{7,-1,144};{10,-1,151};{14,-1,160};{16,-1,167};{20,-1,175};{22,-1,183};{23,-1,192};{25,-1,199};{27,-1,208};{28,-1,216};{29,-1,224};{30,-1,232};{32,-1,248};{33,-1,257};{35,-1,273};{36,-1,279};{38,-1,288};{39,-1,308};{41,-1,313};{42,-1,327};{43,-1,336};{44,-1,344};{46,-1,359};{47,-1,368};{48,-2,375};{49,-2,384};{51,-2,391};{52,-2,407};{54,-2,415};{55,-2,424};{56,-2,449};{57,-2,455};{58,-2,471};{59,-2,508};{60,-2,528};{61,-2,535};{63,-2,551};{64,-2,568};{66,-2,585};{67,-3,601};{69,-3,608};{70,-3,616};{71,-3,623};{73,-4,632};{76,-4,648};{77,-4,664};{79,-4,687};{80,-5,720};{82,-5,743};{83,-5,784};{84,-6,807};{85,-6,864};{85,-6,1016};' 149 | p75 150 | sS'187' 151 | p76 152 | S'{-17,-19,0};{0,0,0};{3,0,145};{6,0,153};{8,0,161};{11,0,169};{13,0,177};{16,0,185};{19,0,193};{21,0,201};{22,0,209};{24,0,217};{26,0,225};{28,0,241};{29,0,249};{31,0,265};{32,0,273};{34,0,289};{35,0,297};{37,0,306};{38,0,313};{41,0,321};{43,0,329};{45,0,337};{48,0,345};{50,0,354};{54,0,361};{58,-2,369};{62,-2,377};{66,-2,386};{70,-2,393};{75,-3,401};{78,-3,409};{81,-4,417};{83,-4,425};{86,-4,433};{87,-4,441};{90,-4,449};{93,-4,457};{96,-4,465};{97,-4,473};{99,-4,481};{103,-6,489};{105,-6,497};{107,-7,505};{109,-7,513};{112,-7,521};{113,-7,529};{116,-7,537};{117,-7,545};{119,-8,553};{122,-8,561};{123,-8,569};{125,-8,577};{127,-10,585};{129,-10,593};{130,-10,601};{132,-10,609};{134,-10,617};{137,-10,625};{139,-10,641};{141,-10,649};{142,-10,665};{143,-10,673};{144,-10,681};{145,-10,689};{147,-10,697};{149,-10,713};{150,-10,729};{152,-10,737};{153,-10,753};{154,-10,762};{155,-10,769};{157,-10,777};{158,-10,785};{159,-10,795};{161,-10,817};{162,-10,825};{164,-10,841};{165,-10,849};{166,-10,865};{167,-10,881};{168,-10,889};{169,-10,913};{170,-10,921};{171,-10,929};{172,-10,945};{173,-10,953};{174,-10,969};{175,-10,994};{176,-10,1001};{177,-10,1009};{178,-10,1026};{179,-10,1049};{180,-10,1081};{181,-10,1113};{182,-10,1129};{183,-10,1169};{184,-10,1225};{185,-10,1249};{186,-10,1289};{187,-10,1433};{187,-10,1481};' 153 | p77 154 | sS'179' 155 | p78 156 | S'{-17,-22,0};{0,0,0};{2,0,88};{4,0,95};{6,0,111};{8,0,119};{10,0,127};{11,0,135};{13,0,143};{15,0,151};{17,0,159};{18,0,167};{20,0,175};{21,0,183};{23,0,199};{24,0,207};{25,0,223};{26,0,231};{27,0,247};{29,0,263};{30,0,272};{31,0,279};{32,0,288};{33,0,295};{35,0,308};{36,0,314};{37,0,320};{39,0,327};{40,0,335};{42,0,343};{43,0,351};{44,0,367};{46,0,375};{48,0,391};{49,0,399};{50,0,407};{52,0,415};{54,0,424};{56,0,431};{57,0,439};{59,0,447};{61,0,455};{63,0,464};{64,0,471};{66,0,479};{67,0,487};{71,0,495};{73,0,508};{74,0,513};{76,0,520};{78,0,527};{81,0,535};{84,0,543};{85,0,552};{87,0,559};{88,0,567};{91,0,575};{93,1,591};{94,1,600};{95,1,607};{96,1,616};{97,1,623};{98,1,631};{99,1,639};{102,1,647};{104,1,663};{105,1,671};{107,1,679};{108,1,687};{109,1,695};{111,2,703};{112,2,711};{113,2,719};{115,2,727};{118,2,735};{119,2,743};{121,2,751};{122,2,759};{124,2,767};{125,2,775};{127,3,791};{128,3,799};{131,3,807};{132,3,815};{134,4,823};{135,4,831};{137,4,839};{138,4,847};{140,5,855};{141,5,871};{142,5,879};{143,5,887};{145,5,896};{146,5,912};{147,5,919};{148,5,927};{150,5,943};{151,6,951};{153,6,967};{154,6,975};{155,6,991};{156,6,999};{157,6,1007};{158,6,1023};{159,6,1031};{160,8,1039};{161,8,1063};{162,8,1071};{163,8,1079};{164,8,1103};{166,8,1111};{167,8,1143};{168,8,1192};{169,8,1199};{170,8,1215};{171,8,1239};{172,8,1247};{173,9,1256};{174,9,1311};{175,9,1327};{176,9,1351};{177,9,1391};{178,9,1407};{179,9,1471};{179,9,1576};' 157 | p79 158 | sS'145' 159 | p80 160 | S'{-24,-24,0};{0,0,0};{0,1,112};{2,1,128};{4,2,136};{6,2,144};{7,2,152};{9,2,161};{11,2,168};{13,2,176};{14,2,184};{15,2,192};{17,2,201};{18,2,208};{19,2,216};{20,2,224};{22,2,232};{23,2,240};{24,2,248};{26,2,256};{28,2,273};{29,2,280};{30,2,288};{31,2,296};{32,2,304};{34,2,312};{37,2,320};{38,2,328};{41,2,336};{44,2,344};{47,2,352};{51,2,360};{55,2,368};{61,1,376};{65,1,384};{71,0,392};{76,-2,400};{80,-2,409};{83,-2,416};{84,-2,424};{87,-2,432};{89,-2,448};{90,-2,456};{91,-2,464};{92,-2,472};{94,-2,480};{97,-3,488};{99,-3,496};{102,-4,504};{105,-4,512};{107,-4,520};{110,-4,528};{112,-4,536};{115,-4,544};{116,-4,552};{118,-4,560};{120,-4,568};{122,-4,585};{123,-4,592};{125,-4,608};{126,-4,632};{127,-4,640};{128,-4,648};{129,-4,664};{131,-4,688};{132,-5,696};{133,-5,712};{134,-5,720};{135,-5,752};{136,-5,768};{137,-5,792};{138,-5,817};{139,-5,840};{140,-5,896};{141,-5,977};{142,-5,1000};{143,-5,1040};{144,-5,1114};{145,-5,1152};{145,-5,1345};' 161 | p81 162 | sS'140' 163 | p82 164 | S'{-24,-19,0};{0,0,0};{1,1,173};{3,1,184};{4,1,190};{6,1,199};{7,1,205};{8,1,231};{9,1,237};{10,1,247};{11,1,261};{12,1,269};{13,1,277};{14,1,301};{14,1,307};{15,1,309};{16,1,317};{17,1,325};{18,1,333};{19,1,341};{20,1,350};{22,1,357};{23,1,366};{25,1,373};{26,1,384};{29,1,389};{30,1,398};{32,1,405};{34,1,414};{37,1,421};{41,1,429};{46,0,437};{48,0,446};{52,-1,453};{57,-1,462};{61,-1,469};{66,-1,478};{71,-2,485};{75,-2,493};{78,-3,501};{81,-4,510};{85,-4,517};{87,-4,525};{89,-5,533};{91,-5,541};{92,-5,550};{93,-5,557};{94,-5,565};{94,-6,573};{95,-6,581};{97,-6,589};{98,-6,605};{99,-6,613};{100,-6,621};{101,-6,637};{102,-6,645};{103,-6,653};{104,-6,685};{105,-6,701};{106,-6,709};{107,-6,727};{108,-6,733};{109,-6,749};{110,-6,781};{111,-6,790};{112,-6,805};{113,-6,821};{114,-6,837};{115,-6,853};{116,-6,870};{118,-6,885};{119,-6,901};{120,-6,909};{121,-6,917};{122,-6,925};{124,-6,933};{125,-6,941};{126,-6,957};{127,-6,967};{128,-6,973};{130,-6,989};{131,-6,1006};{133,-6,1029};{134,-6,1045};{136,-6,1070};{137,-6,1093};{139,-6,1117};{140,-6,1182};{140,-6,1509};' 165 | p83 166 | sS'120' 167 | p84 168 | S'{-23,-17,0};{0,0,0};{0,0,6};{3,0,142};{6,0,149};{8,0,156};{10,0,165};{12,0,173};{13,0,181};{15,0,197};{17,0,205};{18,0,213};{19,0,223};{20,0,229};{21,0,236};{23,0,245};{24,1,261};{26,1,277};{27,1,285};{28,1,292};{29,1,301};{31,1,317};{32,1,324};{33,1,333};{36,1,340};{37,1,349};{39,1,356};{41,1,365};{43,1,372};{46,1,380};{49,1,389};{53,1,398};{56,1,407};{59,1,414};{62,1,423};{66,1,430};{67,2,438};{70,2,446};{72,2,456};{74,2,461};{77,2,470};{79,2,478};{81,2,486};{83,2,493};{86,2,503};{88,2,509};{89,2,518};{91,2,525};{92,2,534};{93,2,541};{95,2,549};{96,2,565};{98,2,573};{100,2,589};{101,2,597};{102,2,605};{103,2,613};{104,2,621};{105,2,629};{106,2,653};{107,2,661};{108,2,670};{109,2,685};{110,2,709};{111,2,725};{112,2,749};{113,2,757};{114,2,767};{115,2,789};{116,2,797};{117,2,814};{118,2,837};{119,2,869};{120,2,901};{120,2,1190};' 169 | p85 170 | sS'121' 171 | p86 172 | S'{-25,-19,0};{0,0,0};{0,-1,94};{1,-1,102};{2,-1,110};{4,-1,118};{5,-1,126};{7,-1,134};{9,-1,142};{11,-1,151};{13,-1,167};{14,-1,174};{15,-1,182};{17,-1,190};{18,-1,198};{20,-1,206};{21,-1,215};{22,-1,222};{24,-1,230};{25,-1,238};{28,-1,246};{29,-1,254};{31,-1,262};{32,-1,270};{34,-1,278};{35,-1,286};{36,-1,294};{37,-1,307};{38,-1,313};{39,-1,319};{41,-1,326};{42,-1,334};{43,-1,342};{46,-1,350};{48,-1,358};{51,-1,366};{53,-1,374};{55,-1,382};{58,-1,390};{60,-1,399};{63,-1,406};{66,-1,415};{67,-1,422};{71,-1,431};{73,-1,438};{75,-1,448};{79,0,454};{81,0,464};{83,2,470};{86,2,479};{89,2,486};{91,2,495};{93,3,506};{94,3,512};{96,3,518};{98,3,526};{99,4,534};{100,4,542};{101,4,550};{103,4,558};{104,4,574};{105,4,582};{107,5,590};{109,5,614};{110,5,630};{112,5,654};{113,5,678};{115,5,694};{116,5,712};{117,6,743};{118,6,766};{119,6,775};{120,6,807};{121,6,919};{121,6,990};' 173 | p87 174 | sS'75' 175 | p88 176 | S'{-39,-17,0};{0,0,0};{0,0,3};{1,0,5};{2,0,13};{3,0,20};{4,0,37};{5,0,61};{6,0,84};{7,0,100};{8,0,109};{9,0,116};{10,0,132};{12,0,140};{14,0,158};{16,0,164};{17,0,173};{18,0,180};{19,0,197};{20,0,220};{21,0,228};{23,0,252};{24,0,260};{25,0,268};{27,0,276};{30,0,284};{31,0,293};{33,0,300};{34,0,308};{35,0,316};{36,0,324};{37,0,332};{38,0,340};{40,0,348};{41,0,358};{42,0,364};{44,0,374};{45,0,380};{47,0,388};{49,0,406};{50,0,412};{51,0,421};{52,0,437};{53,0,453};{54,0,460};{56,0,468};{57,0,485};{59,0,500};{60,0,508};{62,0,525};{63,0,540};{65,0,564};{66,0,580};{68,0,604};{69,0,636};{71,0,654};{72,0,676};{74,0,732};{75,0,788};{75,0,933};' 177 | p89 178 | sS'123' 179 | p90 180 | S'{-23,-17,0};{0,0,0};{0,0,2};{1,0,152};{3,0,159};{7,0,166};{10,0,175};{11,0,182};{13,0,191};{14,0,198};{16,0,207};{17,0,223};{19,0,230};{19,0,235};{19,0,236};{19,0,238};{19,0,240};{19,0,242};{21,0,246};{23,0,254};{24,0,262};{26,0,270};{28,0,279};{30,0,286};{31,0,294};{34,0,303};{36,0,310};{39,0,318};{42,0,326};{45,0,334};{49,0,342};{50,0,350};{54,0,359};{54,0,361};{54,0,363};{54,0,365};{56,0,367};{58,0,374};{60,0,382};{61,0,390};{63,0,399};{64,0,406};{67,0,414};{68,0,422};{70,0,430};{72,0,440};{75,0,446};{77,0,463};{78,0,472};{81,0,479};{82,0,487};{84,0,495};{85,0,503};{88,0,510};{89,0,518};{90,0,526};{92,0,534};{93,0,550};{95,0,558};{97,0,574};{98,0,582};{100,0,599};{101,0,607};{103,0,622};{105,0,638};{106,0,654};{107,0,663};{108,0,671};{109,0,679};{110,1,694};{112,1,702};{113,1,710};{114,1,726};{115,1,734};{116,1,742};{117,1,758};{118,1,766};{119,1,783};{120,1,831};{121,1,847};{122,1,854};{123,1,878};{123,1,1055};' 181 | p91 182 | sS'124' 183 | p92 184 | S'{-15,-22,0};{0,0,0};{0,0,6};{2,0,102};{4,0,110};{6,0,118};{7,0,127};{9,0,134};{11,0,143};{12,0,150};{13,0,158};{14,0,166};{16,0,174};{18,0,198};{19,0,214};{20,0,222};{21,0,238};{22,0,246};{23,0,254};{25,0,262};{26,0,278};{28,0,294};{30,0,302};{31,0,310};{32,0,318};{34,0,326};{36,0,334};{38,0,342};{39,0,350};{41,0,358};{43,0,366};{45,0,376};{47,0,382};{51,0,390};{54,0,398};{58,0,406};{61,0,414};{65,0,422};{67,0,430};{70,0,438};{73,0,446};{75,0,462};{78,0,472};{79,0,478};{81,0,486};{83,0,494};{85,0,506};{87,0,510};{88,0,518};{91,0,526};{92,0,535};{94,0,542};{95,0,558};{96,0,566};{97,0,574};{98,0,590};{99,0,598};{100,0,606};{101,0,622};{102,0,630};{103,0,638};{104,0,646};{105,0,654};{106,0,662};{107,0,678};{108,0,686};{109,0,694};{110,0,702};{111,0,719};{112,0,725};{113,0,750};{114,0,767};{115,0,783};{116,0,806};{117,0,822};{118,0,830};{119,0,862};{120,0,878};{121,0,902};{122,0,942};{123,0,958};{124,0,990};{124,0,1143};' 185 | p93 186 | sS'72' 187 | p94 188 | S'{-16,-20,0};{0,0,0};{1,0,16};{2,0,32};{3,0,40};{4,0,48};{5,0,56};{6,0,64};{10,0,72};{11,0,80};{13,0,87};{14,0,96};{17,0,104};{18,0,119};{20,0,128};{21,0,135};{22,0,144};{24,0,152};{26,0,160};{27,0,167};{29,0,176};{30,0,184};{32,0,199};{33,0,208};{34,0,216};{36,0,224};{39,0,231};{41,0,241};{44,0,248};{45,0,256};{47,0,264};{49,0,272};{50,0,280};{51,0,296};{53,0,320};{54,0,335};{55,0,392};{56,0,408};{57,0,424};{58,0,463};{59,0,528};{60,0,551};{61,0,592};{62,0,616};{63,0,632};{64,0,655};{65,0,679};{66,0,703};{66,-1,711};{67,-1,743};{68,-1,815};{69,-1,839};{71,-1,1079};{72,-1,1103};{72,-1,1336};' 189 | p95 190 | sS'71' 191 | p96 192 | S'{-21,-26,0};{0,0,0};{0,0,2};{1,1,62};{2,1,70};{4,1,78};{8,1,87};{11,1,94};{15,1,102};{18,1,111};{20,1,118};{22,1,127};{24,1,134};{26,1,144};{27,1,150};{29,1,159};{31,1,166};{33,1,175};{34,1,182};{36,1,191};{38,1,199};{40,1,206};{42,1,214};{44,1,223};{45,1,230};{47,1,239};{48,1,247};{50,1,255};{52,1,262};{54,1,271};{55,1,278};{58,1,287};{60,1,294};{62,1,304};{64,1,311};{65,1,319};{66,1,327};{67,1,336};{68,1,351};{69,1,367};{70,1,390};{71,1,423};{71,1,663};' 193 | p97 194 | sS'70' 195 | p98 196 | S'{-20,-20,0};{0,0,0};{-1,0,150};{-1,-1,158};{0,-2,166};{2,-2,173};{5,-2,182};{7,-3,190};{10,-3,198};{14,-4,205};{15,-4,214};{18,-4,221};{19,-4,238};{21,-5,246};{23,-5,265};{25,-6,270};{27,-6,278};{28,-6,286};{30,-6,295};{31,-6,305};{32,-6,311};{33,-6,317};{34,-6,326};{36,-6,334};{38,-8,342};{40,-8,349};{41,-8,358};{44,-8,366};{45,-8,382};{47,-8,406};{48,-8,414};{48,-9,421};{50,-9,429};{52,-9,437};{54,-9,446};{56,-9,462};{58,-10,469};{60,-10,494};{62,-11,505};{63,-11,517};{64,-11,526};{65,-11,549};{66,-11,575};{67,-12,606};{68,-12,638};{69,-12,662};{70,-12,678};{70,-12,830};' 197 | p99 198 | sS'102' 199 | p100 200 | S'{-20,-21,0};{0,0,0};{0,1,95};{1,1,105};{2,1,120};{4,1,127};{5,1,137};{7,1,143};{8,1,153};{10,1,159};{11,1,168};{13,1,176};{14,1,184};{15,1,191};{17,1,200};{19,1,207};{21,1,217};{22,1,223};{25,1,231};{28,1,239};{29,1,248};{31,1,256};{32,1,264};{34,1,272};{36,1,280};{38,1,288};{39,1,295};{42,1,304};{43,1,312};{46,1,320};{49,1,336};{50,1,343};{51,1,352};{52,1,360};{53,1,368};{55,1,375};{56,1,391};{58,1,401};{59,1,407};{61,1,417};{63,0,423};{66,0,439};{68,0,448};{69,0,455};{70,0,471};{71,0,480};{72,0,487};{73,0,496};{74,0,504};{75,0,512};{76,0,520};{77,0,527};{78,0,536};{79,0,543};{80,0,552};{81,0,559};{82,0,568};{84,0,599};{85,-1,607};{86,-1,631};{87,-1,639};{88,-1,655};{89,-1,663};{90,-1,679};{91,-1,703};{93,-1,735};{94,-1,761};{96,-3,783};{97,-3,808};{99,-3,839};{100,-3,871};{102,-3,935};{102,-3,1089};' 201 | p101 202 | sS'103' 203 | p102 204 | S'{-22,-19,0};{0,0,0};{0,0,7};{1,0,213};{2,0,221};{4,0,229};{5,0,237};{7,0,245};{10,-2,253};{11,-2,261};{12,-2,270};{14,-2,277};{16,-2,285};{18,-2,293};{20,-3,301};{22,-3,309};{23,-3,317};{25,-3,325};{27,-3,333};{28,-4,341};{29,-4,349};{32,-5,357};{33,-5,365};{35,-5,373};{36,-5,382};{39,-5,389};{40,-5,397};{42,-5,405};{43,-5,413};{44,-5,421};{45,-5,429};{47,-5,437};{48,-5,445};{49,-5,453};{50,-5,461};{53,-5,471};{54,-5,477};{56,-5,486};{58,-5,493};{60,-5,501};{62,-5,518};{63,-5,534};{64,-5,557};{65,-5,566};{66,-5,573};{67,-5,589};{68,-5,597};{69,-5,605};{70,-5,613};{71,-5,621};{73,-5,629};{75,-5,637};{77,-5,653};{78,-5,661};{80,-5,669};{81,-5,677};{82,-5,685};{83,-5,693};{84,-5,709};{86,-5,717};{88,-5,733};{89,-5,749};{91,-5,773};{92,-5,805};{94,-5,831};{95,-5,853};{96,-5,877};{97,-5,901};{98,-5,933};{99,-5,981};{100,-5,1005};{101,-5,1037};{102,-5,1109};{103,-5,1245};{103,-5,1277};' 205 | p103 206 | sS'166' 207 | p104 208 | S'{-23,-20,0};{0,0,0};{1,0,72};{2,0,88};{5,0,96};{7,0,104};{10,0,112};{12,0,121};{15,0,128};{19,0,136};{24,0,144};{27,0,152};{29,0,160};{32,0,168};{34,0,176};{35,0,184};{38,0,192};{39,0,200};{41,0,208};{42,0,216};{44,0,224};{46,0,232};{48,0,240};{49,0,248};{50,0,256};{52,0,265};{53,0,280};{55,0,288};{56,0,297};{58,0,304};{62,0,312};{63,0,320};{66,0,328};{69,0,336};{71,0,344};{74,0,352};{77,0,360};{80,0,368};{83,0,376};{86,0,385};{93,0,392};{100,0,402};{108,0,408};{115,0,418};{120,0,424};{125,0,434};{129,0,440};{132,0,449};{133,0,456};{134,0,464};{135,0,472};{136,0,488};{137,0,496};{138,0,512};{141,0,520};{143,0,536};{145,0,544};{147,0,560};{148,0,568};{149,0,584};{150,0,592};{151,0,600};{152,0,616};{153,0,624};{154,0,632};{155,0,664};{157,0,680};{158,0,704};{159,0,720};{160,0,728};{161,0,768};{162,0,784};{163,0,808};{164,0,848};{165,0,888};{166,0,1192};{166,0,1201};' 209 | p105 210 | sS'95' 211 | p106 212 | S'{-26,-22,0};{0,0,0};{1,0,169};{3,0,176};{4,0,184};{7,0,192};{8,0,201};{10,0,208};{11,0,216};{14,0,224};{15,0,233};{16,0,240};{16,0,246};{17,0,252};{18,0,264};{19,0,281};{20,0,288};{21,0,307};{23,0,314};{24,0,320};{27,0,328};{28,0,336};{30,0,344};{32,-2,352};{34,-2,360};{37,-2,368};{37,-2,375};{39,-2,380};{41,-2,385};{42,-2,392};{42,-3,400};{45,-3,408};{46,-3,416};{47,-3,424};{48,-3,432};{50,-4,440};{52,-4,449};{56,-5,456};{57,-5,464};{59,-5,472};{62,-5,481};{63,-6,488};{65,-6,496};{67,-6,507};{67,-7,514};{68,-7,520};{69,-7,528};{70,-7,536};{72,-7,544};{73,-7,560};{75,-7,584};{76,-7,600};{78,-7,616};{79,-7,632};{81,-7,648};{82,-7,656};{83,-7,664};{84,-7,672};{86,-7,688};{87,-7,704};{88,-7,720};{89,-7,736};{90,-7,752};{91,-7,777};{92,-7,793};{93,-7,816};{94,-7,880};{95,-7,904};{95,-7,1040};' 213 | p107 214 | sS'162' 215 | p108 216 | S'{-16,-14,0};{0,0,0};{0,0,7};{1,0,86};{3,0,102};{5,0,110};{6,0,126};{8,0,134};{9,0,142};{10,0,150};{11,0,158};{12,0,166};{13,0,174};{14,0,182};{15,0,190};{16,0,198};{17,0,214};{19,0,222};{20,0,230};{21,0,246};{22,0,255};{23,0,271};{24,0,286};{25,0,294};{27,0,310};{29,0,318};{30,0,326};{31,0,334};{33,0,342};{35,0,350};{36,-1,358};{39,-1,366};{40,-2,374};{42,-2,382};{44,-2,390};{47,-2,398};{50,-2,406};{52,-3,414};{56,-4,422};{59,-4,430};{63,-5,438};{66,-5,446};{70,-6,454};{72,-6,463};{76,-8,470};{77,-8,478};{80,-8,486};{83,-8,494};{88,-8,505};{95,-9,510};{101,-10,518};{105,-10,526};{109,-12,534};{111,-12,542};{112,-12,550};{113,-12,558};{114,-12,574};{115,-12,598};{116,-12,606};{117,-12,615};{118,-12,622};{120,-12,631};{122,-12,647};{123,-12,654};{125,-12,662};{126,-12,678};{128,-12,694};{129,-12,710};{131,-12,726};{133,-12,734};{134,-12,742};{135,-12,750};{136,-12,766};{137,-12,774};{138,-12,782};{139,-12,806};{140,-12,822};{142,-12,838};{143,-12,846};{144,-12,862};{145,-12,886};{146,-12,911};{147,-12,927};{148,-12,942};{149,-12,958};{150,-12,974};{151,-12,998};{152,-12,1014};{153,-12,1022};{154,-12,1038};{155,-12,1046};{156,-12,1062};{157,-12,1102};{158,-12,1126};{159,-12,1150};{160,-12,1215};{161,-12,1246};{162,-12,1278};{162,-12,1446};' 217 | p109 218 | sS'78' 219 | p110 220 | S'{-24,-20,0};{0,0,0};{1,0,36};{2,0,70};{3,0,76};{5,0,84};{6,0,101};{8,0,108};{11,0,117};{12,0,125};{14,0,133};{16,0,141};{19,0,148};{21,0,157};{22,0,165};{25,0,173};{27,0,181};{28,0,188};{29,0,198};{30,0,204};{32,0,213};{33,0,228};{35,0,237};{36,0,252};{37,0,260};{38,0,268};{39,0,277};{41,0,284};{42,0,292};{44,0,309};{46,0,316};{48,0,324};{49,1,332};{50,1,340};{52,1,348};{54,1,365};{55,1,382};{56,1,404};{57,1,420};{58,1,452};{59,1,468};{60,1,484};{61,1,516};{62,1,524};{63,1,532};{64,1,548};{65,1,556};{66,1,564};{67,1,580};{68,1,589};{69,1,596};{70,1,620};{71,1,628};{72,1,644};{73,1,678};{74,1,700};{75,1,724};{76,1,756};{77,1,788};{78,1,828};{78,1,949};' 221 | p111 222 | sS'77' 223 | p112 224 | S'{-27,-23,0};{0,0,0};{3,0,63};{5,0,71};{7,0,79};{10,0,87};{11,0,95};{14,0,103};{16,0,111};{18,0,119};{21,1,127};{24,1,135};{26,2,143};{28,2,151};{30,2,159};{32,2,167};{33,2,176};{35,2,183};{36,2,191};{37,2,199};{38,2,207};{39,2,223};{40,2,231};{41,2,240};{42,2,255};{43,2,263};{44,2,271};{45,2,279};{46,2,287};{47,2,295};{48,2,311};{49,2,319};{50,2,327};{51,2,343};{52,2,351};{54,2,359};{55,2,367};{56,2,375};{57,2,383};{58,2,399};{59,2,407};{60,2,415};{61,2,431};{62,2,439};{63,2,447};{64,2,455};{65,2,463};{66,2,472};{67,2,488};{68,2,495};{69,2,511};{70,2,527};{71,2,543};{72,2,559};{73,2,575};{74,2,623};{75,2,639};{76,2,664};{77,2,751};{77,2,823};' 225 | p113 226 | sS'139' 227 | p114 228 | S'{-16,-24,0};{0,0,0};{1,1,75};{2,1,91};{4,1,107};{5,1,115};{8,1,123};{9,1,131};{12,1,139};{14,1,147};{16,1,155};{19,1,164};{23,1,172};{25,1,180};{29,1,187};{32,1,196};{36,1,203};{40,1,211};{44,1,219};{47,1,227};{51,1,235};{52,1,243};{55,1,251};{58,1,259};{59,1,267};{62,1,275};{63,1,283};{65,1,291};{66,1,299};{69,1,310};{70,1,315};{72,1,331};{74,1,339};{75,1,347};{76,1,355};{77,1,363};{78,1,371};{80,1,379};{82,1,395};{83,1,403};{86,1,411};{87,1,419};{88,1,427};{90,1,435};{92,1,443};{93,1,451};{94,1,460};{96,1,467};{97,1,475};{99,1,488};{100,1,498};{101,1,509};{102,1,515};{104,1,530};{105,1,539};{106,1,547};{107,1,556};{109,1,563};{111,1,578};{112,1,595};{114,1,604};{115,1,619};{116,1,626};{117,1,642};{118,1,651};{119,1,658};{120,1,667};{121,1,691};{122,1,698};{124,1,707};{125,1,722};{126,1,739};{127,1,747};{129,1,771};{130,1,778};{131,1,795};{132,1,811};{133,1,826};{134,1,843};{135,1,858};{136,1,867};{137,1,907};{138,1,939};{139,1,963};{139,1,1100};' 229 | p115 230 | sS'74' 231 | p116 232 | S'{-14,-24,0};{0,0,0};{0,1,126};{1,1,135};{3,1,142};{6,1,152};{8,1,158};{12,2,167};{15,2,174};{18,2,182};{20,2,191};{23,2,199};{27,2,207};{30,2,215};{32,3,223};{34,3,230};{35,3,239};{37,3,247};{39,3,255};{41,3,262};{43,3,278};{45,3,286};{47,3,302};{48,3,310};{50,3,319};{51,3,334};{53,3,343};{54,3,350};{56,3,358};{57,3,367};{58,3,376};{60,3,382};{61,3,391};{63,3,398};{64,3,414};{66,3,425};{67,3,430};{68,3,439};{69,3,455};{70,3,462};{71,3,496};{72,3,502};{73,3,518};{74,3,582};{74,3,815};' 233 | p117 234 | sS'55' 235 | p118 236 | S'{-23,-18,0};{0,0,0};{0,0,13};{1,0,143};{8,0,158};{11,0,168};{14,0,178};{18,0,186};{21,0,193};{23,0,199};{25,0,206};{27,0,213};{29,0,222};{31,0,229};{32,0,238};{34,0,245};{36,0,253};{39,0,261};{42,0,270};{43,0,277};{45,0,285};{48,0,293};{51,0,301};{52,0,312};{53,0,318};{54,0,325};{56,0,335};{57,0,341};{58,0,349};{59,0,357};{60,0,365};{61,0,389};{62,0,397};{63,0,413};{64,0,429};{65,0,437};{66,0,453};{67,0,461};{68,0,469};{69,0,509};{70,0,549};{69,0,855};{65,0,869};{64,0,882};{62,0,889};{60,0,896};{59,0,903};{58,0,911};{57,0,942};{56,0,957};{55,0,1061};{55,0,1261};' 237 | p119 238 | sS'54' 239 | p120 240 | S'{-23,-20,0};{0,0,0};{0,1,160};{1,1,167};{2,1,177};{4,1,191};{5,1,200};{6,1,209};{8,1,216};{9,1,223};{11,1,231};{12,1,239};{13,1,255};{14,1,271};{15,1,279};{16,1,295};{17,1,304};{18,1,312};{20,1,335};{21,1,343};{23,1,359};{24,1,367};{26,1,376};{27,1,383};{28,1,391};{30,1,399};{31,1,407};{32,1,416};{33,1,426};{34,1,439};{35,1,447};{36,1,457};{37,1,479};{38,1,487};{39,1,503};{40,1,520};{41,1,536};{42,1,543};{43,1,568};{44,1,575};{45,1,584};{46,1,615};{47,1,655};{48,1,679};{49,1,743};{50,1,775};{51,1,831};{52,1,1023};{53,1,1144};{54,1,1192};{54,1,1354};' 241 | p121 242 | sS'57' 243 | p122 244 | S'{-12,-21,0};{0,0,0};{0,0,3};{1,0,54};{3,0,70};{5,0,80};{8,0,86};{10,0,95};{12,1,102};{14,1,111};{15,1,118};{17,2,134};{18,2,143};{19,2,150};{21,2,159};{23,2,174};{24,2,182};{28,2,190};{29,2,198};{30,2,206};{31,2,214};{34,2,222};{35,2,238};{37,2,246};{38,2,254};{40,2,262};{41,2,270};{44,2,278};{45,2,286};{47,2,295};{49,2,303};{51,2,310};{52,2,326};{54,2,342};{55,2,350};{56,2,366};{57,2,391};{57,2,638};' 245 | p123 246 | sS'56' 247 | p124 248 | S'{-24,-26,0};{0,0,0};{0,1,160};{1,1,183};{2,1,192};{3,1,200};{4,1,208};{6,1,215};{7,1,224};{9,1,240};{10,1,247};{12,1,256};{14,1,272};{16,1,279};{18,1,296};{19,1,305};{20,1,311};{22,1,320};{23,1,328};{25,0,344};{26,0,352};{28,0,367};{29,0,376};{30,0,392};{32,0,402};{33,0,415};{34,0,424};{35,0,440};{36,0,455};{37,0,463};{39,0,472};{40,0,488};{43,-2,495};{44,-2,512};{45,-2,528};{46,-2,551};{47,-2,560};{48,-2,567};{49,-2,591};{50,-2,600};{51,-2,616};{52,-2,648};{54,-2,663};{55,-2,702};{56,-2,758};{56,-2,888};' 249 | p125 250 | sS'51' 251 | p126 252 | S'{-19,-21,0};{0,0,0};{3,0,112};{4,0,121};{6,0,128};{7,0,136};{10,0,144};{12,0,159};{13,0,167};{15,0,183};{16,0,199};{17,0,208};{19,-1,215};{20,-1,224};{22,-1,231};{23,-1,240};{24,-1,247};{26,-1,256};{27,-1,271};{28,-1,280};{29,-1,296};{30,-1,311};{31,-1,327};{32,-1,337};{33,-1,351};{34,-1,359};{35,-1,391};{36,-1,401};{37,-1,408};{38,-1,423};{39,-1,432};{40,-1,448};{41,-1,480};{42,-1,495};{43,-1,511};{44,-1,527};{45,-1,535};{46,-1,551};{46,-2,575};{47,-2,607};{48,-2,615};{49,-2,632};{50,-2,655};{51,-3,728};{51,-3,840};' 253 | p127 254 | sS'108' 255 | p128 256 | S'{-23,-26,0};{0,0,0};{1,1,160};{2,1,168};{3,1,184};{4,1,192};{5,1,200};{6,1,216};{8,1,224};{9,1,240};{11,1,248};{13,1,264};{15,1,272};{17,1,280};{19,1,288};{21,1,296};{23,1,304};{25,1,312};{27,1,328};{28,1,336};{29,1,344};{30,1,353};{32,1,360};{34,1,376};{35,1,386};{37,1,401};{39,1,418};{40,1,424};{41,1,432};{43,1,440};{45,1,449};{47,1,456};{48,1,464};{51,1,472};{53,1,480};{55,1,488};{57,0,504};{59,0,512};{62,0,528};{64,0,544};{66,0,552};{68,0,561};{71,0,568};{72,0,576};{75,0,584};{77,0,592};{79,0,600};{81,0,616};{82,0,624};{83,0,632};{85,0,640};{86,0,656};{88,0,666};{89,0,681};{91,0,704};{92,0,720};{94,0,729};{95,0,752};{96,0,760};{97,0,768};{98,0,776};{99,0,793};{100,0,800};{101,0,824};{102,0,840};{103,0,872};{104,0,952};{105,0,1000};{106,0,1056};{107,0,1144};{108,0,1224};{108,0,1328};' 257 | p129 258 | sS'53' 259 | p130 260 | S'{-18,-18,0};{0,0,0};{2,0,273};{3,0,288};{4,0,295};{5,0,304};{6,0,343};{7,0,352};{8,0,367};{9,0,383};{10,0,399};{11,0,408};{12,0,423};{13,0,439};{14,0,456};{15,0,479};{16,0,488};{17,0,505};{18,0,528};{19,-1,536};{20,-1,543};{21,-2,552};{22,-2,575};{23,-2,584};{25,-2,600};{26,-2,615};{27,-2,631};{28,-2,655};{29,-2,663};{30,-2,672};{31,-2,695};{32,-2,711};{33,-2,735};{34,-2,752};{35,-2,767};{36,-2,775};{37,-2,792};{38,-2,817};{39,-2,839};{40,-2,895};{41,-2,911};{42,-2,919};{43,-2,952};{44,-2,976};{45,-2,999};{46,-2,1039};{47,-2,1055};{48,-2,1072};{49,-2,1113};{50,-2,1135};{51,-2,1160};{52,-2,1192};{53,-2,1239};{53,-2,1376};' 261 | p131 262 | sS'63' 263 | p132 264 | S'{-23,-20,0};{0,0,0};{1,0,176};{2,0,184};{5,0,192};{6,0,200};{9,0,208};{10,0,216};{12,0,224};{14,0,232};{16,0,240};{18,0,256};{19,0,264};{22,0,273};{23,0,280};{24,0,288};{26,0,296};{28,0,304};{29,0,312};{30,0,320};{32,0,336};{33,0,344};{35,0,360};{36,0,376};{38,0,384};{39,0,392};{40,0,400};{41,0,409};{43,0,425};{44,0,432};{45,0,448};{46,0,473};{47,0,480};{48,0,496};{49,0,504};{50,0,511};{51,0,520};{53,0,536};{54,0,552};{55,0,567};{56,-1,575};{57,-1,592};{59,-1,607};{60,-1,624};{61,-1,647};{62,-2,672};{63,-2,721};{63,-2,888};' 265 | p133 266 | sS'47' 267 | p134 268 | S'{-21,-18,0};{0,0,0};{0,0,10};{2,0,102};{5,0,110};{8,0,118};{9,0,127};{13,0,135};{16,0,143};{19,0,151};{21,0,158};{24,0,167};{25,0,174};{28,0,183};{29,0,192};{31,0,199};{32,0,208};{34,0,215};{36,0,223};{38,0,231};{39,0,240};{41,0,247};{43,0,255};{45,0,263};{46,0,271};{49,0,279};{52,0,287};{56,0,295};{59,0,303};{61,0,311};{64,0,320};{65,0,336};{66,0,343};{67,0,351};{68,0,368};{69,0,383};{70,0,398};{71,0,439};{70,0,687};{67,0,696};{66,0,702};{64,0,711};{63,0,726};{61,0,735};{60,0,751};{58,0,774};{57,0,799};{55,0,822};{54,0,839};{52,0,847};{51,0,854};{50,0,870};{49,0,879};{48,0,919};{47,0,983};{47,0,1111};' 269 | p135 270 | sS'168' 271 | p136 272 | S'{-24,-19,0};{0,0,0};{1,0,183};{2,0,191};{3,0,208};{4,0,215};{5,0,223};{6,0,240};{7,0,247};{8,0,255};{9,0,272};{10,0,288};{11,0,295};{13,0,319};{14,0,328};{15,0,335};{17,0,343};{19,0,351};{22,0,359};{24,0,367};{26,0,375};{29,0,384};{31,0,391};{34,0,400};{37,0,407};{40,0,415};{41,0,423};{43,0,431};{44,0,439};{47,0,447};{50,0,455};{51,0,463};{53,0,471};{55,0,479};{57,0,487};{58,0,495};{59,0,503};{61,0,511};{62,0,520};{65,0,527};{67,0,535};{69,0,543};{70,0,551};{71,0,559};{74,0,567};{76,0,575};{79,0,584};{82,0,591};{83,0,600};{85,0,607};{87,0,616};{90,0,623};{93,0,631};{97,0,639};{99,0,648};{101,0,655};{104,0,663};{105,0,671};{108,0,679};{109,0,687};{111,0,703};{112,0,727};{114,0,735};{115,0,743};{116,0,751};{117,0,759};{118,0,767};{119,0,783};{120,0,791};{121,0,799};{122,0,816};{123,0,823};{124,0,831};{125,0,848};{127,0,855};{128,0,871};{130,0,879};{131,0,887};{133,0,895};{134,0,903};{136,0,919};{138,0,928};{140,0,943};{141,0,951};{142,0,959};{144,0,967};{146,0,983};{147,0,991};{148,0,999};{149,0,1007};{150,0,1039};{151,0,1047};{152,0,1055};{153,0,1071};{155,0,1087};{156,0,1119};{158,0,1135};{159,0,1159};{161,0,1175};{162,0,1199};{163,0,1207};{164,0,1231};{165,1,1271};{166,1,1367};{167,1,1440};{168,1,1559};{168,1,1695};' 273 | p137 274 | sS'125' 275 | p138 276 | S'{-17,-20,0};{0,0,0};{1,0,84};{2,0,92};{4,0,108};{6,0,124};{7,0,132};{9,0,148};{11,0,156};{14,0,164};{15,0,172};{17,0,180};{20,0,188};{21,0,196};{22,0,204};{23,0,212};{25,0,220};{27,0,236};{28,0,244};{30,0,260};{32,0,269};{34,0,276};{35,0,284};{37,0,292};{38,0,302};{41,0,313};{44,0,320};{46,0,326};{48,0,332};{51,0,340};{54,0,348};{57,0,356};{61,0,364};{64,0,372};{68,0,380};{72,0,388};{75,0,396};{77,0,404};{80,0,412};{84,0,420};{85,0,428};{87,0,436};{88,0,444};{90,0,452};{91,0,468};{93,0,476};{94,0,492};{96,0,508};{97,0,516};{98,0,525};{99,0,532};{100,0,540};{101,0,548};{102,0,556};{103,0,564};{104,0,580};{105,0,588};{106,0,604};{107,0,620};{109,0,628};{110,0,636};{111,0,644};{112,0,652};{113,0,668};{114,0,677};{115,0,692};{116,0,716};{117,0,732};{118,0,740};{119,0,756};{120,0,764};{121,0,780};{122,0,796};{123,0,844};{124,0,860};{125,0,876};{125,0,1052};' 277 | p139 278 | s. 279 | -------------------------------------------------------------------------------- /zhangdama/trace_.py: -------------------------------------------------------------------------------- 1 | import random 2 | import pickle 3 | import re 4 | import os 5 | 6 | base_dir=os.path.dirname(__file__) 7 | def get_trace_fast(distance): 8 | track = [[-random.randint(15, 22), -random.randint(22, 25), 0]] 9 | track.append([0, 0, 0]) 10 | rand_x = 0 11 | passtime = 40 12 | for i in range(10): 13 | rand_x += int(distance * random.randint(1, 2) / 10) 14 | passtime += random.randint(10, 50) 15 | if rand_x < distance: 16 | track.append([rand_x, random.randint(-2, 2), passtime]) 17 | passtime += random.randint(100, 150) 18 | track.append([distance, random.randint(-2, 2), passtime]) 19 | return track 20 | 21 | 22 | def get_trace_normal(distance): 23 | track = [[random.randint(19, 30), random.randint(20, 25), 0]] 24 | count = 0 25 | scale = [0.2, 0.5, random.randint(6, 8) / 10] 26 | while count < distance: 27 | if count < distance * scale[0]: 28 | x = random.randint(1, 2) 29 | elif count < distance * scale[1]: 30 | x = random.randint(3, 4) 31 | elif count < distance * scale[2]: 32 | x = random.randint(5, 6) 33 | elif count < distance * 0.9: 34 | x = random.randint(2, 3) 35 | elif count < distance: 36 | x = 1 37 | count += x 38 | track.append([ 39 | x, 40 | random.choice([0, 0, 0, 0, 0, 0, -1, 1]), 41 | random.randint(10, 20) 42 | ]) 43 | 44 | track.append([0, 0, random.randint(300, 400)]) 45 | return track 46 | 47 | 48 | # 得到原始轨迹 [[x,y,t],...] 49 | def format_track(track): 50 | track = re.findall('{(.*?)}', track) 51 | track_list = [] 52 | for x in track: 53 | track_list.append([int(_) for _ in x.split(',')]) 54 | return track_list 55 | 56 | def choice_track_list(dist): 57 | source_track = [ 58 | '{-13,-23,0};{0,0,0};{1,0,91};{2,0,96};{5,0,107};{9,0,112};{12,0,121};{15,0,128};{17,0,137};{20,0,144};{23,0,152};{26,0,160};{29,0,168};{32,0,176};{35,0,184};{39,0,192};{44,0,200};{51,0,208};{58,0,216};{64,0,224};{69,0,232};{73,0,240};{78,0,248};{82,0,256};{86,0,264};{90,0,272};{99,0,280};{105,0,288};{114,0,296};{121,0,304};{126,0,312};{132,0,320};{137,0,328};{141,0,336};{146,0,344};{149,0,353};{151,0,360};{154,0,368};{156,0,376};{157,0,385};{158,0,392};{160,0,401};{161,0,408};{162,0,432};{163,0,440};{164,1,448};{166,1,464};{168,1,472};{169,1,480};{170,1,488};{171,1,496};{172,1,504};{173,1,512};{174,1,519};{175,1,528};{176,1,536};{177,1,544};{179,1,552};{180,1,568};{181,1,584};{182,1,600};{183,1,608};{184,1,623};{185,1,632};{186,1,640};{188,1,655};{189,1,664};{191,1,681};{192,1,728};{194,1,760};{194,1,1127};{194,1,1127};{194,1,1127};{194,1,1128};{192,1,1479};{190,1,1511};{189,1,1536};{189,1,1841};', 59 | '{-18,-19,0};{0,0,0};{2,0,256};{4,-1,266};{6,-1,272};{8,-3,282};{9,-3,297};{11,-3,313};{12,-3,360};{13,-4,376};{14,-4,433};{15,-4,449};{16,-4,456};{18,-4,473};{19,-4,520};{19,-4,542};{19,-4,543};{19,-4,543};{19,-4,544};{20,-4,546};{20,-4,549};{20,-4,549};{20,-4,549};{20,-4,550};{20,-4,550};{20,-4,552};{20,-4,552};{20,-4,553};{20,-4,554};{21,-4,585};{22,-4,633};{24,-4,657};{24,-4,678};{24,-4,678};{24,-4,678};{25,-4,728};{27,-4,777};{28,-4,809};{29,-4,858};{30,-4,880};{31,-4,889};{32,-4,920};{33,-4,936};{34,-4,960};{35,-4,984};{36,-4,992};{37,-4,1016};{38,-4,1056};{39,-4,1089};{40,-4,1144};{41,-4,1176};{42,-4,1203};{43,-4,1219};{44,-4,1241};{46,-4,1250};{48,-4,1283};{49,-4,1329};{51,-4,1377};{52,-4,1441};{54,-4,1504};{55,-4,1530};{56,-4,1536};{57,-4,1547};{58,-4,1553};{60,-4,1577};{61,-4,1594};{63,-4,1649};{64,-4,1672};{66,-4,1704};{67,-3,1754};{68,-3,1906};{69,-3,1912};{71,-3,1928};{72,-3,1945};{73,-3,1960};{74,-3,1977};{75,-3,1993};{75,-2,2001};{76,-2,2064};{77,-2,2072};{78,-2,2089};{79,-2,2233};{80,-2,2408};{81,-2,2416};{82,-2,2450};{83,-2,2504};{84,-2,2552};{85,-2,2640};{86,-2,2664};{88,-1,2697};{89,-1,2768};{90,-1,2785};{91,-1,3120};{92,-1,3168};{94,0,3184};{95,0,3224};{96,0,3249};{97,0,3280};{97,1,3304};{98,1,3369};{99,1,3401};{100,1,3448};{101,1,3546};{102,1,3601};{103,1,3656};{104,1,3794};{106,1,3809};{107,1,3825};{108,1,3842};{109,1,3928};{110,1,3976};{111,1,4000};{112,2,4096};{113,2,4224};{114,2,4240};{115,2,4276};{116,3,4296};{117,3,4338};{118,3,4354};{119,3,4392};{120,3,4409};{121,3,4417};{121,4,4424};{122,4,4457};{123,4,4472};{124,4,4512};{125,4,4584};{126,4,4634};{127,4,4656};{128,4,4704};{129,4,4713};{130,4,4728};{131,4,4760};{132,4,4777};{133,4,4784};{134,5,4792};{135,5,4801};{136,5,4809};{138,6,4840};{139,6,4864};{140,6,4888};{141,6,4899};{142,6,4912};{143,6,4946};{144,6,4961};{145,6,4968};{146,6,4994};{147,6,5010};{148,6,5032};{149,6,5080};{150,6,5121};{151,6,5136};{152,6,5241};{153,6,5305};{155,7,5328};{156,7,5489};{157,7,5544};{158,7,5624};{159,7,5632};{160,7,5696};{162,8,5800};{162,9,5824};{163,9,5856};{164,9,5897};{165,9,5912};{166,9,5954};{167,9,5955};{168,9,5968};{169,9,6032};{170,9,6072};{171,9,6108};{172,9,6128};{173,9,6225};{174,9,6256};{175,9,6272};{176,9,6368};{177,9,6416};{178,9,6456};{179,9,6560};{181,10,6600};{182,10,6696};{183,10,6744};{184,10,6760};{185,10,6888};{186,10,6936};{187,10,6976};{188,10,7096};{189,10,7104};{190,10,7129};{191,10,7177};{192,10,7193};{193,10,7200};{194,10,7248};{195,10,7264};{196,10,7280};{198,11,7320};{198,12,7344};{199,12,7352};{200,12,7448};{201,12,7512};{202,12,7521};{203,12,7664};{204,12,7680};{205,12,7720};{206,12,7786};{207,12,7824};{208,13,7840};{209,13,8008};{209,13,8042};', 60 | '{-25,-20,0};{0,0,0};{-1,0,63};{-1,-1,79};{-1,-3,95};{0,-3,103};{0,-3,106};{0,-3,107};{0,-3,107};{0,-3,107};{0,-3,108};{0,-3,108};{0,-3,109};{0,-3,109};{0,-3,109};{1,-3,110};{2,-3,119};{5,-3,127};{8,-3,135};{9,-4,143};{12,-4,151};{15,-4,159};{19,-4,167};{23,-4,175};{28,-4,183};{33,-4,191};{37,-4,199};{42,-4,207};{49,-4,215};{57,-4,223};{62,-4,231};{71,-4,241};{77,-4,248};{77,-4,249};{77,-4,249};{77,-4,249};{86,-4,256};{91,-4,263};{95,-4,272};{100,-4,279};{103,-4,289};{107,-4,295};{111,-4,303};{115,-4,311};{118,-4,319};{120,-4,327};{124,-4,335};{127,-4,343};{128,-4,351};{130,-4,359};{132,-4,367};{134,-4,375};{137,-4,383};{139,-4,391};{140,-4,399};{141,-4,407};{142,-4,423};{143,-4,431};{144,-4,447};{145,-4,455};{146,-4,463};{148,-4,471};{150,-4,487};{151,-4,495};{154,-4,503};{157,-4,512};{158,-4,519};{160,-4,527};{162,-4,535};{164,-4,543};{165,-4,551};{166,-4,559};{167,-4,567};{168,-4,575};{169,-4,591};{170,-4,607};{171,-4,623};{172,-4,640};{174,-4,647};{175,-4,663};{176,-4,671};{177,-4,687};{178,-4,759};{179,-4,767};{180,-4,783};{181,-4,847};{182,-4,863};{183,-4,871};{184,-4,975};{185,-4,991};{186,-4,1056};{187,-4,1074};{188,-4,1079};{189,-4,1096};{189,-4,1463};', 61 | '{-23,-18,0};{0,0,0};{0,0,0};{0,1,285};{1,1,293};{3,1,309};{5,1,317};{8,1,325};{11,1,336};{14,1,341};{15,1,351};{17,1,357};{19,1,366};{21,1,373};{22,1,382};{24,1,389};{26,1,398};{29,1,405};{32,1,414};{33,1,421};{36,1,429};{39,1,437};{40,1,445};{43,1,453};{44,1,461};{46,1,469};{47,1,477};{50,1,486};{51,1,501};{54,1,509};{55,1,518};{57,1,525};{58,1,534};{61,2,541};{62,2,550};{64,2,557};{66,2,566};{68,2,573};{69,2,589};{70,2,597};{72,2,605};{73,2,621};{74,2,630};{75,2,637};{76,2,653};{77,2,662};{78,2,669};{79,2,686};{80,2,695};{81,2,701};{82,2,717};{84,2,725};{86,2,741};{87,2,749};{88,2,765};{89,2,781};{91,2,814};{92,2,821};{93,2,829};{94,2,837};{96,2,845};{97,2,853};{99,2,862};{100,2,869};{101,2,878};{102,2,886};{103,2,901};{104,2,909};{105,2,917};{107,2,943};{108,2,949};{109,2,957};{110,2,965};{111,2,973};{112,2,981};{115,2,990};{116,2,1007};{118,2,1014};{120,2,1029};{121,2,1039};{123,2,1054};{124,2,1061};{125,2,1070};{126,2,1086};{128,2,1094};{130,2,1109};{132,1,1117};{134,1,1150};{135,1,1205};{137,1,1229};{138,1,1253};{139,1,1285};{140,1,1325};{140,1,1598};', 62 | '{-11,-25,0};{0,0,0};{0,0,5};{3,1,229};{6,1,237};{8,1,245};{10,2,253};{11,2,262};{12,2,269};{13,2,278};{14,2,293};{16,2,333};{17,2,342};{18,2,373};{19,2,381};{20,2,389};{21,2,397};{22,2,406};{23,2,413};{24,2,421};{26,2,429};{27,2,437};{29,2,453};{30,2,477};{32,2,485};{33,2,493};{34,2,501};{35,2,509};{36,2,517};{38,2,525};{39,2,541};{40,2,558};{41,2,573};{42,2,581};{43,2,589};{45,2,597};{46,2,605};{48,2,613};{49,2,621};{52,2,629};{53,2,637};{56,2,645};{57,2,654};{59,2,661};{62,2,669};{67,2,677};{70,2,685};{73,2,693};{76,2,701};{78,2,709};{79,2,717};{81,2,725};{83,2,733};{85,2,749};{86,2,765};{88,2,773};{89,2,781};{90,2,789};{91,2,797};{92,2,813};{93,2,821};{94,2,829};{96,2,845};{96,3,854};{97,3,861};{98,3,877};{99,3,893};{100,3,902};{101,3,958};{102,3,1017};{103,3,1038};{104,3,1181};{105,3,1205};{107,4,1248};{108,4,1365};{109,4,1381};{110,4,1638};{110,4,1825};', 63 | '{-16,-23,0};{0,0,0};{1,0,232};{5,0,240};{7,0,248};{9,0,255};{10,0,264};{12,0,272};{14,1,280};{15,1,288};{17,1,296};{18,1,304};{19,2,320};{21,2,328};{22,2,336};{24,3,345};{26,3,352};{29,3,360};{32,3,368};{34,3,376};{37,3,384};{40,3,393};{45,5,400};{49,5,408};{55,6,416};{63,6,423};{67,6,432};{73,6,440};{78,6,448};{82,6,456};{85,6,464};{88,6,472};{89,6,488};{92,6,495};{96,6,504};{99,6,512};{100,6,528};{102,6,600};{103,6,624};{106,6,632};{110,7,642};{114,7,648};{118,7,658};{122,7,664};{128,7,674};{135,7,680};{142,7,689};{146,7,696};{150,7,705};{153,7,712};{155,7,720};{158,7,727};{161,7,736};{164,7,744};{166,7,752};{168,7,759};{169,7,768};{172,7,775};{174,7,784};{176,7,792};{177,7,895};{176,7,1104};{173,7,1118};{171,7,1131};{170,7,1149};{169,7,1641};{168,7,1657};{167,7,1704};{167,7,2144};', 64 | '{-10,-20,0};{0,0,0};{1,0,164};{2,0,212};{3,0,228};{4,0,244};{5,0,270};{6,0,277};{7,0,292};{8,0,309};{9,0,318};{10,0,324};{11,0,340};{12,0,356};{13,0,365};{14,0,388};{15,0,396};{16,0,404};{17,0,420};{18,0,429};{19,0,436};{20,0,468};{21,0,492};{22,0,524};{24,0,534};{25,0,550};{26,0,566};{27,0,572};{28,0,583};{30,0,597};{31,0,613};{33,0,630};{35,0,636};{36,0,646};{37,0,652};{39,0,661};{41,0,668};{43,0,677};{44,0,684};{45,0,692};{47,0,701};{48,0,716};{50,0,726};{51,0,748};{52,1,764};{53,1,780};{54,1,812};{55,1,820};{56,1,828};{57,1,845};{58,1,852};{59,1,861};{60,1,878};{61,1,884};{62,1,893};{63,1,900};{64,1,908};{65,1,916};{66,1,932};{68,1,941};{69,1,948};{70,2,964};{71,2,972};{72,2,980};{74,2,988};{75,2,1004};{77,2,1021};{78,2,1037};{80,2,1052};{80,3,1060};{81,3,1076};{83,3,1141};{84,3,1334};{86,3,1356};{87,3,1437};{87,2,1542};{86,2,1566};{84,1,1572};{83,1,1588};{81,1,1605};{80,1,1621};{79,1,1636};{78,1,1644};{77,1,1669};{76,0,1700};{76,0,2158};', 65 | '{-27,-20,0};{0,0,0};{1,0,175};{2,0,183};{5,0,191};{6,0,200};{8,0,215};{9,0,225};{10,0,232};{11,0,240};{12,0,263};{13,0,273};{15,0,279};{17,0,295};{18,0,304};{21,0,312};{22,0,320};{24,0,328};{26,0,336};{28,0,343};{30,0,352};{33,0,359};{36,0,369};{39,0,375};{41,0,383};{44,0,391};{47,0,399};{49,0,407};{52,0,415};{54,0,423};{55,0,431};{58,0,439};{60,0,447};{63,0,456};{66,0,464};{69,0,471};{70,0,479};{73,0,487};{74,0,495};{76,0,504};{77,0,523};{79,0,527};{81,0,543};{84,0,553};{85,0,559};{86,0,570};{87,0,576};{89,0,589};{90,0,593};{92,0,601};{93,0,608};{95,0,624};{97,0,633};{99,1,640};{100,1,648};{101,1,656};{103,1,666};{104,2,672};{106,2,688};{107,2,696};{108,2,704};{109,2,713};{110,2,728};{111,2,736};{113,2,744};{114,2,760};{116,2,771};{117,2,776};{118,2,784};{120,3,792};{120,4,802};{121,4,816};{122,4,824};{123,4,834};{125,4,840};{126,4,856};{128,4,866};{129,4,880};{131,4,904};{132,4,936};{133,4,944};{134,4,960};{135,4,976};{136,4,984};{137,4,992};{139,4,1008};{140,4,1016};{141,4,1024};{142,4,1032};{143,4,1040};{144,4,1048};{145,4,1064};{146,4,1072};{147,4,1080};{148,4,1113};{149,4,1121};{150,4,1152};{151,4,1688};{152,4,1818};{152,4,2331};' 66 | ] 67 | # return source_track 68 | 69 | # linux 和widow不同 # 从dos转为Unix 70 | # original = "t_dict_unix.pkl" 71 | # destination = "t_dict.pkl" 72 | # 73 | # content = '' 74 | # outsize = 0 75 | # with open(original, 'rb') as infile: 76 | # content = infile.read() 77 | # with open(destination, 'wb') as output: 78 | # for line in content.splitlines(): 79 | # outsize += len(line) + 1 80 | # output.write(line + str.encode('\n')) 81 | 82 | t_dict = pickle.load(open(base_dir + '/t_dict.pkl', 'rb')) 83 | 84 | if str(dist) in t_dict: 85 | print('in file %s' % dist) 86 | return t_dict[str(dist)], 1 87 | if str(dist - 1) in t_dict: 88 | print('in file %s-1' % (dist)) 89 | return t_dict[str(dist - 1)], 1 90 | if str(dist + 1) in t_dict: 91 | print('in file %s+1' % (dist)) 92 | return t_dict[str(dist + 1)], 1 93 | if str(dist - 2) in t_dict: 94 | print('in file %s-2' % (dist)) 95 | return t_dict[str(dist - 2)], 1 96 | if str(dist + 2) in t_dict: 97 | print('in file %s+2' % (dist)) 98 | return t_dict[str(dist + 2)], 1 99 | 100 | # 先前没有保存t_dict.pkl的时候 使用了source_track中的值 101 | # 若t_dick收集的完善,将不会执行到这一步,可将一下代码注释 102 | # 若某个小概率距离t_dick中未出现,则从source_track的轨迹中截取 103 | s = '{%d,' % dist 104 | print(s) 105 | tmp_track_list = [] 106 | for item in source_track[:]: 107 | if s in item: 108 | tmp_track_list.append(item) 109 | if len(tmp_track_list) > 0: 110 | return random.sample(tmp_track_list, 1)[0], 0 111 | else: 112 | return source_track[0], 0 113 | 114 | def choice_track(dist): 115 | track, tag = choice_track_list(dist) # 来自训练路径 tag=1 116 | # 规范化轨迹数据 [[x,y,t],...] 117 | track_list = format_track(track) # 路径列表 118 | # 若tag==0,即轨迹数据不在已收集的轨迹文件中(来自候选轨迹列表), 119 | # 则截取路径(从中截取需要的长度) 120 | if tag != 1: 121 | # 采用垃圾算法获取轨迹 建议重写 122 | new_track_list = get_trace_fast(dist) 123 | else: 124 | # tag==1 轨迹数据来自文件 直接赋值 125 | new_track_list = track_list 126 | return new_track_list 127 | 128 | if __name__ == '__main__': 129 | print(choice_track(76)) --------------------------------------------------------------------------------