Remove old and rusty Mac/ stuff
This commit is contained in:
parent
cc8fc781c4
commit
adbaa269f5
@ -1 +0,0 @@
|
||||
The stuff in this folder is old and rusty, don't pay too much attention to it...
|
322
Mac/TTX.py
322
Mac/TTX.py
@ -1,322 +0,0 @@
|
||||
"""Main TTX application, Mac-only"""
|
||||
|
||||
|
||||
#make sure we don't lose events to SIOUX
|
||||
import MacOS
|
||||
MacOS.EnableAppswitch(-1)
|
||||
|
||||
def SetWatchCursor():
|
||||
import Qd, QuickDraw
|
||||
Qd.SetCursor(Qd.GetCursor(QuickDraw.watchCursor).data)
|
||||
|
||||
def SetArrowCursor():
|
||||
import Qd
|
||||
Qd.SetCursor(Qd.qd.arrow)
|
||||
|
||||
SetWatchCursor()
|
||||
|
||||
# a few constants
|
||||
LOGFILENAME = "TTX errors"
|
||||
PREFSFILENAME = "TTX preferences"
|
||||
DEFAULTXMLOUTPUT = ":XML output"
|
||||
DEFAULTTTOUTPUT = ":TrueType output"
|
||||
|
||||
|
||||
import FrameWork
|
||||
import MiniAEFrame, AppleEvents
|
||||
import EasyDialogs
|
||||
import Res
|
||||
import macfs
|
||||
import os
|
||||
import sys, time
|
||||
import re, string
|
||||
import traceback
|
||||
from fontTools import ttLib, version
|
||||
from fontTools.ttLib import xmlImport
|
||||
from fontTools.ttLib.macUtils import ProgressBar
|
||||
|
||||
abouttext = """\
|
||||
TTX - The free TrueType to XML to TrueType converter
|
||||
(version %s)
|
||||
Copyright 1999-2001, Just van Rossum (Letterror)
|
||||
just@letterror.com""" % version
|
||||
|
||||
|
||||
class TTX(FrameWork.Application, MiniAEFrame.AEServer):
|
||||
|
||||
def __init__(self):
|
||||
FrameWork.Application.__init__(self)
|
||||
MiniAEFrame.AEServer.__init__(self)
|
||||
self.installaehandler(
|
||||
AppleEvents.kCoreEventClass, AppleEvents.kAEOpenApplication, self.do_nothing)
|
||||
self.installaehandler(
|
||||
AppleEvents.kCoreEventClass, AppleEvents.kAEPrintDocuments, self.do_nothing)
|
||||
self.installaehandler(
|
||||
AppleEvents.kCoreEventClass, AppleEvents.kAEOpenDocuments, self.handle_opendocumentsevent)
|
||||
self.installaehandler(
|
||||
AppleEvents.kCoreEventClass, AppleEvents.kAEQuitApplication, self.handle_quitevent)
|
||||
|
||||
def idle(self, event):
|
||||
SetArrowCursor()
|
||||
|
||||
def makeusermenus(self):
|
||||
m = FrameWork.Menu(self.menubar, "File")
|
||||
FrameWork.MenuItem(m, "Open...", "O", self.domenu_open)
|
||||
FrameWork.Separator(m)
|
||||
FrameWork.MenuItem(m, "Quit", "Q", self._quit)
|
||||
|
||||
def do_about(self, *args):
|
||||
EasyDialogs.Message(abouttext)
|
||||
|
||||
def handle_quitevent(self, *args, **kwargs):
|
||||
self._quit()
|
||||
|
||||
def domenu_open(self, *args):
|
||||
fss, ok = macfs.StandardGetFile()
|
||||
if ok:
|
||||
self.opendocument(fss.as_pathname())
|
||||
|
||||
def handle_opendocumentsevent(self, docs, **kwargs):
|
||||
if type(docs) <> type([]):
|
||||
docs = [docs]
|
||||
for doc in docs:
|
||||
fss, a = doc.Resolve()
|
||||
path = fss.as_pathname()
|
||||
self.opendocument(path)
|
||||
|
||||
def opendocument(self, path):
|
||||
filename = os.path.basename(path)
|
||||
filetype = guessfiletype(path)
|
||||
handler = getattr(self, "handle_%s_file" % filetype)
|
||||
handler(path)
|
||||
|
||||
def handle_xml_file(self, path):
|
||||
prefs = getprefs()
|
||||
makesuitcase = int(prefs.get("makesuitcases", 0))
|
||||
dstfolder = prefs.get("ttoutput", DEFAULTTTOUTPUT)
|
||||
if not os.path.exists(dstfolder):
|
||||
os.mkdir(dstfolder)
|
||||
srcfilename = dstfilename = os.path.basename(path)
|
||||
if dstfilename[-4:] in (".ttx", ".xml"):
|
||||
dstfilename = dstfilename[:-4]
|
||||
if dstfilename[-4:] not in (".TTF", ".ttf"):
|
||||
dstfilename = dstfilename + ".TTF"
|
||||
dst = os.path.join(dstfolder, dstfilename)
|
||||
|
||||
if makesuitcase:
|
||||
try:
|
||||
# see if the destination file is writable,
|
||||
# otherwise we'll get an error waaay at the end of
|
||||
# the parse procedure
|
||||
testref = Res.FSpOpenResFile(macfs.FSSpec(dst), 3) # read-write
|
||||
except Res.Error, why:
|
||||
if why[0] <> -43: # file not found
|
||||
EasyDialogs.Message("Can't create '%s'; file already open" % dst)
|
||||
return
|
||||
else:
|
||||
Res.CloseResFile(testref)
|
||||
else:
|
||||
try:
|
||||
f = open(dst, "wb")
|
||||
except IOError, why:
|
||||
EasyDialogs.Message("Can't create '%s'; file already open" % dst)
|
||||
return
|
||||
else:
|
||||
f.close()
|
||||
pb = ProgressBar("Reading TTX file '%s'..." % srcfilename)
|
||||
try:
|
||||
tt = ttLib.TTFont()
|
||||
tt.importXML(path, pb)
|
||||
pb.setlabel("Compiling and saving...")
|
||||
tt.save(dst, makesuitcase)
|
||||
finally:
|
||||
pb.close()
|
||||
|
||||
def handle_datafork_file(self, path):
|
||||
prefs = getprefs()
|
||||
dstfolder = prefs.get("xmloutput", DEFAULTXMLOUTPUT)
|
||||
if not os.path.exists(dstfolder):
|
||||
os.mkdir(dstfolder)
|
||||
filename = os.path.basename(path)
|
||||
pb = ProgressBar("Dumping '%s' to XML..." % filename)
|
||||
if filename[-4:] in (".TTF", ".ttf"):
|
||||
filename = filename[:-4]
|
||||
filename = filename + ".ttx"
|
||||
dst = os.path.join(dstfolder, filename)
|
||||
try:
|
||||
tt = ttLib.TTFont(path)
|
||||
tt.saveXML(dst, pb)
|
||||
finally:
|
||||
pb.close()
|
||||
|
||||
def handle_resource_file(self, path):
|
||||
prefs = getprefs()
|
||||
dstfolder = prefs.get("xmloutput", DEFAULTXMLOUTPUT)
|
||||
if not os.path.exists(dstfolder):
|
||||
os.mkdir(dstfolder)
|
||||
filename = os.path.basename(path)
|
||||
fss = macfs.FSSpec(path)
|
||||
try:
|
||||
resref = Res.FSpOpenResFile(fss, 1) # read-only
|
||||
except:
|
||||
return "unknown"
|
||||
Res.UseResFile(resref)
|
||||
pb = None
|
||||
try:
|
||||
n = Res.Count1Resources("sfnt")
|
||||
for i in range(1, n+1):
|
||||
res = Res.Get1IndResource('sfnt', i)
|
||||
resid, restype, resname = res.GetResInfo()
|
||||
if not resname:
|
||||
resname = filename + `i`
|
||||
pb = ProgressBar("Dumping '%s' to XML..." % resname)
|
||||
dst = os.path.join(dstfolder, resname + ".ttx")
|
||||
try:
|
||||
tt = ttLib.TTFont(path, i)
|
||||
tt.saveXML(dst, pb)
|
||||
finally:
|
||||
pb.close()
|
||||
finally:
|
||||
Res.CloseResFile(resref)
|
||||
|
||||
def handle_python_file(self, path):
|
||||
pass
|
||||
#print "python", path
|
||||
|
||||
def handle_unknown_file(self, path):
|
||||
EasyDialogs.Message("Cannot open '%s': unknown file kind" % os.path.basename(path))
|
||||
|
||||
def do_nothing(self, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def mainloop(self, mask=FrameWork.everyEvent, wait=0):
|
||||
self.quitting = 0
|
||||
while not self.quitting:
|
||||
try:
|
||||
self.do1event(mask, wait)
|
||||
except self.__class__:
|
||||
# D'OH! FrameWork tries to quit us on cmd-.!
|
||||
pass
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
except ttLib.xmlImport.xml_parse_error, why:
|
||||
EasyDialogs.Message(
|
||||
"An error occurred while parsing the XML file:\n" + why)
|
||||
except:
|
||||
exc = traceback.format_exception(sys.exc_type, sys.exc_value, None)[0]
|
||||
exc = string.strip(exc)
|
||||
EasyDialogs.Message("An error occurred!\n%s\n[see the logfile '%s' for details]" %
|
||||
(exc, LOGFILENAME))
|
||||
traceback.print_exc()
|
||||
|
||||
def do_kHighLevelEvent(self, event):
|
||||
import AE
|
||||
AE.AEProcessAppleEvent(event)
|
||||
|
||||
|
||||
|
||||
def guessfiletype(path):
|
||||
#if path[-3:] == ".py":
|
||||
# return "python"
|
||||
f = open(path, "rb")
|
||||
data = f.read(21)
|
||||
f.close()
|
||||
if data[:5] == "<?xml":
|
||||
return "xml"
|
||||
elif data[:4] in ("\000\001\000\000", "OTTO", "true"):
|
||||
return "datafork"
|
||||
else:
|
||||
# assume res fork font
|
||||
fss = macfs.FSSpec(path)
|
||||
try:
|
||||
resref = Res.FSpOpenResFile(fss, 1) # read-only
|
||||
except:
|
||||
return "unknown"
|
||||
Res.UseResFile(resref)
|
||||
i = Res.Count1Resources("sfnt")
|
||||
Res.CloseResFile(resref)
|
||||
if i > 0:
|
||||
return "resource"
|
||||
return "unknown"
|
||||
|
||||
|
||||
default_prefs = """\
|
||||
xmloutput: ":XML output"
|
||||
ttoutput: ":TrueType output"
|
||||
makesuitcases: 1
|
||||
"""
|
||||
|
||||
def getprefs(path=PREFSFILENAME):
|
||||
if not os.path.exists(path):
|
||||
f = open(path, "w")
|
||||
f.write(default_prefs)
|
||||
f.close()
|
||||
f = open(path)
|
||||
lines = f.readlines()
|
||||
prefs = {}
|
||||
for line in lines:
|
||||
if line[-1:] == "\n":
|
||||
line = line[:-1]
|
||||
try:
|
||||
name, value = re.split(":", line, 1)
|
||||
prefs[string.strip(name)] = eval(value)
|
||||
except:
|
||||
pass
|
||||
return prefs
|
||||
|
||||
|
||||
class dummy_stdin:
|
||||
def readline(self):
|
||||
return ""
|
||||
sys.stdin = dummy_stdin()
|
||||
|
||||
# redirect all output to a log file
|
||||
sys.stdout = sys.stderr = open(LOGFILENAME, "w", 0) # unbuffered
|
||||
print "Starting TTX at " + time.ctime(time.time())
|
||||
|
||||
# fire it up!
|
||||
ttx = TTX()
|
||||
ttx.mainloop()
|
||||
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# clues for BuildApplication/MacFreeze.
|
||||
#
|
||||
# These modules somehow get imported, but we don't want/have them:
|
||||
#
|
||||
# macfreeze: exclude msvcrt
|
||||
# macfreeze: exclude W
|
||||
# macfreeze: exclude SOCKS
|
||||
# macfreeze: exclude TERMIOS
|
||||
# macfreeze: exclude termios
|
||||
# macfreeze: exclude icglue
|
||||
# macfreeze: exclude ce
|
||||
#
|
||||
# these modules are imported dynamically, so MacFreeze won't see them:
|
||||
#
|
||||
# macfreeze: include fontTools.ttLib.tables._c_m_a_p
|
||||
# macfreeze: include fontTools.ttLib.tables._c_v_t
|
||||
# macfreeze: include fontTools.ttLib.tables._f_p_g_m
|
||||
# macfreeze: include fontTools.ttLib.tables._g_a_s_p
|
||||
# macfreeze: include fontTools.ttLib.tables._g_l_y_f
|
||||
# macfreeze: include fontTools.ttLib.tables._h_d_m_x
|
||||
# macfreeze: include fontTools.ttLib.tables._h_e_a_d
|
||||
# macfreeze: include fontTools.ttLib.tables._h_h_e_a
|
||||
# macfreeze: include fontTools.ttLib.tables._h_m_t_x
|
||||
# macfreeze: include fontTools.ttLib.tables._k_e_r_n
|
||||
# macfreeze: include fontTools.ttLib.tables._l_o_c_a
|
||||
# macfreeze: include fontTools.ttLib.tables._m_a_x_p
|
||||
# macfreeze: include fontTools.ttLib.tables._n_a_m_e
|
||||
# macfreeze: include fontTools.ttLib.tables._p_o_s_t
|
||||
# macfreeze: include fontTools.ttLib.tables._p_r_e_p
|
||||
# macfreeze: include fontTools.ttLib.tables._v_h_e_a
|
||||
# macfreeze: include fontTools.ttLib.tables._v_m_t_x
|
||||
# macfreeze: include fontTools.ttLib.tables.L_T_S_H_
|
||||
# macfreeze: include fontTools.ttLib.tables.O_S_2f_2
|
||||
# macfreeze: include fontTools.ttLib.tables.T_S_I__0
|
||||
# macfreeze: include fontTools.ttLib.tables.T_S_I__1
|
||||
# macfreeze: include fontTools.ttLib.tables.T_S_I__2
|
||||
# macfreeze: include fontTools.ttLib.tables.T_S_I__3
|
||||
# macfreeze: include fontTools.ttLib.tables.T_S_I__5
|
||||
# macfreeze: include fontTools.ttLib.tables.C_F_F_
|
||||
|
@ -1,68 +0,0 @@
|
||||
(This file must be converted with BinHex 4.0)
|
||||
:#&48@#jbFh*M!(*cFQ058d9%!3!!!!!!!!!-5eK3!!!!!!%!!!!+kJ!!#HS!!!&
|
||||
KJ'-!!%[qIYf!IJ!)5rjqr6KJ!!")!!!8J*m!!$Kr!!!)9&4B,R*cFQ0c,d0[FQp
|
||||
eG'PZCA0c8hPcC'9bC@eLC3),FR0bBe*6483"!!!f!-%!!!!!!!!!!!!!!!!!!!!
|
||||
!!!#dKq%9!!!!!!!!$%B!!$L&!'*,rr2T,!-!!%##!!`iB!!!5!!!J)!G!!JS!!!
|
||||
!3B)!1)!G!"3S!!!!3B)!*)"LLqJi!!!!N!!$!!#!I3!)JCd!&%J*2df!33!81m-
|
||||
!!$J!!!#3!"d!##`Hrrp!JJ!8J'+,f)"M!!",rRi*5!!!+#`H!!""JJ!31(i!!%[
|
||||
pE68!!!!39%9B9&)UBfJ!U$!a1$%!!!!!!!`%!!!!!!!!!3%"!!!!!!!"!!!!!!G
|
||||
"8&"-!!!!!!!#!2!!!!!!!!!!!!!!!!!!!!$r%4%4%4%4%4%4%4%4%4%Jrr)5%K)
|
||||
5%K)5%K)5%K)5X2rr)5%K)5%K)5%K)5%K)E$rrr)5%K)5%K)5%K)5%K+`rrrr)5%
|
||||
K)5%K)5%K)5%KX2rrrr)5'lX5%K)5%K)5%V$rrrrr)5rrS5%K)5rk)5'`rrrrmK+
|
||||
[rr)5%K,rra)5X2rrrb%Krrrl)5'rrrmK)E$rrr)5'rrrqK)Errrk%K+`rrmK)5V
|
||||
krrmK[rrrqL%KX2rb%K)DSUrrS[qUUU)5%V$r)5%K)5'rrrrk)5%K)5'`m4)5%K)
|
||||
5(rrrSK)5%K)5X!%K)5%K)5VrqL%K)5%K)E!"%K)5%K)DrrX5%K)5%K+`!5%K)5%
|
||||
K,rrk)5%Km5%KX!%5%K)5%[rrra)5%[m5%V!")5'a)5VkrrqUUb(rm5'`!4)DqK+
|
||||
[SUrrrrm5rrm5X!%K,rq[qb'rrrrl)IrrmE!"%Krrrl)5[rrrmK,rrrq`!5%[rrS
|
||||
K)5Vrrk%Krrrrm!%5(rqL%K)5rrS5%[rrrrm")5'l)5%K)5Ul)5(rrrr`!4)5%K)
|
||||
5%K)5%K)5rrrr!!%K)5%K)5%K)5%K)Irrm!!"%K)5%K)5%K)5%K,rr`!!!5%K)5%
|
||||
K)5%K)5%Krr!!!!+lZlZlZlZlZlZlZrm!!!!!!!!!!!!!!!!!!!$`!!!!!!!%!2m
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrm,#`X,#`X,#`X,#`X,#`X
|
||||
,#`X,#`X,#`X,#`X,%3$rrrm4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4&I!2r
|
||||
rrrm4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%9m!rrrrrrm4%4%4%4%4%4%4%4%
|
||||
4%4%4%4%4%4%4%4%4A`$rrrrrrrm4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4&I!2r
|
||||
rrrrrrrm4%4%4AepI04%4%4%4%4%4068e%4%4%9m!rrrrrrrrrrm4%6Arrrq*%4%
|
||||
4%4%4%6AJp)N4%4%4A`$rrrrrrrrr%4%4rIrrrrme%4%4%4%ehrrri"%4%4&I!2r
|
||||
rrrrrra%4%6Arrrrrrem4%4%4Arlrrrrr%4%4%9m!rrrrrrm4%4%4ArrrrrrrV4%
|
||||
4%9rrrrrrrrd4%4%4A`$rrrrr%4%4%4'*rrhrrrrJ04&Ii2rrrrrrV4%4%4&I!2r
|
||||
rra%4%4%4%Df*0Dhrrrq*%IlrVB1*rBNe%4%4%9m!rrm4%4%4%4%41c84Arrrrrr
|
||||
qrkde%4%4%4%4%4%4A`$r#a%4%4%4%4%4%4%er[rrrrq*04%4%4%4%4%4%4&I!!!
|
||||
,%4%4%4%4%4%4%4'YrrrrV684%4%4%4%4%4%4%9m!!!X4%4%4%4%4%4%4%BRrrrp
|
||||
I%4%4%4%4%4%4%4%4A`!!#a%4%4%4%4%4%4%er[rrriN4%4%4%4(r%4%4%4&I!!!
|
||||
,%4%4%4%4%4%40IlrrrrrrM84%4%4%Irr%4%4%9m!!!X4%4%eAc84%4'Yrkhqrrr
|
||||
rLB1YAa%4rrrr%4%4A`!!#a%4%BRdL4%eLIq$%BRrrrrrrrrq04(rrrrr%4&I!!!
|
||||
,%4%4r[rqVIlrAa%4Arrrrrrrrem4%Irrrrrr%9m!!!X4%6Arrrrrrem4%4&Irrr
|
||||
rrrrI04%4rrrrrrrrA`!!#a%40Irrrrq*%4%4%6@Yrrrrri-4%4(rrrrrrrrr!!!
|
||||
,%4%er[rrL4%4%4%4%6[rrrq*04%4%Irrrrrrrrrr!!X4%4%eAeme%4%4%4%4%6Z
|
||||
$Ac34%4%4rrrrrrrrr`!!#a%4%4%4%4%4%4%4%4%4%4%4%4%4%4(rrrrrrrm!!!!
|
||||
,%4%4%4%4%4%4%4%4%4%4%4%4%4%4%Irrrrrr!!!!!!X4%4%4%4%4%4%4%4%4%4%
|
||||
4%4%4%4%4rrrrr`!!!!!!#a%4%4%4%4%4%4%4%4%4%4%4%4%4%4(rrrm!!!!!!!!
|
||||
4AepIAepIAepIAepIAepIAepIAepIArrr!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!!!!!!!!!r`!!!!!!!!!!!!%!J!!!!2rrrrlJ!!!#m!!!![J!!!,m!!!#rK`!![m
|
||||
H!B,q2J2#r$m(`[Kr$m,`Iar#i'qrJX!2m!,!"q!#3!I!!N!(J!*!"i##3!r!`N)
|
||||
Ic1*(1rcb4r2mqNIMq2j(`IMq4i(`rd-!i2j!!!$m3!!!q%!!!2"!!!$JIrrr`!!
|
||||
!!)#!!!!!rrrrr[rrrrlrrrrqrrrrr[rrrrlrrrrqrrrrr[rrrrlrrrrqrrrrr[r
|
||||
rrrlrrrrqrrrrr[rrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRr
|
||||
rrrjrrrrrIrrrrRrrrrarrrriIrrrm(rrrq"rrrr!!!!!J!!!!%$rrm!"i!(h'IF
|
||||
jlhR,HB2"JiQAVEh[[Hqjci!1J!crq2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
|
||||
rrrlrr2ri!!!!J2%4%4%4%4%5rb%K)5%K)5[rmK)5%K)5'rrr+rSK,r%VrrmIra,
|
||||
rmK[rmErr,rra+rm5U[rrUU)Em5%KrrSK)5X5%K,rmK,b'a%V+[rkXImV%[rrVrr
|
||||
brrX4rrX[rr(rra,rXK,r%[rr%5%K)5%Krr!5%K)5%K,r!#ZlZlZlZr!!!!!"!2m
|
||||
,#`X,#`X,#`X,#`X,#a(rra%4%4%4%4%4%4%4%4&Irrrr%4%4%4%4%4%4%4%4Arr
|
||||
rrrm40Iq*%4%4Ar34%9rrrrrr09rrra%4r[rr%4&Irrrr%9rrrrmei2rrra%4Arr
|
||||
r%4'YLIrrrrqYrBN4%9rr%4%4%4(qrrq*%4%4%4&I#a%4%4%4r[rr%4%4ra%4A`X
|
||||
409m4VIrrriQY%Irr%9m,%Ilrr[pIrrrrrcArrrpI#a(rrrpI%BRrrpm4rrrrr`X
|
||||
4r[pI%4%lrrme%Irrrrm,%4%4%4%4%4%4%4(rrrm!#a%4%4%4%4%4%4%4rrm!!"&
|
||||
IAepIAepIAepIArm!!!!!!!!(+LSU+J!"!!!!!#48G&KU!!!!!8C548B!!3!!!)!
|
||||
!!3#"5801)`!"!!!!J!!"!!!!!!!+81!!HK)!!"EMB!!!!!T3i!#lI!!!I2`!!!!
|
||||
!#P$J!,Ym!!!@if!!!!!Z!3G!!!!!"Na88Lp54L"")'CbC@8J6'9dG'9bFQpb,e*
|
||||
[BQp'EfFJF(*[C(9MG!!!!%X""d!!!!!&-5i`B6Bq-5i`B6FJ,5"MEh"jFQPRD(3
|
||||
J-6Nj15db-$!`)%TeFh3JGQ&Z)&*[Fh0eE5`J6'9dG'9bFQpb,e*[BQp'EfF!!!%
|
||||
!!!!+kJ!!#HS!!!&K"Z5f9%Y)!!!!(!&5!!a(9EG*!!!!DP"[F(3!!!"f3Nj%6!!
|
||||
!!)*8G&KU!!!!MNC548B!!3#DD@0X0!!!!,**3diM!!!![QPMFb-!!!$+D@0c0!!
|
||||
!!0CTBh-i!!!!iRCPFR-!!3$Z8dPD43!#!3CTBf`i!!!"+LJ"rrm!!!!!!!!!!!$
|
||||
Prrm!!!!8!!!!!!#!rrm!!!NA!!!!!!!!!!!!!!!N!!!!!!#!rrm!!!!T!!!!!!#
|
||||
"rrm!!!N-!!!!!!#!rrm!!!!d!!!!!!#!rrm!!!Bm!!!!!!#!rrm!!!G!!!!!!!#
|
||||
!rrm!!!H%!!!!!!#!rrm!!!J)!!!!!!!"rrm!!!QE"Z5e,!!#rrm!!!PT"Z5e-2r
|
||||
rrrm!!!Nr"Z5e*!!"rrm!!!P0"Z5e+!!!rrm!!!PE"Z5e)!#!rrm!!!)i!!!!!!j
|
||||
2GfjPFL"bCA0[GA*MCHPB:
|
Loading…
x
Reference in New Issue
Block a user