#*************************************************************************** #* * #* Copyright (c) 2011, 2012 * #* Jose Luis Cercos Pita * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * #* as published by the Free Software Foundation; either version 2 of * #* the License, or (at your option) any later version. * #* for detail see the LICENCE text file. * #* * #* This program is distributed in the hope that it will be useful, * #* but WITHOUT ANY WARRANTY; without even the implied warranty of * #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * #* GNU Library General Public License for more details. * #* * #* You should have received a copy of the GNU Library General Public * #* License along with this program; if not, write to the Free Software * #* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * #* USA * #* * #*************************************************************************** import time # COIN from pivy.coin import * from pivy import coin # FreeCAD import FreeCAD,FreeCADGui from FreeCAD import Base, Vector import Part # Ship design module from shipUtils import Paths, Translator, Math class ShipTank: def __init__(self, obj, solid, level=0, density=998.0): """ Creates a new tank on active document. @param obj Created Part::FeaturePython object. @param solid Solid shape that represent the tank. @param level Tank filling level. @param density Fluid density. """ # Add uniqueness property to identify Tank instances obj.addProperty("App::PropertyBool","IsShipTank","ShipTank", str(Translator.translate("True if is a valid ship tank instance"))).IsShipTank=True # Add general options obj.addProperty("App::PropertyFloat","Level","ShipTank", str(Translator.translate("Fluid filling level percentage"))).Level=level obj.addProperty("App::PropertyFloat","Density","ShipTank", str(Translator.translate("Inside fluid density"))).Density=density # Add shapes shape = self.computeShape(solid) if not shape: obj.IsShipTank=False return obj.Shape = shape obj.Proxy = self def onChanged(self, fp, prop): """ Property changed, tank must be recomputed """ if prop == "IsShipTank": FreeCAD.Console.PrintWarning("Ussually you don't want to modify manually this option.\n") elif prop == "Level": if fp.Level > 100.0: fp.Level = 100.0 elif fp.Level < 0.0: fp.Level = 0.0 def execute(self, obj): """ Shape recomputation called """ obj.Shape = self.computeShape(obj.Shape) def computeShape(self, solid): """ Create faces shape. This method also calls to generate boxes. @param solid Solid shape that represent the tank. @return Computed solid shape. None if can't build it. """ # Study input to try to build a solid if solid.isDerivedFrom('Part::Feature'): # Get shape shape = solid.Shape if not shape: return None solid = shape if not solid.isDerivedFrom('Part::TopoShape'): return None # Get shells shells = solid.Shells if not shells: return None # Build solids solids = [] for s in shells: solid = Part.Solid(s) if solid.Volume < 0.0: solid.reverse() solids.append(solid) # Create compound shape = Part.CompSolid(solids) return shape class ViewProviderShipTank: def __init__(self, obj): """ Set this object to the proxy object of the actual view provider """ obj.Proxy = self def attach(self, obj): """ Setup the scene sub-graph of the view provider, this method is mandatory """ return def updateData(self, fp, prop): """ If a property of the handled feature has changed we have the chance to handle this here """ return def getDisplayModes(self,obj): ''' Return a list of display modes. ''' modes=[] return modes def getDefaultDisplayMode(self): ''' Return the name of the default display mode. It must be defined in getDisplayModes. ''' return "Shaded" def setDisplayMode(self,mode): ''' Map the display mode defined in attach with those defined in getDisplayModes. Since they have the same names nothing needs to be done. This method is optinal. ''' return mode def onChanged(self, vp, prop): ''' Print the name of the property that has changed ''' # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n") def __getstate__(self): ''' When saving the document this object gets stored using Python's cPickle module. Since we have some un-pickable here -- the Coin stuff -- we must define this method to return a tuple of all pickable objects or None. ''' return None def __setstate__(self,state): ''' When restoring the pickled object from document we have the chance to set some internals here. Since no data were pickled nothing needs to be done here. ''' return None def getIcon(self): return """ /* XPM */ static char * Tank_xpm[] = { "128 128 1605 2", " c None", ". c #000000", "+ c #D1D1D1", "@ c #D2D2D2", "# c #D3D3D3", "$ c #D3D4D4", "% c #D5D5D5", "& c #CFD0CF", "* c #D0D0D0", "= c #D3D2D3", "- c #D4D4D3", "; c #D5D6D5", "> c #D6D6D6", ", c #D7D7D7", "' c #CDCECE", ") c #CFCECE", "! c #D0CFCF", "~ c #D3D3D2", "{ c #D3D3D4", "] c #D5D4D5", "^ c #D6D7D6", "/ c #D8D8D8", "( c #D8D8D9", "_ c #D9D9DA", ": c #CCCCCB", "< c #CCCCCC", "[ c #CECECD", "} c #CECECE", "| c #CFCFCF", "1 c #D1D2D2", "2 c #D5D4D4", "3 c #D8D9D9", "4 c #DAD9DA", "5 c #DADBDB", "6 c #DBDCDB", "7 c #CACACA", "8 c #CACBCB", "9 c #CBCBCB", "0 c #CCCDCD", "a c #CECDCD", "b c #D2D2D1", "c c #D2D3D3", "d c #D4D3D3", "e c #D9D9D8", "f c #D9D9D9", "g c #DADBDA", "h c #DBDCDC", "i c #DCDCDC", "j c #DDDDDD", "k c #DEDEDE", "l c #C7C8C8", "m c #C9C9C9", "n c #CAC9CA", "o c #CBCBCC", "p c #CCCDCC", "q c #CDCDCD", "r c #D0D1D1", "s c #D1D2D1", "t c #D3D2D2", "u c #D4D4D5", "v c #D5D5D6", "w c #D6D7D7", "x c #D8D7D8", "y c #D9D8D9", "z c #DADAD9", "A c #DBDADA", "B c #DBDBDC", "C c #DDDCDD", "D c #DDDEDE", "E c #DEDFDE", "F c #DFE0E0", "G c #E0E0E1", "H c #C6C6C6", "I c #C7C7C7", "J c #C8C8C7", "K c #C9C9C8", "L c #CACAC9", "M c #CBCACB", "N c #D0CFD0", "O c #D1D0D1", "P c #D1D1D2", "Q c #D4D4D4", "R c #D6D5D6", "S c #D7D6D7", "T c #D7D8D8", "U c #DAD9D9", "V c #DADADA", "W c #DBDBDB", "X c #DCDBDC", "Y c #DDDDDC", "Z c #DFDEDF", "` c #E0DFDF", " . c #E0E0E0", ".. c #E1E1E1", "+. c #E2E2E2", "@. c #C5C4C4", "#. c #C5C5C5", "$. c #C8C8C8", "%. c #C9C8C8", "&. c #D5D5D4", "*. c #D8D7D7", "=. c #D9D8D8", "-. c #DCDDDD", ";. c #DEDDDD", ">. c #E3E4E3", ",. c #E5E4E4", "'. c #C4C4C4", "). c #C6C7C6", "!. c #C7C8C7", "~. c #C8C8C9", "{. c #CACACB", "]. c #CCCBCB", "^. c #D0D0D1", "/. c #D5D6D6", "(. c #D7D7D6", "_. c #DFDFDF", ":. c #E1E2E2", "<. c #E3E3E3", "[. c #E4E3E4", "}. c #E6E5E5", "|. c #E6E6E6", "1. c #E6E7E7", "2. c #C4C5C5", "3. c #C6C6C7", "4. c #CFD0D0", "5. c #D1D0D0", "6. c #D6D5D5", "7. c #DADADB", "8. c #DCDDDC", "9. c #DDDDDE", "0. c #DEDFDF", "a. c #E1E1E2", "b. c #E3E2E2", "c. c #E4E4E4", "d. c #E5E5E5", "e. c #E8E8E7", "f. c #E9E8E9", "g. c #EAE9EA", "h. c #C5C5C4", "i. c #C6C6C5", "j. c #C7C7C6", "k. c #CBCACA", "l. c #CDCDCC", "m. c #CECFCF", "n. c #DBDADB", "o. c #E0E0DF", "p. c #E1E1E0", "q. c #E1E2E1", "r. c #E3E3E4", "s. c #E4E5E5", "t. c #E7E6E7", "u. c #E7E7E8", "v. c #E9E9E8", "w. c #E9EAE9", "x. c #EAEAEA", "y. c #EBEBEA", "z. c #C4C5C4", "A. c #C6C5C5", "B. c #C6C7C7", "C. c #CCCCCD", "D. c #CECECF", "E. c #D9DAD9", "F. c #DBDBDA", "G. c #DEDEDD", "H. c #E0DFE0", "I. c #E0E1E0", "J. c #E6E5E6", "K. c #E7E7E6", "L. c #E7E8E7", "M. c #E8E8E9", "N. c #E9E9E9", "O. c #ECECEC", "P. c #ECEDED", "Q. c #EDEDEE", "R. c #010101", "S. c #C5C4C5", "T. c #CBCCCB", "U. c #CDCCCC", "V. c #CECFCE", "W. c #CFCFCE", "X. c #CFCFD0", "Y. c #D7D8D7", "Z. c #DEDDDE", "`. c #E1E0E0", " + c #E5E6E6", ".+ c #EBEBEB", "++ c #ECEBEC", "@+ c #EDEDED", "#+ c #EEEEEE", "$+ c #EFEFEF", "%+ c #F0F0F0", "&+ c #C4C4C5", "*+ c #CFCECF", "=+ c #D2D1D1", "-+ c #D6D6D5", ";+ c #D8D9D8", ">+ c #DDDEDD", ",+ c #DFDEDE", "'+ c #E2E3E3", ")+ c #E7E7E7", "!+ c #E8E8E8", "~+ c #EBECEC", "{+ c #ECEDEC", "]+ c #EFEFF0", "^+ c #F1F0F1", "/+ c #F1F1F1", "(+ c #C7C6C6", "_+ c #C9C8C9", ":+ c #C9CAC9", "<+ c #CACBCA", "[+ c #D2D2D3", "}+ c #D4D5D5", "|+ c #DCDCDB", "1+ c #E3E3E2", "2+ c #E4E3E3", "3+ c #E4E4E5", "4+ c #E5E5E6", "5+ c #EAEAE9", "6+ c #ECEBEB", "7+ c #F0F0EF", "8+ c #F0F0F1", "9+ c #C8C7C8", "0+ c #C8C9C9", "a+ c #CBCBCA", "b+ c #CCCBCC", "c+ c #D7D6D6", "d+ c #DDDCDC", "e+ c #E2E2E1", "f+ c #E2E3E2", "g+ c #E3E4E4", "h+ c #E8E7E8", "i+ c #E9E8E8", "j+ c #EAE9E9", "k+ c #EDECEC", "l+ c #EEEEED", "m+ c #EFEEEF", "n+ c #EFF0F0", "o+ c #F1F0F0", "p+ c #C5C6C6", "q+ c #C7C6C7", "r+ c #D0D0CF", "s+ c #D4D5D4", "t+ c #E1E0E1", "u+ c #E8E9E9", "v+ c #EDECED", "w+ c #EEEDED", "x+ c #EEEFEF", "y+ c #F0EFF0", "z+ c #F0F1F0", "A+ c #D7D7D8", "B+ c #C8C7C7", "C+ c #C9C9CA", "D+ c #D2D1D2", "E+ c #D9DADA", "F+ c #E2E1E1", "G+ c #E9E9EA", "H+ c #EAEBEB", "I+ c #D8D8D7", "J+ c #CBCCCC", "K+ c #CDCCCD", "L+ c #D6D6D7", "M+ c #E6E6E5", "N+ c #E7E6E6", "O+ c #E8E7E7", "P+ c #EFEEEE", "Q+ c #CDCECD", "R+ c #D1D1D0", "S+ c #D2D3D2", "T+ c #DFE0DF", "U+ c #E3E2E3", "V+ c #E4E5E4", "W+ c #E5E6E5", "X+ c #ECECED", "Y+ c #D4D3D4", "Z+ c #CECDCE", "`+ c #E6E6E7", " @ c #EBEAEB", ".@ c #ECECEB", "+@ c #F0F1F1", "@@ c #DCDCDD", "#@ c #EBEAEA", "$@ c #F0EFEF", "%@ c #D3D4D3", "&@ c #E6E7E6", "*@ c #EEEDEE", "=@ c #ADADAD", "-@ c #565656", ";@ c #DCDBDB", ">@ c #DFDFE0", ",@ c #E7E8E8", "'@ c #E8E9E8", ")@ c #EDEDEC", "!@ c #EBEBEC", "~@ c #EEEFEE", "{@ c #B7B6B7", "]@ c #E5E4E5", "^@ c #EDEEED", "/@ c #B6B6B6", "(@ c #B6B7B7", "_@ c #B7B7B6", ":@ c #B7B6B6", "<@ c #E5E5E4", "[@ c #B5B6B5", "}@ c #B5B6B6", "|@ c #B5B5B5", "1@ c #B6B5B5", "2@ c #B6B5B6", "3@ c #E2E1E2", "4@ c #E4E4E3", "5@ c #B4B4B4", "6@ c #B4B5B5", "7@ c #B5B5B4", "8@ c #B6B6B5", "9@ c #E2E2E3", "0@ c #B3B4B4", "a@ c #B4B4B5", "b@ c #B4B5B4", "c@ c #B5B4B4", "d@ c #B3B3B3", "e@ c #B3B3B4", "f@ c #B4B3B3", "g@ c #B4B4B3", "h@ c #B5B4B5", "i@ c #D0D1D0", "j@ c #B3B3B2", "k@ c #B3B2B3", "l@ c #B4B3B4", "m@ c #90B9D9", "n@ c #91BAD9", "o@ c #C6C5C6", "p@ c #B1B2B2", "q@ c #B2B2B2", "r@ c #B2B3B2", "s@ c #B2B3B3", "t@ c #8FB7D8", "u@ c #8EB7D7", "v@ c #8FB8D8", "w@ c #90B8D8", "x@ c #91BBD9", "y@ c #91BCDA", "z@ c #C2C2C2", "A@ c #C3C4C3", "B@ c #C3C4C4", "C@ c #C8C9C8", "D@ c #CDCDCE", "E@ c #B1B1B1", "F@ c #B1B2B1", "G@ c #B2B1B2", "H@ c #B2B2B3", "I@ c #B3B2B2", "J@ c #8CB4D6", "K@ c #8DB4D6", "L@ c #8DB5D7", "M@ c #8EB6D7", "N@ c #8EB7D8", "O@ c #8FB7D7", "P@ c #90B9D8", "Q@ c #91BBDA", "R@ c #92BCD9", "S@ c #92BCDA", "T@ c #C1C1C0", "U@ c #C1C1C1", "V@ c #C2C2C1", "W@ c #C3C3C2", "X@ c #C3C3C3", "Y@ c #C3C3C4", "Z@ c #CAC9C9", "`@ c #B1B0B0", " # c #B2B2B1", ".# c #8BB2D5", "+# c #8BB2D6", "@# c #8CB3D6", "## c #8CB3D7", "$# c #8DB5D6", "%# c #8EB5D7", "&# c #8FB8D7", "*# c #92BBD9", "=# c #92BBDA", "-# c #BFC0C0", ";# c #C0C1C0", "># c #C2C1C1", ",# c #C3C2C2", "'# c #C4C4C3", ")# c #C5C6C5", "!# c #C5C5C6", "~# c #B0B0B0", "{# c #B0B1B0", "]# c #B1B1B2", "^# c #B2B1B1", "/# c #0E3459", "(# c #0E355A", "_# c #0F355A", ":# c #0F365A", "<# c #8AB2D5", "[# c #8CB3D5", "}# c #8BB3D6", "|# c #8FB6D7", "1# c #8FB9D7", "2# c #90B9D7", "3# c #90BAD8", "4# c #90BBD9", "5# c #92BDDA", "6# c #93BEDA", "7# c #BEBEBE", "8# c #BEBFBE", "9# c #BFBFBE", "0# c #BFBFC0", "a# c #C0C0BF", "b# c #C2C3C2", "c# c #C4C3C3", "d# c #AFB0B0", "e# c #AFAFB0", "f# c #B0AFB0", "g# c #B0B1B1", "h# c #B0B0B1", "i# c #B1B0B1", "j# c #7A9EC5", "k# c #799FC5", "l# c #7A9FC5", "m# c #7AA0C6", "n# c #0E345A", "o# c #0F3559", "p# c #8BB1D5", "q# c #8CB4D5", "r# c #8FB9D8", "s# c #90BAD7", "t# c #91BBD8", "u# c #91BCD9", "v# c #91BDD9", "w# c #92BEDA", "x# c #93BFDA", "y# c #BDBDBD", "z# c #BDBEBD", "A# c #BEBEBD", "B# c #BEBEBF", "C# c #BEBFBF", "D# c #BFBFBF", "E# c #C0C0C0", "F# c #C1C0C0", "G# c #C0C1C1", "H# c #C3C2C3", "I# c #C4C3C4", "J# c #AFAEAF", "K# c #AFAFAF", "L# c #B0AFAF", "M# c #789DC5", "N# c #789EC5", "O# c #799EC5", "P# c #7AA1C5", "Q# c #7BA1C5", "R# c #0F3659", "S# c #10375A", "T# c #8DB6D6", "U# c #8EB8D7", "V# c #92BDD9", "W# c #143F5B", "X# c #174A6A", "Y# c #84B0CB", "Z# c #85B0CC", "`# c #BCBCBC", " $ c #BDBCBC", ".$ c #C0C0C1", "+$ c #C1C2C1", "@$ c #C2C3C3", "#$ c #AEAEAE", "$$ c #AEAFAF", "%$ c #AFAFAE", "&$ c #779BC4", "*$ c #779CC4", "=$ c #789CC4", "-$ c #789DC4", ";$ c #789EC4", ">$ c #799FC4", ",$ c #7AA0C5", "'$ c #10385A", ")$ c #8DB7D7", "!$ c #8EB7D6", "~$ c #90BBD8", "{$ c #133E5B", "]$ c #83AEC9", "^$ c #84AFCA", "/$ c #85B1CB", "($ c #85B2CB", "_$ c #BDBCBD", ":$ c #BEBDBD", "<$ c #C0BFBF", "[$ c #C1C1C2", "}$ c #C9CACA", "|$ c #AEAEAD", "1$ c #AEAFAE", "2$ c #AEAEAF", "3$ c #7599C3", "4$ c #7699C3", "5$ c #7699C2", "6$ c #769AC3", "7$ c #779BC3", "8$ c #789BC4", "9$ c #799EC4", "0$ c #79A0C4", "a$ c #8CB5D5", "b$ c #8CB5D6", "c$ c #8DB7D6", "d$ c #426D8A", "e$ c #16486A", "f$ c #7AA5C1", "g$ c #83ADC9", "h$ c #84B1CB", "i$ c #85B1CC", "j$ c #BCBDBD", "k$ c #BDBDBC", "l$ c #BFBEBF", "m$ c #BFC0BF", "n$ c #ADADAC", "o$ c #AEADAD", "p$ c #ADAEAD", "q$ c #ADAEAE", "r$ c #7496C2", "s$ c #7597C2", "t$ c #7598C2", "u$ c #769BC2", "v$ c #779BC2", "w$ c #779CC3", "x$ c #789DC3", "y$ c #7AA0C4", "z$ c #7AA1C4", "A$ c #7AA2C5", "B$ c #7BA2C5", "C$ c #10395A", "D$ c #8EB6D6", "E$ c #8EB8D6", "F$ c #133D5A", "G$ c #81ABC8", "H$ c #82ACC9", "I$ c #82ADC9", "J$ c #82AEC9", "K$ c #83AFC9", "L$ c #83B0CA", "M$ c #BDBEBE", "N$ c #C1C0C1", "O$ c #C7C7C8", "P$ c #ADACAC", "Q$ c #AFAEAE", "R$ c #7395C1", "S$ c #7395C2", "T$ c #7496C1", "U$ c #7599C2", "V$ c #769BC3", "W$ c #779DC3", "X$ c #789EC3", "Y$ c #7AA2C4", "Z$ c #7BA3C4", "`$ c #7BA3C5", " % c #11395A", ".% c #113A5A", "+% c #123C5A", "@% c #164A6E", "#% c #4C7694", "$% c #80AAC7", "%% c #80ABC8", "&% c #81ACC9", "*% c #81ACC8", "=% c #81ADC9", "-% c #83AFCA", ";% c #84B0CA", ">% c #84B1CA", ",% c #86B3CB", "'% c #87B4CC", ")% c #BFBEBE", "!% c #ACACAC", "~% c #ABACAC", "{% c #ACACAD", "]% c #7294C0", "^% c #7194C0", "/% c #7294C1", "(% c #7394C1", "_% c #7396C1", ":% c #7497C2", "<% c #7498C2", "[% c #799FC3", "}% c #7CA3C5", "|% c #123B5A", "1% c #88B1D0", "2% c #7EA8C6", "3% c #7FA9C6", "4% c #7FAAC7", "5% c #81ADC8", "6% c #85B1CA", "7% c #86B2CB", "8% c #86B4CB", "9% c #87B5CB", "0% c #BCBCBD", "a% c #C0BFC0", "b% c #ABABAB", "c% c #ACABAC", "d% c #ABABAC", "e% c #ACADAC", "f% c #ACADAD", "g% c #7193C0", "h% c #7293C0", "i% c #7193C1", "j% c #7293C1", "k% c #7498C1", "l% c #789FC4", "m% c #79A1C3", "n% c #79A1C4", "o% c #7BA2C4", "p% c #7CA4C5", "q% c #7CA4C4", "r% c #16496F", "s% c #7DA7C5", "t% c #7FAAC6", "u% c #80ABC7", "v% c #80ACC7", "w% c #82AFC9", "x% c #84B1C9", "y% c #85B2CA", "z% c #87B5CC", "A% c #88B6CC", "B% c #BDBDBE", "C% c #C1C2C2", "D% c #AAABAB", "E% c #AAAAAA", "F% c #ABAAAB", "G% c #ABACAB", "H% c #ACACAB", "I% c #7192C0", "J% c #7292C0", "K% c #7598C1", "L% c #7599C1", "M% c #759AC1", "N% c #769AC2", "O% c #779CC2", "P% c #779DC2", "Q% c #789DC2", "R% c #78A0C3", "S% c #7CA3C4", "T% c #7AA2C2", "U% c #7CA5C4", "V% c #7DA5C4", "W% c #7DA6C5", "X% c #7EA8C5", "Y% c #82ADC8", "Z% c #83B0C9", "`% c #85B3CA", " & c #86B5CB", ".& c #87B6CC", "+& c #BCBDBC", "@& c #C2C1C2", "#& c #C2C2C3", "$& c #AAA9AA", "%& c #AAABAA", "&& c #ABAAAA", "*& c #7091BF", "=& c #7092BF", "-& c #7191C0", ";& c #7192BF", ">& c #7092C0", ",& c #7295C0", "'& c #7497C1", ")& c #759AC2", "!& c #769CC2", "~& c #789FC3", "{& c #79A0C3", "]& c #79A2C4", "^& c #7AA4C3", "/& c #7BA4C4", "(& c #7DA8C5", "_& c #7EA9C6", ":& c #80AAC6", "<& c #81ADC7", "[& c #82ADC7", "}& c #82AEC8", "|& c #88B7CC", "1& c #A9A9A9", "2& c #A9AAAA", "3& c #A9A9AA", "4& c #A9AAA9", "5& c #7090BE", "6& c #7091BE", "7& c #7092BE", "8& c #7191BF", "9& c #7397C1", "0& c #7499C1", "a& c #7AA1C3", "b& c #7AA2C3", "c& c #79A2C2", "d& c #7AA3C3", "e& c #7BA5C4", "f& c #80ABC6", "g& c #81ACC7", "h& c #81AEC8", "i& c #82AFC8", "j& c #83B1CA", "k& c #85B3CB", "l& c #85B4CA", "m& c #87B6CB", "n& c #88B8CC", "o& c #A8A8A8", "p& c #6F90BE", "q& c #6F91BE", "r& c #7192BE", "s& c #7193BF", "t& c #769BC1", "u& c #779EC3", "v& c #789FC2", "w& c #79A1C2", "x& c #7AA3C2", "y& c #7BA4C3", "z& c #7CA6C5", "A& c #7DA7C4", "B& c #7EA7C5", "C& c #7EA9C5", "D& c #7EAAC6", "E& c #7FACC6", "F& c #81AEC7", "G& c #82AFC7", "H& c #83B1C9", "I& c #84B2C9", "J& c #84B3C9", "K& c #86B4CA", "L& c #89B7CC", "M& c #89B8CD", "N& c #A8A8A7", "O& c #6F90BD", "P& c #6E90BD", "Q& c #6E90BE", "R& c #7293BF", "S& c #7396C0", "T& c #7397C0", "U& c #7498C0", "V& c #759BC1", "W& c #769CC1", "X& c #779EC2", "Y& c #789EC2", "Z& c #78A0C1", "`& c #78A1C2", " * c #7BA6C3", ".* c #7BA6C4", "+* c #7CA6C4", "@* c #7FABC6", "#* c #82AEC7", "$* c #83AFC8", "%* c #83B0C8", "&* c #88B7CB", "** c #89B9CC", "=* c #89BACD", "-* c #6E8FBD", ";* c #6F91BD", ">* c #7093BF", ",* c #7194BF", "'* c #7294BF", ")* c #7395C0", "!* c #7398C0", "~* c #779FC1", "{* c #77A0C1", "]* c #78A1C1", "^* c #7AA4C2", "/* c #7CA7C4", "(* c #7DA8C4", "_* c #7DA9C5", ":* c #7FAAC5", "<* c #80ACC6", "[* c #80ADC7", "}* c #84B1C8", "|* c #88B8CB", "1* c #89BACC", "2* c #BEBDBE", "3* c #12285A", "4* c #768CBE", "5* c #768DBE", "6* c #6E91BD", "7* c #7193BE", "8* c #7295BF", "9* c #7396BF", "0* c #7398BF", "a* c #7499C0", "b* c #749AC1", "c* c #779DC1", "d* c #789FC1", "e* c #779EC0", "f* c #769EC0", "g* c #769FC0", "h* c #77A0C0", "i* c #79A2C1", "j* c #79A3C2", "k* c #7BA4C2", "l* c #7CA7C3", "m* c #7EAAC5", "n* c #80ADC6", "o* c #82B0C7", "p* c #85B2C9", "q* c #85B3C9", "r* c #85B4C9", "s* c #86B5CA", "t* c #87B6CA", "u* c #88B9CC", "v* c #8AB9CC", "w* c #8ABACC", "x* c #8BBBCC", "y* c #758BBE", "z* c #758CBE", "A* c #768CBF", "B* c #6E91BE", "C* c #7093BE", "D* c #7397BF", "E* c #7497BF", "F* c #749AC0", "G* c #759AC0", "H* c #769BC0", "I* c #769CC0", "J* c #779EC1", "K* c #769DC0", "L* c #759DBF", "M* c #769DBE", "N* c #77A1C0", "O* c #7AA5C2", "P* c #7DA7C3", "Q* c #7EA9C4", "R* c #7EAAC4", "S* c #7FABC5", "T* c #81ADC6", "U* c #81AFC7", "V* c #82B0C8", "W* c #83B1C8", "X* c #84B2C8", "Y* c #86B6CB", "Z* c #87B7CA", "`* c #87B7CB", " = c #84AFCB", ".= c #143F5A", "+= c #12275A", "@= c #758BBD", "#= c #768BBE", "$= c #6E8FBC", "%= c #6E8EBD", "&= c #7296BF", "*= c #7297BF", "== c #779CC1", "-= c #749BBE", ";= c #749CBF", ">= c #759EBE", ",= c #769FBF", "'= c #76A0C0", ")= c #779FC0", "!= c #7BA5C3", "~= c #7CA6C3", "{= c #7CA8C4", "]= c #7DA9C3", "^= c #7FAAC4", "/= c #81AFC6", "(= c #82B1C7", "_= c #85B5C9", ":= c #86B6CA", "<= c #82AECA", "[= c #758ABD", "}= c #748ABD", "|= c #758CBD", "1= c #6D8FBC", "2= c #759CC1", "3= c #769DC1", "4= c #759BBF", "5= c #739ABE", "6= c #759DBE", "7= c #769EBE", "8= c #769EBF", "9= c #779FBF", "0= c #78A1C0", "a= c #78A2C1", "b= c #79A2C0", "c= c #7AA3C1", "d= c #7CA8C3", "e= c #7DA9C4", "f= c #82B0C6", "g= c #83B2C8", "h= c #84B3C8", "i= c #143E5B", "j= c #11265A", "k= c #7489BC", "l= c #748ABC", "m= c #758ABC", "n= c #6D8EBC", "o= c #6E8EBC", "p= c #6D8FBD", "q= c #6F8FBD", "r= c #7092BD", "s= c #7294BE", "t= c #7194BE", "u= c #7295BE", "v= c #7196BF", "w= c #759BC0", "x= c #749ABE", "y= c #7399BC", "z= c #729ABD", "A= c #739ABD", "B= c #749CBD", "C= c #769DBF", "D= c #779EBF", "E= c #78A2C0", "F= c #79A3C1", "G= c #7AA4C1", "H= c #7BA6C2", "I= c #7CA9C4", "J= c #7EABC4", "K= c #7FACC4", "L= c #80ADC5", "M= c #80AEC6", "N= c #81AEC6", "O= c #83B1C7", "P= c #7EA9C7", "Q= c #7FAAC8", "R= c #80AAC8", "S= c #7388BC", "T= c #7488BC", "U= c #7389BC", "V= c #7489BD", "W= c #6E8EBB", "X= c #6D8EBD", "Y= c #7195BE", "Z= c #7499BF", "`= c #749ABF", " - c #749BC0", ".- c #7198BB", "+- c #7298BC", "@- c #7299BC", "#- c #729ABC", "$- c #739BBD", "%- c #749BBD", "&- c #749DBE", "*- c #76A0BF", "=- c #77A2C0", "-- c #78A3C1", ";- c #79A4C1", ">- c #7CA8C2", ",- c #7DAAC4", "'- c #7FACC5", ")- c #7DA7C6", "!- c #7FA9C7", "~- c #133E5A", "{- c #7387BC", "]- c #6F92BD", "^- c #7094BE", "/- c #7296BE", "(- c #7399BD", "_- c #0E3559", ":- c #7096BB", "<- c #7197BB", "[- c #7199BB", "}- c #739BBC", "|- c #749CBE", "1- c #749EBE", "2- c #769FBE", "3- c #77A0BF", "4- c #77A1BF", "5- c #78A3C0", "6- c #79A4C0", "7- c #7AA6C2", "8- c #7BA7C2", "9- c #7DA8C3", "0- c #7EACC5", "a- c #7CA5C5", "b- c #10255A", "c- c #7286BB", "d- c #7287BC", "e- c #6D8EBB", "f- c #7093BD", "g- c #7094BD", "h- c #7195BF", "i- c #7399BF", "j- c #739ABF", "k- c #7398BE", "l- c #6F95BA", "m- c #7096BA", "n- c #7097BB", "o- c #739ABC", "p- c #739CBD", "q- c #759EBF", "r- c #78A2BF", "s- c #7CA7C2", "t- c #10245A", "u- c #7185BB", "v- c #7286BC", "w- c #7387BB", "x- c #7487BC", "y- c #6E90BC", "z- c #6F93BE", "A- c #7196BE", "B- c #7297BE", "C- c #7298BF", "D- c #7297BD", "E- c #6E94BA", "F- c #6F95B9", "G- c #6F96BA", "H- c #7097BA", "I- c #729ABB", "J- c #749DBD", "K- c #77A0BE", "L- c #78A4C0", "M- c #7AA5C0", "N- c #7CA7C5", "O- c #7185BA", "P- c #7286BA", "Q- c #7285BB", "R- c #7386BB", "S- c #7288BC", "T- c #7589BD", "U- c #6E91BC", "V- c #6F91BC", "W- c #6E92BC", "X- c #6F93BD", "Y- c #7194BD", "Z- c #7195BD", "`- c #7298BE", " ; c #7297BC", ".; c #6D93B8", "+; c #6E94B8", "@; c #6E95B9", "#; c #7096B9", "$; c #739CBC", "%; c #76A0BE", "&; c #78A1BF", "*; c #79A1C1", "=; c #79A4C2", "-; c #7BA3C3", ";; c #7084BA", ">; c #7184BB", ",; c #7085BB", "'; c #7186BB", "); c #7287BB", "!; c #7388BB", "~; c #6C8EBB", "{; c #6D8FBB", "]; c #6F92BC", "^; c #7095BD", "/; c #7196BD", "(; c #7195BC", "_; c #0E3359", ":; c #6C92B7", "<; c #6D94B8", "[; c #6F96B9", "}; c #6F97BA", "|; c #7299BB", "1; c #729BBB", "2; c #749DBC", "3; c #759EBD", "4; c #759FBE", "5; c #10235A", "6; c #7083BA", "7; c #7084BB", "8; c #7085BA", "9; c #7093BC", "0; c #7095BC", "a; c #6C91B7", "b; c #6E95B8", "c; c #7198BA", "d; c #739BBB", "e; c #78A2C2", "f; c #0F225A", "g; c #6F82B9", "h; c #7083B9", "i; c #6F83B9", "j; c #6F83BA", "k; c #7184BA", "l; c #6C8DBB", "m; c #6C8FBB", "n; c #6D90BB", "o; c #6E91BB", "p; c #6F93BC", "q; c #7094BC", "r; c #6F94BB", "s; c #0D3259", "t; c #6A8FB6", "u; c #6B91B7", "v; c #6E93B8", "w; c #7098BA", "x; c #7099BA", "y; c #7199BA", "z; c #729BBC", "A; c #6E81B9", "B; c #6E82B9", "C; c #6E90BB", "D; c #6E93BA", "E; c #698EB6", "F; c #6A8EB6", "G; c #6A90B6", "H; c #6B90B6", "I; c #6B92B7", "J; c #6D93B7", "K; c #6E96B8", "L; c #6F97B9", "M; c #7098BB", "N; c #78A0C0", "O; c #6E80B8", "P; c #6E81B8", "Q; c #6F81B8", "R; c #6F81B9", "S; c #6F82B8", "T; c #6F92BB", "U; c #6E92BA", "V; c #0D3159", "W; c #688DB4", "X; c #698EB5", "Y; c #698FB5", "Z; c #6A90B7", "`; c #6C93B7", " > c #518FC8", ".> c #6F96B8", "+> c #123A5A", "@> c #0F215A", "#> c #6D80B8", "$> c #6D81B8", "%> c #6C8FBA", "&> c #6E90BA", "*> c #6E92BB", "=> c #6E93BC", "-> c #0C3159", ";> c #678CB4", ">> c #678DB4", ",> c #688EB4", "'> c #698EB4", ")> c #6A90B5", "!> c #6B91B6", "~> c #6D94B7", "{> c #6D95B8", "]> c #6E96B9", "^> c #0E2159", "/> c #6C7FB8", "(> c #6D7FB7", "_> c #6D7FB8", ":> c #507FC9", "<> c #6D8FBA", "[> c #6D91BB", "}> c #6D91B9", "|> c #0C3059", "1> c #678AB3", "2> c #678BB3", "3> c #678DB3", "4> c #6B91B5", "5> c #6B92B5", "6> c #6C92B6", "7> c #6B92B6", "8> c #6C93B6", "9> c #0E2059", "0> c #6C7EB7", "a> c #6D7EB7", "b> c #6E80B7", "c> c #6E82B8", "d> c #7084B9", "e> c #6F84BA", "f> c #6C90B9", "g> c #668AB2", "h> c #698FB4", "i> c #6A90B4", "j> c #719ABB", "k> c #749BBC", "l> c #6B7EB7", "m> c #6B7DB6", "n> c #6C7DB7", "o> c #6C7FB7", "p> c #6D80B7", "q> c #6F84B9", "r> c #7186BA", "s> c #6C8EB9", "t> c #6589B1", "u> c #678CB2", "v> c #678DB2", "w> c #688EB3", "x> c #6A8FB5", "y> c #6A91B5", "z> c #6C92B5", "A> c #6C94B7", "B> c #6D95B7", "C> c #759DBD", "D> c #0E1F5A", "E> c #6A7CB6", "F> c #6A7DB6", "G> c #6C7EB6", "H> c #7082B9", "I> c #7285BA", "J> c #7085B9", "K> c #0E335A", "L> c #658BB1", "M> c #668BB1", "N> c #668CB1", "O> c #678CB1", "P> c #688DB3", "Q> c #688FB3", "R> c #698FB3", "S> c #6990B4", "T> c #7097B9", "U> c #7197BA", "V> c #739CBE", "W> c #0E1F59", "X> c #6A7BB6", "Y> c #6B7CB6", "Z> c #6C7DB6", "`> c #6B7DB7", " , c #6F82B6", "., c #648AB0", "+, c #658AB1", "@, c #658BB0", "#, c #668CB2", "$, c #688FB4", "%, c #6B90B5", "&, c #0D1E59", "*, c #697BB5", "=, c #6A7CB7", "-, c #6B7EB6", ";, c #6C7EB8", ">, c #6E82B7", ",, c #6389B0", "', c #6489B0", "), c #658AB0", "!, c #668AB1", "~, c #688DB2", "{, c #6990B5", "], c #697AB5", "^, c #697BB6", "/, c #6A7BB5", "(, c #6D7EB8", "_, c #6D81B6", ":, c #6388AE", "<, c #6388AF", "[, c #6389AF", "}, c #6489AF", "|, c #668BB0", "1, c #6979B4", "2, c #6879B5", "3, c #6879B4", "4, c #6979B5", "5, c #6A7AB5", "6, c #6B7CB7", "7, c #6D80B5", "8, c #6287AE", "9, c #6288AE", "0, c #0D1D59", "a, c #6878B4", "b, c #6778B4", "c, c #6C7EB5", "d, c #6186AC", "e, c #6186AD", "f, c #6286AE", "g, c #668DB1", "h, c #678EB3", "i, c #0D1C59", "j, c #6777B3", "k, c #6777B4", "l, c #697AB4", "m, c #6A7CB5", "n, c #6E81B7", "o, c #6084AC", "p, c #6185AC", "q, c #6086AD", "r, c #6187AE", "s, c #6387AE", "t, c #0C1C59", "u, c #6676B3", "v, c #6776B3", "w, c #6877B4", "x, c #687AB5", "y, c #697CB6", "z, c #6A7DB7", "A, c #6B7DB5", "B, c #5F83AC", "C, c #6083AC", "D, c #6185AD", "E, c #6288AD", "F, c #668BB2", "G, c #6A91B4", "H, c #6675B3", "I, c #6575B3", "J, c #6677B3", "K, c #6677B4", "L, c #6A7DB4", "M, c #5E82AB", "N, c #5F83AB", "O, c #5F84AC", "P, c #6085AD", "Q, c #6085AC", "R, c #10365A", "S, c #0C1B59", "T, c #6575B2", "U, c #6675B2", "V, c #6676B2", "W, c #6676B4", "X, c #6776B4", "Y, c #687AB4", "Z, c #5D81AA", "`, c #5D81AB", " ' c #5D82AA", ".' c #5E83AB", "+' c #6083AB", "@' c #6286AD", "#' c #648AB1", "$' c #6473B3", "%' c #6474B2", "&' c #697CB3", "*' c #5D80A9", "=' c #5E82AA", "-' c #5F84AB", ";' c #6287AD", ">' c #6389AE", ",' c #0B1A59", "'' c #6473B2", ")' c #6574B2", "!' c #6574B3", "~' c #6778B3", "{' c #6779B4", "]' c #687BB2", "^' c #5B7FA9", "/' c #5B80A9", "(' c #5C80A9", "_' c #5D81A9", ":' c #5E81AA", "<' c #6184AC", "[' c #638AB0", "}' c #678DB1", "|' c #0B1A58", "1' c #6372B1", "2' c #6472B2", "3' c #6472B1", "4' c #6473B1", "5' c #6573B2", "6' c #6576B3", "7' c #6878B3", "8' c #687AB3", "9' c #5B7EA7", "0' c #5B7FA8", "a' c #5B80A8", "b' c #5C81AA", "c' c #5F82AB", "d' c #668DB2", "e' c #11268E", "f' c #11268D", "g' c #0B1958", "h' c #6373B2", "i' c #6877B3", "j' c #6879B2", "k' c #0C2F59", "l' c #5A7DA7", "m' c #5A7EA7", "n' c #5B7FA7", "o' c #5B7EA8", "p' c #5C7FA8", "q' c #5F83AA", "r' c #6084AB", "s' c #6589B0", "t' c #0C196C", "u' c #152064", "v' c #11258D", "w' c #6371B1", "x' c #6271B1", "y' c #6372B2", "z' c #6778B1", "A' c #0C2E59", "B' c #597CA6", "C' c #5A7CA6", "D' c #597DA6", "E' c #5D80AA", "F' c #5E83AA", "G' c #0E355B", "H' c #0C1A6F", "I' c #131E62", "J' c #414C90", "K' c #10258E", "L' c #6271B0", "M' c #6272B1", "N' c #6373B1", "O' c #6677B1", "P' c #0B2E59", "Q' c #577BA5", "R' c #587BA6", "S' c #587CA6", "T' c #5A7EA8", "U' c #5D82AB", "V' c #6289AE", "W' c #1A5FA3", "X' c #0D1C75", "Y' c #131E61", "Z' c #404B8E", "`' c #475296", " ) c #10258D", ".) c #6270B0", "+) c #6272B0", "@) c #6576B2", "#) c #6576B1", "$) c #577AA4", "%) c #577BA4", "&) c #587BA5", "*) c #5C81A9", "=) c #648AAF", "-) c #0E345B", ";) c #0D1D79", ">) c #101B5F", ",) c #3C478B", "') c #11258E", ")) c #6371B0", "!) c #6575B1", "~) c #0B2E58", "{) c #5679A3", "]) c #5779A4", "^) c #567AA4", "/) c #577AA5", "() c #577BA6", "_) c #597BA6", ":) c #175797", "<) c #0E1F82", "[) c #101B5E", "}) c #384487", "|) c #0B1858", "1) c #6170B0", "2) c #6575B0", "3) c #5578A2", "4) c #5678A3", "5) c #5679A4", "6) c #5A7DA6", "7) c #102394", "8) c #111C60", "9) c #141F63", "0) c #293578", "a) c #0A1859", "b) c #616FAF", "c) c #616FB0", "d) c #6270AF", "e) c #6372B0", "f) c #6474AF", "g) c #0B2D58", "h) c #5576A2", "i) c #5577A2", "j) c #5577A3", "k) c #5578A4", "l) c #5578A3", "m) c #587CA5", "n) c #597DA7", "o) c #5D82A9", "p) c #6187AD", "q) c #154F8D", "r) c #1227A5", "s) c #0D185C", "t) c #1B266A", "u) c #313C80", "v) c #445093", "w) c #10248D", "x) c #6170AF", "y) c #6474B1", "z) c #6373AF", "A) c #5375A1", "B) c #5476A2", "C) c #587AA4", "D) c #5C7FA9", "E) c #6084AD", "F) c #102393", "G) c #0C196A", "H) c #0E1A5D", "I) c #242F73", "J) c #3A4589", "K) c #626FAF", "L) c #626FB0", "M) c #6475B2", "N) c #6272AE", "O) c #0A2C59", "P) c #5275A1", "Q) c #5376A2", "R) c #5477A2", "S) c #144A84", "T) c #0E1E7F", "U) c #121D61", "V) c #2B3679", "W) c #0A1858", "X) c #6370B0", "Y) c #6271AF", "Z) c #0A2C58", "`) c #5173A0", " ! c #5274A1", ".! c #5274A0", "+! c #0D1B74", "@! c #10248E", "#! c #6171AE", "$! c #51729F", "%! c #51739F", "&! c #5273A0", "*! c #5476A1", "=! c #5576A3", "-! c #114379", ";! c #102291", ">! c #0C196B", ",! c #1F2A6E", "'! c #364185", ")! c #465195", "!! c #10238D", "~! c #616EAF", "{! c #616FAD", "]! c #0A2B59", "^! c #50729E", "/! c #50729F", "(! c #5375A0", "_! c #134C8D", ":! c #0E1E81", "~ c #323D81", ",~ c #0A2D5D", "'~ c #1354AE", ")~ c #10228F", "!~ c #212C70", "~~ c #374286", "{~ c #0F228B", "]~ c #1251A7", "^~ c #283377", "/~ c #3E4A8D", "(~ c #0F4085", "_~ c #0B2F62", ":~ c #1328A8", "<~ c #0D1C77", "[~ c #303B7F", "}~ c #104289", "|~ c #0B3063", "1~ c #112497", "2~ c #1C276A", "3~ c #0C175B", "4~ c #0F438A", "5~ c #0B3266", "6~ c #0F2088", "7~ c #0C3367", "8~ c #365885", "9~ c #0B3369", "0~ c #0E1D7C", "a~ c #0B2F60", "b~ c #0C366E", " ", " ", " ", " ", " ", " . . ", " . . . . . . . ", " . . . . + @ # $ % . . . . ", " . . . . & * + @ = - % ; > , . . . . ", " . . . . ' ) ! * + @ ~ { ] % ^ , / ( _ . . . ", " . . . . : < [ } | * + 1 = $ 2 ; > , / 3 4 5 6 . . . . ", " . . . . 7 8 9 0 a } | * + b c d 2 % > , / e f g h i j k . . . . ", " . . . . l m n 9 o p q } | * r s t # u % v w x y z A B i C D E F G . . . ", " . . . . H I J K L M 9 < q ' | N O P t # Q % R S T / U V W X Y D Z ` ...+.. . . . ", " . . . . @.#.H I $.%.L M 9 < q } } N r + @ # Q &.R S *.=.f V W X -.;.k ` ...+.+.>.,.. . . . ", " . . . . '.'.'.#.H ).!.~.n {.].< 0 ' } | ^.b @ # Q ] /.(., / f 4 5 B i D k _. ...:.<.[.,.}.|.1.. . . . ", " . . . . '.'.'.'.'.2.H 3.J %.m 7 9 < p } ) 4.5.+ @ ~ Q Q 6.> , / 3 4 7.X 8.9.k 0. ...a.b.<.c.d.|.1.e.f.g.. . . ", " . . . . . '.'.'.'.'.'.'.h.i.j.$.$.m 7 k.< l.a m.| * + @ c Q Q % > , / f f n.B i j k _.o.p.q.+.r.c.s.|.t.u.v.w.x.y.. . . . ", " . . . . . '.'.'.'.'.'.'.'.z.A.B.I $.m 7 9 ].C.q D.| * + P t # Q 6.> (.T f E.F.6 i j G.0.H.I...+.<.c.d.J.K.L.M.N.x.y.O.P.Q.. . . . ", " R.. . '.'.'.'.'.'.'.'.'.'.'.S.A.3.I $.m n k.T.U.q V.W.X.+ + t # Q % /.S Y./ z F.W i -.Z.k _.`.a.+.<.r.s. +|.L.M.N.g..+++O.@+#+$+%+. . . ", " . . . . . '.'.'.'.'.'.'.'.'.&+i.H I $.K n 8 < < q } *+* ^.=+@ { Q ] -+, , ;+_ V W B 8.>+,+_.G ..+.'+c.d.d.t.)+!+M.x.x.~+{+Q.#+$+]+^+/+. . . . ", " . . =.f . . . . . '.'.'.'.'.'.2.A.H (+$._+:+<+].< q } | N ^.s [+# Q }+6.> *./ f V 5 |+C D 0._. ...q.1+2+3+4+|.1.!+N.5+y.6+O.Q.#+$+7+8+/+/+/+/+. . . . ", " . . / / y e . . . . . '.'.'.'.&+#.H I 9+0+m a+9 b+l.} m.X.5.+ @ = $ % > c+Y./ f U W X d+k k _. ...e+f+g+c.d.J.)+h+i+j+x.6+k+@+l+m+n+o+/+/+/+/+/+/+/+. . . . ", " . . S , *.x T / / 3 . . . . . '.'.#.p+q+!.~.m 7 9 < 0 ' } r+* P @ # { s+% w , / e V 5 B -.j k _. .t+e+1+2+3+d.|.K.u.u+N.x..+O.v+w+x+y+z+/+/+/+/+/+/+/+/+/+/+. . . ", " . . ; > > ^ , A+/ / e y ( . . . . . i.).B+$.C+7 9 : l.a } | * + D+t d Q % > , / f E+5 6 d+j k _.o.p.F+<.r.c.d.J.)+h+!+G+x.H+O.@+@+$+y+%+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", " . . 2 % % /.-+> ^ S , Y.I+/ =.e . . . . . I $.C+L 9 J+K+a } & 4.+ P c d Q v L+S / f f g |+i j k ,+H.t+:.+.<.c.s.M+N+O+i+N.x..+~+@+#+P+]+%+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", " . . # $ Q 2 s+6./.> > , , , , / / ;+y . . . . . 7 a+< U.Q+} | N R+P S+# u % > , / ( f V W i -.Z._.T+I...+.U+c.V+W+t.O+!+N.x.y.++X+@+#+$+%+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ", " . . @ t # Y+Y+Q Q &.% v v > c+c+S , , / =.( f . . . . . < q Z+) X.^.D+c Q Q % /., Y./ 4 V W i d+k Z T+`.q.+.<.r.d.}.`+)+!+N.x. @.+k+@+#+x+%+z+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . f f . ", " . . + D+@ c # # $ Q Q Q }+% % /./.S S , *.T / ;+;+f . . . . . m.4.5.b @ # Q % R > , e f V W i 8.j k _.G ..+.'+<.c.4+`+)+h+v.w.y..@O.@+#+x+n++@/+/+/+/+/+/+/+/+/+/+/+. . . . f f f f f . ", " . . . ^.+ + P b @ c t # - - u u &.% /.R c+c+S , A+/ / y f . . . . . 5.+ @ # Q ] /.L+A+=.f V W |+@@9.k _. .t++.b.g+c.W+|.1.!+u+j+#@~+O.@+l+#+$@8+/+/+/+/+/+/+/+/+/+. . . . f f f f f f f f . ", " . . | N * * + + =+=+D+@ S+# %@%@- Q 2 % 6.v /.> , , , / T y f f . . . . . # Q % % > , / f E+V B -.9.k _.o.p.F+f+r.c.d.|.&@O+u+N.x..+++@+*@#+]+%+/+/+/+/+/+/+/+. . . =@f f f f f f f f f f -@. ", " . . . W.D.| | 4.* 5.r + P b @ S+# # Y+- Q Q }+% ; -+> w w S , I+/ / 3 f . . . . . ; > , A+f V g ;@i j k _.>@`...+.r.c.d.|.&@,@'@G+x..+O.)@@+x+$+z+/+/+/+/+/+. . . T / ( y f f f f f f f f f f . . ", " . . . a } V.} W.| r+4.* ^.* + D+@ @ @ # # - Q Q ] 2 ; /.-+> w (., A+Y./ f f . . . . . , / / U V X @@j k Z .t+a.+.<.c.d.|.K.O+!+G+x.y.!@P.Q.~@$+8+/+/+/+. . . ; > w ^ , T / 3 f f f f f f f f f . . ", " . {@. . . . Z+} ) D.m.| r+* * 5.r + D+@ S+c # # - Q Q s+% % -+> c+(., , / / / / f . . . . . f g B i j k _._.`.q.+.<.c.]@ +1.O+!+N.x..+!@)@^@#+$+%+%+. . . # - Q % % % > L+w Y./ / / f f f f f f f . . ", " . /@(@_@:@. . . . [ } } W.| N ! * * R++ + @ @ c c # # # Q u 2 % % ; > L+, , *./ / =.;+f . . . . . i j 9.E >@G ..+.'+c.<@4+&@)+!+N.G+.+O.O.l+#+@+. . . O s @ c c $ Q Q 2 % % > c+, I+x ;+f f f f f f . ", " . [@/@}@/@/@/@. . . . q } } W.V.! ! N * + O + b b [+t c # $ Q u 2 ] % v R > > ^ *.A+I+/ e f f . . . . 9.E _. ...+.'+[.V+}.|.)+!+v.x..+6+{+.+. . . *+X.r+* r + s @ S+c { - Q s+% > > (., *./ f f f f f . ", " . |@|@|@1@}@2@/@}@/@. . . . Q+[ } W.| N & * * R++ D+=+@ S+~ # # %@Q Q ] % R -+> ^ , w , , / =.;+f . . . . . ...3@<.4@3+}.|.)+!+u+w.x.)+. . . 0 q } [ V.| & 4.+ R++ b @ # # Q Q &.% 6.> > , A+x ( f f . ", " . 5@5@6@|@7@|@|@8@}@}@2@/@. . . . ' } ) | | X.| * * ^.+ P 1 @ @ ~ # d Y+Q Q % % v > v w , , *.T / =.f f . . . . . 9@2+,.d.|.t.!+!+b.. . . <+9 o b+p 0 q Z+} ) | N * O + s @ t = d - Q % % -+> ^ , *./ . ", " . 0@5@a@a@b@c@6@7@|@|@[@8@|@8@. . . . . } ) W.W.N & r+* * r + s 1 @ # # # { - Q u % % ; ; > c+, , , I+/ ( f f . . . . . d.M+t.j . . . $.0+m :+7 M 9 9 < U.q Z+} ) *+& 4.* O + @ @ c # { - }+% % R ^ , . ", " . d@e@f@f@g@5@5@h@b@5@h@|@b@|@|@|@|@. . . . Z+} } | | & X.r+5.i@+ s D+@ [+t # # Q Q 2 &.% % /.R > c+, , T T / y f . . . . . . . . H 3.I !.$.%.~.C+7 {.a+T.: C.< q q } D.| r+* ^.+ =+1 @ c # - Q s+% v . ", " . j@k@d@d@d@d@g@f@e@d@l@5@5@a@b@6@c@6@|@|@. . . . [ } } m.| | r+* * + + =+D+@ ~ ~ # m@n@n@Q &.% % v > c+(., , Y./ / =.f . . . '.h.#.#.o@H I I J $.K m C+7 M M ].< U.p q ' D.m.| ! * O + @ @ c @ d d 2 . ", " . p@q@q@r@r@r@j@s@d@d@f@e@5@l@0@5@5@b@b@c@7@7@7@. . . . } V.V.) | & * * * + s t@u@v@v@w@m@n@x@y@u % v % > > (., , *.x / Y.. . z@A@B@'.2.#.#.p+j.I !.$.C@_+:+C+<+8 9 o < U.0 D@} W.m.| r+* O + s @ t # . ", " . E@E@F@F@G@q@q@H@H@I@d@H@d@d@d@d@5@f@5@5@5@5@5@c@h@. . . . [ Z+) ) m.| 4.J@K@L@M@N@O@v@w@m@P@x@Q@R@S@] % 6.6.> > w , , . . T@U@V@W@X@Y@X@h.2.#.#.H B.I !.$.$._+Z@7 7 9 T.o < l.q q } } | | X.^.r D+=+. ", " . `@E@E@E@E@F@G@ #p@q@q@q@q@d@k@d@H@d@d@g@f@g@d@5@0@5@5@6@. . . . Z+} .#+#@###$#L@%#M@O@O@&#P@P@n@n@*#=#S@&.}+% 6.-+> > . . -#T@;#U@>#z@,#X@Y@'#@.#.)#!#H I I I $.K m 7 7 7 9 9 T.< q q } } D.r+4.* 5.. ", " . ~#~#~#{#~#E@E@E@]#G@^#^# #p@q@q@q@j@k@j@k@d@d@d@d@0@0@e@l@0@5@/#(#_#:#<#.#[#}#K@K@L@M@|#O@#2#3#4#4#x@R@5#6#% }+v . . 7#8#9#0#a#U@T@U@U@,#b#X@c#'.#.#.)#H 3.I l $.$.m m 7 7 M 9 9 < 0 q D@} *+| | . ", " . d#e#f#~#~#~#g#h#{#{#E@i#E@E@q@F@p@]#q@q@q@q@q@j@d@k@d@d@d@j#k#l#m#n#o#:#:#p#+#}#q#$#$#$#M@M@u@v@1#r#s#3#t#u#v#5#w#x#. . y#z#A#B#C#D#a#E#F#G#V@z@H#X@I#'.@.#.#.H H B.I $.$.0+K :+7 M M : : < q q ' } . ", " . J#K#K#K#K#L#~#~#~#~#~#~#{#{#i#E@E@^#]#G@]#q@q@^#q@I@H@M#M#N#O#k#k#l#P#Q#_#R#:#S#[#[#J@$#$#T#T#u@U#1#1#P@3#t#t#u#V#W#X#Y#Z#`# $y#z#7#7#D#D#-#.$U@U@+$z@@$H#'#'.2.2.#.p+j.I I l $.%.m m 7 7 9 ].< C.q . ", " . #$J#K#$$$$%$K#K#L#K#L#f#~#f#~#~#`@`@E@E@E@E@E@E@q@&$*$=$=$-$-$;$O#>$>$,$,$Q#:#:#S#S#'$q#J@$#$#T#)$!$U#1#1#s#~$t#t#{$W#]$^$^$/$($`#_$y#:$7#9#D#<$a#E#U@+$[$b#X@X@A@'.2.#.p+H H B.!.!.~._+m }$7 a+9 ].. ", " . =@|$#$#$#$1$2$K##$%$K#K#L#e#f#e#~#L#~#~#~#{#3$4$5$6$7$7$8$&$*$-$-$9$9$>$0$0$P#P#Q#S#S#'$'$'$a$b$T#c$!$!$#2#3#d$e$f$g$]$^$^$h$/$i$`#j$k$y#7#7#l$<$m$E#;#U@+$z@z@H#'.'.@.#.#.i.H q+I J $.K K :+C+7 . ", " . n$o$p$=@o$q$#$q$#$#$#$J##$$$%$$$K#K#e#e#r$s$s$t$4$5$5$u$v$7$w$w$w$-$x$9$>$>$0$y$P#z$A$B$'$'$'$C$b$T#D$D$!$E$#F$F$G$H$I$J$K$^$L$Y#h$($($`#`#y#y#M$7#C#D#E#E#N$U@>#z@b#X@'#'.z.#.#.p+H j.!.O$K 0+m . ", " . P$P$n$=@=@=@=@p$p$o$#$#$#$#$#$Q$K#Q$R$R$S$T$r$s$t$t$U$5$6$V$6$w$w$W$x$-$X$;$>$0$y$y$z$z$Y$Z$`$'$ % %.%T#T#!$u@+%@%#%$%%%&%*%=%J$K$-%;%>%>%($,%'%`#`#y#z#7#)%D#0#E#;#N$U@z@,#@$X@Y@'.S.#.o@H I j.I J . ", " . !%!%~%P${%!%n$!%=@=@=@=@=@p$#$]%^%/%/%/%(%S$T$_%:%s$<%t$5$5$5$6$u$7$w$w$-$X$X$>$[%>$y$y$Y$Y$A$`$}%C$ %.%.%|%1%+%+%2%3%4%$%%%*%5%I$J$K$^$;%>%6%7%,%8%9%0%k$:$7#8#8#D#a%E#.$U@[$z@z@X@Y@Y@S.@.#.A.H q+. ", " . b%b%c%b%d%d%!%!%!%e%f%e%n$g%g%g%^%h%h%i%j%/%R$R$T$_%:%s$k%U$U$4$6$u$V$w$7$w$x$X$X$l%l%0$m%n%z$A$o%`$p%q%.%.%|%r%+%s%2%2%3%t%u%v%*%5%J$]$w%L$x%y%6%7%,%'%z%A%`#y#B%7#l$l$D#E#E#T@[$C%z@H#X@A@I#z.#.A.. ", " . D%E%F%F%b%b%G%b%~%~%H%I%I%I%J%J%J%g%I%I%g%]%(%R$_%R$T$T$K%k%K%U$L%M%N%u$w$O%P%Q%X$X$X$[%R%0$n%n%z$Y$Z$Z$S%q%T%|%U%V%W%s%X%3%t%4%u%v%*%Y%J$J$Z%;%;%y%y%`%8% &9%.&`#+&y#7#7#B#D#0#E#E#U@U@@&#&W@X@B@&+. ", " . $&E%E%E%%&E%&&b%b%*&=&-&;&I%;&I%>&I%I%I%I%g%h%]%/%,&_%_%'&'&k%k%L%U$M%)&N%u$!&O%x$x$W$X$~&~&{&{&0$]&z$Y$Z$Z$T%.%^&/&U%W%s%(&2%_&3%:&u%v%<&[&}&K$K$;%>%y%y%,%8%9%9%z%|&`#y#:$7#7#C#m$E#E#.$U@U@z@@$X@. ", " . 1&$&E%2&3&4&5&6&6&*&7&6&=&=&*&=&>&-&8&-&I%I%J%g%h%]%,&(%R$_%9&9&'&k%0&L%)&)&u$v$O%!&W$P%W$X$~&~&[%a&z$Y$b&o%c&.%d&d&e&/&U%W%s%X%2%3%t%f&f&g&<&<&h&i&Z%Z%j&y%y%k&l& &m&.&|&n&0%y#z#A#)%D#<$E#;#T@>#@&. ", " . o&1&1&1&p&p&q&q&p&6&6&6&6&6&*&*&r&8&7&=&8&8&I%;&s&g%]%]%]%,&,&_%9&'&:%K%L%L%U$t&)&!&!&!&W$P%u&v&~&[%{&{&a&Y$w& %T%T%x&y&y&U%z&A&A&B&C&D&D&E&v%v%v%F&G&i&Z%H&x%I&J&K&8%9%m&.&|&L&M& $y#M$7#8#D#m$a%U@. ", " . N&o&O&O&P&Q&q&q&p&6&q&q&6&6&5&6&6&6&6&=&7&*&*&=&;&;&g%R&^%^%,&,&S&T&T&U&U&k%L%L%M%N%V&W&O%!&X&u&v&Y&v&{&m%m%Z&C$Z&`&c&x&x&y&y& *.*+*s%2%C&D&t%@*f&v%<&#*G&$*%*H&x%y%`%l&8%9%m&A%&*n&**=*y#y#7#7#9#m$. ", " . -*-*P&O&P&P&P&P&O&p&;*Q&p&p&p&q&q&5&6&q&6&6&6&6&*&=&=&>*s&s&,*'*,&)*S&T&T&!*k%k%L%M%M%V&t&!&O%P%P%X&Y&v&v&{&~*'$~*{*]*]*c&x&x&^*^& *+*/*(*_*D&t%:*E&<*[*F&#*G&$*%*}*I&I&`%K& &9%m&&*|*n&**1* $y#2*2*. ", " 3*4*5*-*-*-*-*O&-*P&O&P&6*P&P&Q&p&p&q&p&6&5&q&6&6&6&q&6&*&7*7*>*s&,*8*8*9*S&T&U&0*U&a*b*M%M%V&W&W&c*c*X&X&Y&d*e*'$f*g*h*{*]*i*j*x&x&k* * *l*(*(*_*C&m*@*f&n*[*F&#*G&o*%*}*p*q*r*K&s*t*m&&*|*u*v*w*x*k$. ", " 3*y*z*4*4*A*-*-*-*-*-*-*P&P&P&O&P&p&p&P&P&;*B*p&p&q&q&q&6&6&7&=&C*7*,*8*8*8*9*T&D*E*!*a*a*F*G*H*V&I*W&W&c*J*~*K*'$L*M*f*g*h*N*]*i*c&x&^*y&O* *l*P*(*Q*R*m*S*E&<*T*F&U*G&V*W*X*X*q*r*l&s*Y*Z*`*|***** =.= ", " +=y*@=@=#=4*4*4*5*$=%=-*-*-*-*O&O&P&-*P&P&Q&Q&P&q&p&;*q&q&q&7&q&7&C*s&,*,*'*8*9*&=*=D*!*U&a*F*G*M%V&t&W&W&==c*I*S#-=;=L*>=,='=)=h*]*i*j*j*^*O*!=~=/*{=]=Q*^=S*S*<*<*T*F&/=o*(=W*X*X*J&r*_=s*:=`*I$<=-%.= ", " +=[=}=}=[=y*@=y*z*|=z*4*1=1=-*$=-*%=-*-*-*P&P&-*P&P&P&Q&p&q&q&p&q&7&7&C*7*,*,*8*8*D*&=D*!*!*a*a*a*F*G*V&2=W&3=4=:#5=-=-=6=7=>=8=9=h*0=a=b=c=^*O*O*!=l*d={=e=R*R*R*S*E&n*F&U*U*f=o*W*g=X*h=r*G$G$&%H$I$i= ", " j=k=l=m=l=}=}=}=}=[=@=#=@=4*#=n=1=$=o=-*1=p=-*-*P&q=-*q=-*P&O&O&;*q&6&r=C*7*7*s=t=u=&=v=9*D*0*0*a*a*F*w=w=w=2=x=:#y=z=A=B=B=6=8=C=D='=h*N*E=F=F=G=^*H=H=l*d={=I=e=R*J=K=L=L=M=N=U*o*O=P=4%Q=R=R=G$*%H${$ ", " j=S=T=k=U=k=V=k=k=}=m=[=[=@=@=y*y*@=n=W=1=X=X=$=-*-*p=-*-*-*q=-*-*O&;*;*7&7&7&C*t=t=Y=v=&=&=*=D*D*0*a*Z=G*`= -5=_#.-+-@-#-$-%-B=&-6=7=,=*-N*=-E=----;-O*O* *l*>-d=]=,-J='-'-L=n*N=)-B&X%X%_&_&!-Q=R=R=~- ", " j={-S={-S=S=T=S=T=k=k=V=k=V=l=[=[=[=y*y*y*n=n=o=o=n=$=p=1=%=%=$=-*-*P&O&;*;*]-r=r&C*^-t=t=/-&=/-0*0*0*0*Z=`=F*(-_-:-<-.-[-#-A=}-$-|-&-1-2-*-3-4-0=E=5-6-;-f$7-8-l*d=9-]=,-J=0-U%a-z&W%W%s%2%2%2%_&3%4%F$ ", " b-c-c-c-d-{-d-{-S=S=S=S=T=T=k=k=V=k=V=}=[=[=y*@=n=o=e-n=1=o=1=$=p=%=-*-*P&O&;*r=]-7&f-g-t=t=Y=h-&=D**=0*0*i-j-k-(#l-m-n-.-[-@-#-o-$-p-B=&-q-2-2-3-4-r-E=5-;-G=f$H=s-8-d=x&x&y&y&q%U%U%z&W%s%s%X%2%_&2%F$ ", " t-c-u-c-c-c-v-d-{-w-{-w-S=x-S=S=S=U=k=l=k=k=V=}=}=[=e-e-e-W=e-e-o=o=n=$=$=-*y-O&;*]-]-z-C*g-^-Y=Y=A-&=B-B-C-i-D-n#E-F-l-G-H-.-.-@-I-}-}-B=J-1->=2-3-K-4-r-5-L-6-M-f$]*]*i*c&j*x&^*^*y&e&q%z&z&N-A&s%B&+% ", " t-O-u-u-u-u-P-Q-c-c-c-v-c-R-{-S-{-S=S=T=S=k=S=k=k=T-}=m=}=e-e-e-e-e-n=1=n=$=$=y-U-6*V-W-X-f-f-g-Y-Z-A-/-B-B-`- ;/#.;+;@;l-#;H-H-.-[-I-I-}-$;p-J->=>=2-%;4-&;r-,=3-,={*Z&]**;a=i*c&=;x&-;y&!=/&U%a-+*s%+% ", " t-;;>;,;;;O-u-u-';Q-u-Q-Q-P-c-d-);d-);w-!;S=S=U=T=T=k=T=k=V=}=l=e-~;e-e-e-n=$={;y-$=y-U-V-];]-f-f-Y-^;Z-/;/;/;(;_;:;.;.;<;@;l-[;};n-.-|;I-1;}-$;2;J-3;4;%;6=6=6=8=8=,=3-3-h*]*a=a=i*c&j*x&x&^&!=y&U%+*+% ", " 5;6;;;;;;;;;;;7;8;O-u-O-O-';';';';Q-c-c-);{-);w-{-{-S=k=S=U=T=k=V=k=m=e-e-~;e-e-{;1={;U-U-];V-];9;9;g-Y-^;^;/;0;_;a;a;:;.;.;b;@;[;G-H-c;[-|;I-d;$;$;J-o-}-B=B=|-&-6=8=8=,=9=3-h*0=]*`&e;a=c&x&d&^&^&y&|% ", " f;g;g;h;h;i;j;j;;;;;8;>;k;O-u-u-O-c-u-u-';c-c-c-);c-d-w-w-S=S=S=S=T=U=k=k=V=l;l;~;m;e-1=n;o;V-U-];p;9;g-q;g-0;r;s;t;u;u;:;:;.;v;+;b;[;};w;w;x;y;[-|;|;I-o-z;}-$-%-B=&-6=6=8=8=,=*-h*h*0=]*]*i*j*j*j*x&|% ", " f;A;B;g;g;g;g;g;h;j;6;6;;;k;;;;;O-;;O-k;u-u-c-Q-';';';c-v-);c-w-);d-S=S=U=S=S=T=S=l;~;m;{;{;C;y-y-V-];9;p;p;g-D;s;E;F;G;H;I;:;:;J;<;<;K;[;L;L;H-H-M;y;[-|;I-I-}-}-$-%-p-B=6=6=C=7=8=,=)=h*N;0=]*]*i*c&|% ", " f;O;P;Q;R;P;Q;S;g;g;g;g;g;i;j;j;;;;;;;;;7;k;O-O-u-u-u-P-';P-u-c-c-);d-w-S={-S=!;S=S=U=k=~;{;{;n;y-o;U-T;p;p;p;U;V;W;X;Y;Y;G;Z;u;:;`;J; >b;b;.>[;};H-n-n-c;[-[-I-#-#-o-$-$-p-|-&-6=6=q-8=8=9=9=h*h*0=]*+> ", " @>O;#>O;$>#>O;P;P;P;P;S;g;g;g;g;i;h;j;6;6;6;;;;;;;,;>;k;u-u-u-u-';u-';c-c-c-);{-);{-{-S-S=S=U=%>{;&>&>o;*>W-=>U;->;>>>,>'>Y;)>)>!>`;J;~>~>{>{>K;@;]>[;G-H-M;w;y;|;[-@-I-d;z;$-p-B=B=|-6=6=M*8=9=9=h*h*.% ", " ^>/>(>_>(>_>_>O;O;O;$>O;A;A;P;P;S;R;g;g;i;i;i;6;6;;;;;;;;;k;k;u-O-u-O-u-Q-u-c-c-';c-c-);w-d-S=S-S-:><>n;[>[>o;}>|>1>2>3>W;'>'>)>4>5>6>7>8>J;~>~>{>{>b;K;[;[;H-H-.-c;y;[-[-#-#-}-}-p-$-B=|-&-6=>=8=,=,=.% ", " 9>0>0>0>a>a>(>/>_>_>#>b>O;O;P;$>P;P;P;Q;g;S;c>g;g;h;i;d>j;6;e>;;;;;;k;u-;;O-u-O-Q-Q-';c-';c-);););{-S-S=n;n;[>f>|>g>g>2>'>h>h>h>h>i>)>!>7>7>8>`;`;~>~>b;b;K;.>[;[;m-w;w;c;.-[-j>I-#-z;}-k>B=B=B=&->=>=.% ", " 9>l>m>n>0>0>0>0>a>o>(>(>_>_>p>#>p>O;O;P;P;Q;P;Q;g;g;g;g;i;g;i;h;e>j;q>;;;;;;8;7;8;>;u-O-u-u-O-';r>c-c-););w-);s>|>t>u>v>3>w>,>,>'>h>x>)>i>y>5>z>7>`;`;A>~>B>{>K;b;[;L;};H-<-w;c;[-|;#-I-#-}-}-$-B=B=C> % ", " D>E>F>m>m>m>G>0>0>n>0>0>0>o>_>o>(>_>_>#>#>#>O;#>P;P;P;A;P;B;g;B;g;i;H>i;i;6;;;h;;;;;8;7;O-O-O-u-u-Q-I>';Q-c-c-J>K>L>M>N>O>u>v>w>P>w>Q>R>S>h>)>)>4>!>7>6>`;`;J;~>b;{>b;.>K;[;T>H-U>c;c;[-|;@-#-#-$-}-V> % ", " W>X>E>E>m>Y>m>Y>Z>`>n>0>0>0>l>0>0>0>(>0>(>/>(>_>_>#>#>O;P;P;P;P;A;B;A;R;g;g;g;j;i;i;i;;;;;;;;;;;8;k;8;O-u-O-u- ,K>.,+,@,M>M>#,u>v>3>P>,>Q>$,$,h>)>i>%,4>6>7>6>`;J;~>~>+;b;]>]>[;L;H-w;w;y;.-[-|;#-#-o-'$ ", " &,X>X>*,X>X>X>X>E>E>=,m>`>m>`>l>-,l>n>0>0>0>;,;,a>o>(>_>_>O;P;#>#>P;O;P;c>B;P;c>B;g;i;i;i;6;;;e>6;;;7;;;,;O-O->,_;,,',.,),!,L>N>N>#,v>v>~,w>w>w>h>h>{,i>y>4>4>7>6>:;`;J;~>{>{>b;]>.>[;L;w;w;c;[-.-[-#-'$ ", " &,],],],],^,*,],/,X>X>E>E>E>Y>m>m>m>`>n>`>l>G>l>0>0>0>(,;,o>(>_>(>#>O;p>#>#>P;P;P;c>A;S;g;g;g;g;i;j;i;;;;;6;;;_,s;:,<,[,},.,),+,|,L>M>N>#,v>v>P>w>w>$,h>h>S>)>)>4>7>7>6>`;A>~>{>b;b;b;]>.>[;L;w;H-c;[-'$ ", " &,1,2,3,4,2,],],],5,^,^,X>X>E>E>E>F>6,E>Y>`>`>l>`>`>`>n>l>0>o>a>_>(>_>_>_>#>p>O;O;P;$>P;P;P;g;c>g;c>g;g;i;q>i;7,s;8,8,9,:,[,[,',),.,),M>N>N>N>v>v>v>w>w>,>Q>$,Y;i>)>y>!>5>6>:;`;`;~>{>{>b;K;[;[;};H-U>'$ ", " 0,a,a,b,a,3,3,2,3,4,],],],*,^,],^,X>X>E>E>E>E>E>6,`>m>m>`>Z>G>`>l>0>0>0>a>_>(>p>(>#>#>#>$>P;#>P;P;P;P;P;B;g;i;c,s;d,e,f,8,:,<,:,[,[,',',),@,M>N>M>#,g,v>h,P>w>'>$,h>S>)>y>y>4>6>7>`;`;~>B>b;b;b;]>[;L;S# ", " i,j,k,k,b,j,b,a,3,3,3,2,l,3,],l,],],*,/,/,X>m,E>X>Y>Y>=,F>F>F>m>-,-,l>n>`>0>0>0>o>o>o>p>(>#>p>#>#>b>O;P;n,P;c>c,V;o,p,q,e,r,r,s,9,9,<,,,},.,.,+,L>M>M>N>O>v>v>3>w>Q>'>h>h>{,)>y>4>4>6>6>`;`;~>~>b;b;b;S# ", " t,u,u,j,v,k,k,j,k,a,w,a,b,a,a,3,1,4,x,],l,],],/,X>X>^,y,E>Y>=,=,m>z,`>`>m>l>n>n>l>0>G>0>0>o>(>/>_>#>#>#>O;$>$>A,V;B,C,o,p,D,e,e,r,8,E,9,<,[,},',.,.,!,M>M>F,O>O>~,3>P>w>$,Q>h>S>Y;G,y>4>7>6>8>`;J;~>~>:# ", " t,H,I,u,u,J,u,j,j,K,k,j,j,k,k,b,b,a,a,3,1,4,4,],4,],],/,/,^,X>/,*,E>E>E>E>`>m>`>`>`>`>m>0>-,0>0>0>0>(>/>_>/>p>L,|>M,N,N,C,O,P,Q,D,e,f,e,8,9,9,<,[,',.,),),|,M>N>N>u>u>v>P>w>w>,>$,h>S>)>y>4>4>7>:;8>`;R, ", " S,T,H,H,I,U,V,V,u,v,W,u,X,j,k,k,b,b,b,b,a,a,a,3,3,3,Y,x,x,],],],],],X>X>E>E>E>E>=,F>`>`>z,`>m>`>0>G>l>0>0>0>0>L,|>Z,`, '.'N,N,+'o,P,P,e,e,@'8,9,8,:,<,[,,,#'),),M>M>F,N>u>v>3>w>,>,>h>h>h>S>i>y>4>4>6>:# ", " S,$'%'%'T,T,I,U,I,V,U,H,u,u,J,J,u,v,v,j,j,k,b,b,a,a,b,3,3,1,l,3,],l,x,*,],*,*,/,m,X>m,E>F>Y>`>z,m>m>`>`>m>-,G>&'|>*'Z,Z,Z,=' 'M,N,B,-'o,o,d,D,e,;'8,8,9,>'[,,,',),),+,M>M>N>N>v>v>h,w>$,h>h>h>{,)>)>%,:# ", " ,''''''''')')')'!')'I,T,T,I,H,u,u,u,u,v,W,v,j,j,j,j,k,~'~'{'a,3,3,3,2,x,4,],],],],/,*,y,/,X>m,E>z,E>F>F>Y>`>`>]'|>^'/'('*'Z,_':'M,M,M,N,o,o,<'P,D,D,e,8,s,9,:,<,[,['.,.,),M>@,M>#,O>}'v>3>w>w>h>h>h>S>_# ", " |'1'2'3'4'''''''5'''%'T,)'T,T,I,H,u,I,6'u,u,u,v,u,u,X,v,j,j,j,7'b,a,a,b,3,3,3,Y,l,],Y,],*,*,*,*,*,X>X>E>E>E>Y>8'|>9'9'0'a'('('b'*'Z,='M,N,c'B,o,o,Q,P,Q,q,e,8,8,9,<,<,[,.,.,),),M>M>F,N>d'u>h,w>w>,>$,o# ", " e'f'g'1'1'1'2'h'4'''4'''''''%'%'%'I,T,T,I,T,u,6'u,u,u,u,J,v,j,J,j,k,k,j,i'b,a,a,3,3,2,],4,x,],],],],^,/,/,*,X>j'k'l'l'm'n'o'p'/'('('*'_'Z,='M,q'.'-'r'o,Q,D,e,e,8,8,8,9,<,[,',',s'),L>M>M>N>O>v>3>3>w>/# ", " t'u'v'v'e'w'x'w'1'y'1'3'3'4'4'''''5'%''')')'T,T,T,T,I,u,u,u,u,u,v,J,K,j,v,k,k,b,b,a,a,b,3,3,3,3,1,l,l,],*,*,],z'A'B'C'D'l'l'9'n'0'^'('('E'*'_'='='='F'N,O,o,P,P,P,D,e,f,8,9,:,[,[,,,.,),L>@,M>N>O>u>u>G' ", " H'I'J'K'K'v'g'L'L'w'w'M'1'1'y'''3'N'2'''%'%'%')'%'T,T,T,T,I,T,I,u,H,u,u,u,u,j,j,k,~'b,b,~'7'3,7'3,3,3,2,1,Y,O'P'Q'R'S'B'B'l'l'o'o'T'0'p'('*'E'_' 'U'='.'N,N,O,o,D,e,D,e,f,8,8,:,V'[,[,.,',),@,|,M>/#W' ", " X'Y'Z'`'`' ) ) )g'L'.)L'+)1'w'1'1'3'1'2'''''''''%'%'%'!')'T,)'I,T,H,@)u,H,u,u,u,J,j,j,j,k,k,b,b,a,a,b,a,3,#)P'$)%)&)R'R'S'B'D'l'l'9'9'0'0'p'('*)Z,Z, 'U'='.'N,N,r'P,D,P,D,@'e,8,s,9,<,[,=)',),@,-) ", " ;)>),)`'`'`'`'') )g'.).).)L'))w'w'))w'1'1'4'1'3'4'N'''''%'%')'%'T,T,T,T,I,T,V,H,u,u,u,u,K,v,J,J,k,~'b,~'!)~){)])^)/)/)()R'_)S'B'l'l'm'9'n'0'('('('b'Z,Z,=' 'M,N,N,C,o,o,p,e,e,e,8,8,9,:,<,[,_;:) ", " <)[)})`'`'`'`'`' ) ) )|)1).).)L'L'L'L'L'w'))1'1'1'3'2'3'h'h'''%'%')')'T,!'T,T,T,T,6'u,u,H,u,u,u,j,J,j,2)P'3)4){)5)5)$)$)Q'Q'S'S'B'D'6)l'T'o'o'0'0'('('*)Z,Z,M,M,.'N,-'o,o,o,P,d,e,;'8,8,:,K> ", " 7)8)9)0)J'`'`'`'`'`' ) )a)b)c)d).).)d).)L'.)e)1'))x'1'1'1'4'''''''''%'%')'%'!')')'I,I,U,U,V,u,I,u,u,f)g)h)i)j)4)k)l)5)])$)&)&)m)S'B'D'n)6)l'9'n'o'0'p'('E'_'o)Z,M,.'F'N,r'o,P,o,e,D,p)s;q) ", " r)X's)t)u)v)`'`'`'`'K'w)K'a)b)b)x)1).).).).).)L'w'))))1'1'1'3'1'N'1'4'''y)''%')')'T,T,T,T,6'I,V,z)g)A)A)B)h)i)i)l){){)$)$)/)C)()R'S'B'B'C'l'm'9'o'0'a'D)('_'Z,_'M,='F'N,N,r'o,P,E)s; ", " F)G)H)I)J)`'`'`'`'`'w) )w)b)b)b)c)K)L)d).).)d).)L'))))w'e)e)1'1'y'2'''4'4'%''')'%'M)T,T,T,N)O)P)A)A)Q)B)B)R)j)j){)5)5)5)$)$)Q'&)S'S'B'D'l'l'9'0'0'p'p'('('*'Z,:'M,F'M,N,-'V;S) ", " T)U)I'V)J'`'`'`'`'w)w)w)W)c)c)b)c)c)c)L)b)d).).).)X)L'+)w'e)e)1'1'1'h'2'4'''''%')'%'Y)Z)`) !.!P)A)A)A)B)i)j)4)4)4)4)5)$)$)/)Q'&)S'S'B'D'l'm'9'0'0'p'a'('*'_'Z,Z,:'M,V; ", " r)+!s)t)u)v)`'`'`'`'w)w)@!W)b)b)b)c)b)c)b)L)K).).)d)d)L'L'L'w'w'1'e)1'1'1'3'4'''#!Z)$!$!%!&!.! ! !P)A)*!B)=!i)l)l)4)5)5)$)$)Q'R'S'S'B'6)l'l'l'9'n'0'D)('*)E'_'|>-! ", " ;!>!s),!'!)!`'`'`'`'!!w)W)b)~!b)b)b)c)b)b)b)c)b)K).).)L'.).)L'))))e)+)1'1'{!]!^!/!$!$!%!%!&!.! !P)(!Q)B)B)h)j)l){)5)^)$)$)Q'&)R'S'S'B'D'6)m'm'9'9'p'|>|>_! ", " :!)[!}!`'`'`'`'!!!!!!|!~!~!~!c)b)b)c)c)b)b)c)K)x)L).)1).)X)L'L'))1!2!3!3!4!^!/!/!$!%!5!&!.!.! !A)A)B)h)i)i)l)4)5)5)$)$)%)R'&)R'S'B'n)l'k'6!7! ", " 8!9![)0!a!b!`'`'`'`'!!!!!!|!~!~!b)~!c)c)b)b)b)c)b)c)c)L)d).).).)c!2!d!e!3!f!4!4!g!/!%!`)`)&!.!.!P)A)h!B)B)i)i!4)4){)5)])$)$)%)&)S'k'j!k! ", " l!H's)m!n!o!`'`'`'`'!!!!|!~!~!~!~!p!b)b)c)c)b)b)b)b)b)b)K)q!2!r!r!s!e!e!3!3!4!4!/!/!`)%!`)`).!P)t!A)Q)B)u!i)j)l)l)4)5)5)P'v! ", " w!x![)y!z!`'`'`'`'!!!!!!A!~!~!~!~!~!p!~!b)b)c)b)b)c)q!2!B!B!B!B!r!C!e!e!3!f!D!4!/!$!%!`)E!.!.!P)A)F!B)B)G!R)P'P'H! ", " I!>)J!K!L!`'`'`'`'!!!!|!~!~!~!~!~!~!~!b)~!b)c)M!2!B!B!B!B!B!r!r!N!C!e!3!O!3!4!^!/!/!%!P!`).!.!t!(!Q!g)R! ", " S!T!s)U!V!o!`'`'`'!!!!!!|!W!~!~!W!~!~!~!~!X!2!B!B!B!B!B!B!B!r!B!r!Y!e!Z!e!`!D!4!^!$!$!%!5!Z)O) ~ ", " .~+~@~I)#~`'`'`'`'!!!!A!|!W!~!W!W!W!X!2!B!B!B!B!B!B!B!B!B!B!r!r!r!r!e!Z!3!D!D!g!Z)O)$~ ", " %~8)u'&~L!`'`'`'`'!!!!|!W!~!W!X!2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!r!r!d!3!2!*~=~ ", " -~T!s);~>~v)`'`'`'!!!!!!A!X!2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!2!,~'~ ", " )~t)s)!~~~)!`'`'`'!!{~2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!2!,~]~ ", " :!U)U)^~/~`'`'`'(~2!B!B!B!B!B!B!B!B!B!B!B!2!_~ ", " :~<~@~+~[~b!`'}~2!B!B!B!B!B!B!B!B!2!|~ ", " 1~2~3~,!'!4~2!B!B!B!B!B!2!5~ ", " 6~x!@~7~2!B!8~2!9~ ", " 0~a~2!b~ ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; """ def tankWeight(obj, angles=Vector(0.0,0.0,0.0), cor=Vector(0.0,0.0,0.0)): """ Compute tank fluid weight and their center of gravity. @param obj Tank object. @param angles Tank angles, Roll, Pitch and Yaw. @param cor Center or rotation. @return Weight and center of gravity. None if errors detected """ # Test if is a tank instance props = obj.PropertiesList try: props.index("IsShipTank") except ValueError: return None if not obj.IsShipTank: return None # Get object solids Solids = obj.Shape.Solids W = [0.0, 0.0, 0.0, 0.0] for s in Solids: # Get fluid volume bbox = s.BoundBox z0 = bbox.ZMin z1 = bbox.ZMax dz = obj.Level/100.0 * (z1-z0) z = z0 + dz dx = bbox.XMax-bbox.XMin dy = bbox.YMax-bbox.YMin box = Part.makeBox(3.0*(dx), 3.0*(dy), (z1-z0)+dz, Vector(bbox.XMin-dx, bbox.YMin-dy, bbox.ZMin-(z1-z0))) fluid = s.common(box) vol = fluid.Volume W[0] = W[0] + vol*obj.Density # Compute fluid solid in rotated position (non linear rotation # are ussually computed as Roll -> Pitch -> Yaw). s.rotate(cor, Vector(1.0,0.0,0.0), angles.x) s.rotate(cor, Vector(0.0,1.0,0.0), angles.y) s.rotate(cor, Vector(0.0,0.0,1.0), angles.z) bbox = s.BoundBox z0 = bbox.ZMin z1 = bbox.ZMax dx = bbox.XMax-bbox.XMin dy = bbox.YMax-bbox.YMin Error = 0.01*vol z = 0.0 v = 0.0 while(abs(vol - v) > Error): z = z + (vol - v) / (dx*dy) dz = z - z0 box = Part.makeBox(3.0*(dx), 3.0*(dy), (z1-z0)+dz, Vector(bbox.XMin-dx, bbox.YMin-dy, bbox.ZMin-(z1-z0))) fluid = s.common(box) v = fluid.Volume if(abs(vol - v) / (dx*dy) <= 0.000001): break # Add fluid moments for f in fluid.Solids: cog = f.CenterOfMass W[1] = W[1] + f.Volume*obj.Density*cog.x W[2] = W[2] + f.Volume*obj.Density*cog.y W[3] = W[3] + f.Volume*obj.Density*cog.z return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]]