# -*- coding: utf-8 -*- # Copyright © 2019 Richard P. Parkins, M. A. # Released under the GPL """ *************************************************************************** * * * This macro creates a FreeCAD document containing a virtual Megaminx * * (see https://en.wikipedia.org/wiki/Megaminx) and enables you to * * manipulate it. It displays six views of the Megaminx including each * * of the twelve faces at least once. There are various arrows (each * * with a tooltip which will be displayed as long as you hover the * * mouse over it). By clicking on arrows you can rotate faces of the * * Megaminx, rotate the whole Megaminx, or rotate or reflect the history * * which it maintains of the rotations that you have done so far. There * * is also a Megaminx menu which is shown at the right of the menu bar * * as long as you have at least one Megaminx document open. From the * * menu you can display some help text, reset the Megaminx to its * * initial (solved) state, undo the last rotation (and remove it from * * the history), copy the history to the clipboard, step through the * * history, randomise the Megaminx, and enable or disable the echoing of * * rotations to the Report View. All of these functions can also be * * invoked by typing suitable commands into the Python console window. * * * * A history saved to the clipboard can be pasted into the Python * * console window or copied into a file which can be called as a macro * * into the active Megaminx document. You can have more than one * * Megaminx document open at a time, although only one can be active. * * * *************************************************************************** * * * This file is a supplement to the FreeCAD CAx development system. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License (GPL) as * * as published by the Free Software Foundation; either version 3 of * * the License, or (at your option) any later version. For details or to * * obtain a copy see http://www.gnu.org/licenses/gpl.html or write to * * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * * Boston, MA 02110-1335 USA * * * * This software 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 General Public License for more details. * * * *************************************************************************** """ __title__ = "Megaminx" __author__ = "Aleph0" __version__ = "00.06" __date__ = "17/02/2019" __Comment__ = "Virtual Megaminx" __Wiki__ = "http://www.freecadweb.org/wiki/index.php?title=Macro_Megaminx" __Help__ = "see first few lines of macro text" __Status__ = "stable" __Requires__ = "freecad 0.17" #OS: "openSUSE Leap 15.0" #Word size of OS: 64-bit #Word size of FreeCAD: 64-bit #Version: 0.17.Unknown #Build type: Release #Python version: 3.6.5 #Qt version: 5.9.4 #Coin version: 3.1.3 #OCC version: 7.2.0 #Locale: English/UnitedKingdom (en_GB) # To show a function's documentation string, type ## print(function.__doc__) # at the FreeCAD Python console. import FreeCAD from FreeCAD import Base import Part import Draft import DraftVecUtils as DVU from pivy import coin from pivy.coin import * from PySide import * import math import ctypes import random # All this work takes a while, so show the wait cursor. QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor)) # Create a new document and make it current. App.ActiveDocument = App.newDocument("Megaminx") Gui.ActiveDocument = Gui.getDocument(App.ActiveDocument.Name) # We use a dictionary to avoid having global variables which would # cause interference between multiple instantiations of the Megaminx # if you run this macro more than once. # It would be easier to have a dictionary for each document, but I have not # found a way to attach a dictionary to a document, so each dictionary key # is tagged with its document name. # Dictionary objects can be *anything* including other dictionaries or # class instances containing lots of fields. def _set(name, object): """ This internal function sets a value for this document. """ d = FreeCAD.Megaminx_Dictionary d[App.ActiveDocument.Name + "$" + name] = object def _get(name): """ This internal function gets a value for this document.\ """ d = FreeCAD.Megaminx_Dictionary return d[App.ActiveDocument.Name + "$" + name] class deletionCleaner(object): """ This class handle tidying up after a document is deleted.\ """ def __init__(self): pass def slotDeletedDocument(self, doc): """ This function is called when a document gets deleted. It goes through the dictionary removing all the entries belonging to the deleted document. If there are no Megaminx documents left (the dictionary in empty), it removes the Megaminx menu,\ """ d = FreeCAD.Megaminx_Dictionary s = str(doc.Label) + "$" n = len(s) deletions = [] action = None for key in d: if key[0:n] == s: deletions.append(key) if key[n:] == "menu": action = d[key].menuAction() for key in deletions: del d[key] if len(d) == 0 and action != None: # last document gone, remove menu Gui.getMainWindow().menuBar().removeAction(action) # If this is the first time this macro has been run in this invocation of # FreeCAD, create our dictionary of document-specific data and add # an observer to the app that cleans up after a document is deleted. if not hasattr(FreeCAD, "Megaminx_Dictionary"): FreeCAD.Megaminx_Dictionary = {} App.addDocumentObserver(deletionCleaner()) # This parameter is the step count for animating rotations. # If you have a fast computer you can increase the value. # This will make the animation slower and smoother. # If you have a slow computer you can decrease the value. # This will make the animation faster but more jerky. # Zero gives instantaneous rotations with no animation. _set("slowness", 20) # This parameter is the step count for animating history modifications. # It is like slowness, but for history modifications. # The default is zero which gives instantaneous history modifications with # no animation. If you want to animate history playback, set a nonzero value. _set("historyslowness", 0) # This parameter controls the scaling of the text and buttons # texture-mapped onto some facets. It should be your screen's # dots per inch count. _set("dpi", 130) # This parameter controls echoing of rotations to the console. # True enables echoing, False disables it. # Output may go to the Python console or the Report view depending on your # FreeCAD version and setup and where the command came from. _set("echo", False) def set_echo(newstate): """ This function sets the state of echo from its argument.\ """ _set("echo", newstate) d = FreeCAD.Megaminx_Dictionary for key in d: if key.endswith("menu"): menu = d[key] for action in menu.actions(): if action.iconText() == "Echo": action.setChecked(newstate) break def _set_echo(): """ This internal function sets the state of echo from the menu item.\ """ d = FreeCAD.Megaminx_Dictionary for key in d: if key.endswith("menu"): menu = d[key] for action in menu.actions(): if action.iconText() == "Echo": _set("echo", action.isChecked()) break def compressImage(s): """ Compress an image This is an internal function used to build the Megaminx macro. Its argument should be a string returned by image.get().getString() and it returns a compressed version which can be assigned to an image. """ s = s.replace("0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff", "' + ffs + '") s = s.replace("ffs + '\n' + ffs + '\n' + ffs + '\n' + ffs", "ffs4") s = s.replace("ffs4 + '\n' + ffs4 + '\n' + ffs4 + '\n' + ffs4", "ffs16") s = s.replace( "ffs16 + '\n' + ffs16 + '\n' + ffs16 + '\n' + ffs16", "ffs64") s = s.replace ("\n", " \\\n") s = "'" + s + "'" t = "" s.replace(" + ' '", t) return s # Distance factor for extra views _set("dd", 6.2) # Scale factor for extra views _set("sf", 0.8) # Some geometry constants phi = 1.6180339887 piz4 = 3.1415926535 * 0.4 c0 = 1.0 s0 = 0.0 c1 = math.cos(piz4) s1 = math.sin(piz4) c2 = math.cos(piz4 * 2) s2 = math.sin(piz4 * 2) c3 = math.cos(piz4 * 3) s3 = math.sin(piz4 * 3) c4 = math.cos(piz4 * 4) s4 = math.sin(piz4 * 4) origin = Base.Vector(0.0, 0.0, 0.0) class helpWindow(QtGui.QDialog): """ This class is a dialog box contatining help text. """ def __init__(self, parent): super(helpWindow, self).__init__() self.setParent(parent) self.setGeometry(parent.geometry()) self.helptext = QtGui.QTextEdit(self) self.helptext.setText( """This macro displays six views of a Megaminx on which you can \ rotate faces (by clicking on the black arrows) or rotate the \ whole Megaminx (by shift-clicking on the back arrows). Each arrow has a \ tooltip which will appear if you hover the mouse over it. Rotations can be \ echoed to the report view if the variable echo (which can be changed from \ the Megaminx menu) is True. Each face has a text label on it which shows its face number. Note that \ the face numbers are fixed in the coordinate system of the view, not in \ the coordinate system of the Megaminx itself. So if you rotate the Megaminx, \ the face numbers will be on different faces but in the same places in the \ display. The reason for this is that the sine and cosine of 72 degrees \ cannot be represented exactly, so if it did lots of rotations the rounding \ errors would accumulate and it would look wrong: in order to avoid this the \ macro cheats and just switches the colours. The macro maintains a history of the rotations that have been done. \ This allows you to undo your rotations. The history is a Python \ script which is executable if this macro has been loaded. You can \ copy the history to the clipboard and replay it by pasting into the \ Python console, or paste it into your favourite editor and save it \ as a FreeCAD macro. You can reset the model to its initial state \ which also clears the history. You can also reset the model and then step through a copy of the \ history displaying a dialog box before each step. Clicking on the OK \ button or typing a return will remove the dialog box and execute the \ step: if there are more steps to do it will then redisplay the dialog \ box with the next step. Clicking on the Stop button or typing an ESC \ will remove the dialog box without executing the step and cease \ stepping through the history. The history is left containing the \ steps actually executed. You can randomise the Megaminx which executes 120 random rotations \ (without animation to speed it up) to get it thoroughly confused and \ give you a puzzle to solve. The random rotations are stored in the \ history, so if you have partially solved the puzzle, copying and saving \ the history will produce a macro which can be run on a reset Megaminx to \ recreate the partially solved state. You can rotate the history (by ctrl-clicking on the black arrows) or \ reflect the history (by clicking on the green arrows). You can also \ replace the history by its group-theoretic inverse (the sequence of \ rotations which would undo the whole history). These functions can be \ useful in composing more useful macros out of simple ones. All these functions are available by calling them from the Python \ console or by clicking on a suitable arrow or from the menu which \ this macro adds to the menu bar. Each menu item has a brief usage \ tip which appears on the status bar at the bottom of the FreeCAD \ window when you move the mouse over that menu item. If you want to drive it from the Python console, the function names are \ (where face?? is one of face00, face10, face11, face12, face13, \ face14, face20, face21, face22, face23, face24, face30; and steps \ is the number of steps to animate the rotation, defaulting if \ omitted to the value of the variable slowness set near the start \ of this macro; and arrow is one of arrow00x, arrow01x, arrow02x, \ arrow03x, arrow04x, arrow10x, arrow14x, arrow20x, arrow11x, arrow21x, arrow12x, arrow22x, arrow13x, arrow23x, arrow24x):- help_window() [displays this window] reset() undo() copy_history() undo_history() randomise() set_echo(True or False) rotp("face??", steps) [rotate face by 72 degrees anticlockwise] rotm("face??", steps) [rotate face by 72 degrees clockwise] rota("face??", steps) [rotate whole Megaminx by 72 degrees anticlockwise] roth("face??") [rotate the history by 72 degrees anticlockwise] reflect("arrow") [reflect the history]\ """) self.helptext.setReadOnly(True) self.OKbutton = QtGui.QPushButton(self) self.OKbutton.setText("OK") self.OKbutton.clicked.connect(self.accept) self.OKbutton.setDefault(True) self.setAutoFillBackground(True) def paintEvent(self, event): """ This internal methodn overrides QWidget.paint(). It adjusts the geometry of this window in case FreeCAD's window has been or \ is being resized.\ """ geom = self.parent().geometry() font = self.OKbutton.font() margin = 10 r = QtGui.QFontMetrics(font).boundingRect(" OK ") xpos = (geom.width() - r.width()) / 2 h = r.height() ypos = geom.height() - h - 2 * margin self.helptext.setGeometry(0, 0, geom.width(), ypos) self.OKbutton.setGeometry(xpos, ypos + margin, r.width(), h) self.setGeometry(0, 0, geom.width(), geom.height()) super(helpWindow, self).paintEvent(event) def help_window(): """ This function displays the help window.\ """ global hw mw = Gui.getMainWindow() view3DWidget = findView(mw.centralWidget()) if view3DWidget != None: hw = helpWindow(view3DWidget) d = FreeCAD.Megaminx_Dictionary actionHelp = None for key in d: if key.endswith("menu"): menu = d[key] for action in menu.actions(): if action.iconText() == "Show help": actionHelp = action actionHelp.setEnabled(False) break break hw.exec() if action != None: actionHelp.setEnabled(True) class face: """ Class containing the parts and operations of a face of the Megaminx.\ """ def __init__(self, normal): # face normal self.normal = normal # face centre facet self.middle = None # opposite face self.opposite = None # filled in when we have defined all faces # name self.name = "" # 5 vertices in ccw order round middle from outside # each with 3 facets in ccw order round vertex from outside self.vertex = [[None, None, None] for i in range (5)] # 5 edges in ccw order round middle from outside # each with 2 facets, on face before on adjacent face self.edge = [[None, None] for i in range (5)] # black interior facets only visible partly during rotation # order doesn't matter self.invis = [None for i in range(40)] # adjacent facets for all rotation self.allvis = [[None for i in range (8)] for j in range(5)] # dictionary for roth() self.rhdict = {} # texture image for face label self.image = None def setColour(self, c): """ Set this face's colour to c.\ """ for i in range(5): self.vertex[i][0].ViewObject.DiffuseColor = c self.edge[i][0].ViewObject.DiffuseColor = c self.middle.ViewObject.DiffuseColor = c def _rwhole(self, degrees): """ This internal face method rotates the model about this face's \ normal. Degrees is the angle to rotate by.\ """ pl = Base.Placement(origin, self.normal, degrees) for ob in _get("all"): ob.Placement = pl def _rotate(self, degrees): """ Internal function to rotate this face. degrees is the angle to rotate by """ pl = Base.Placement(origin, self.normal, degrees) self.middle.Placement = pl for a in self.vertex: a[0].Placement = pl a[1].Placement = pl a[2].Placement = pl for a in self.edge: a[0].Placement = pl a[1].Placement = pl for ob in self.invis: ob.Placement = pl def _cfixp(self): """ This internal face method sets the colours after rotating \ +72 degrees.\ """ c0 = self.vertex[4][0].ViewObject.DiffuseColor c1 = self.vertex[4][1].ViewObject.DiffuseColor c2 = self.vertex[4][2].ViewObject.DiffuseColor c3 = self.edge[4][0].ViewObject.DiffuseColor c4 = self.edge[4][1].ViewObject.DiffuseColor for i in range(4): self.vertex[4 - i][0].ViewObject.DiffuseColor =\ self.vertex[3 - i][0].ViewObject.DiffuseColor self.vertex[4 - i][1].ViewObject.DiffuseColor =\ self.vertex[3 - i][1].ViewObject.DiffuseColor self.vertex[4 - i][2].ViewObject.DiffuseColor =\ self.vertex[3 - i][2].ViewObject.DiffuseColor self.edge[4 - i][0].ViewObject.DiffuseColor =\ self.edge[3 - i][0].ViewObject.DiffuseColor self.edge[4 - i][1].ViewObject.DiffuseColor =\ self.edge[3 - i][1].ViewObject.DiffuseColor self.vertex[0][0].ViewObject.DiffuseColor = c0 self.vertex[0][1].ViewObject.DiffuseColor = c1 self.vertex[0][2].ViewObject.DiffuseColor = c2 self.edge[0][0].ViewObject.DiffuseColor = c3 self.edge[0][1].ViewObject.DiffuseColor = c4 def _cfixm(self): """ This internal face method sets the colours after rotating\ -72 degrees.\ """ c0 = self.vertex[0][0].ViewObject.DiffuseColor c1 = self.vertex[0][1].ViewObject.DiffuseColor c2 = self.vertex[0][2].ViewObject.DiffuseColor c3 = self.edge[0][0].ViewObject.DiffuseColor c4 = self.edge[0][1].ViewObject.DiffuseColor for i in range(4): self.vertex[i][0].ViewObject.DiffuseColor =\ self.vertex[i + 1][0].ViewObject.DiffuseColor self.vertex[i][1].ViewObject.DiffuseColor =\ self.vertex[i + 1][1].ViewObject.DiffuseColor self.vertex[i][2].ViewObject.DiffuseColor =\ self.vertex[i + 1][2].ViewObject.DiffuseColor self.edge[i][0].ViewObject.DiffuseColor =\ self.edge[i + 1][0].ViewObject.DiffuseColor self.edge[i][1].ViewObject.DiffuseColor =\ self.edge[i + 1][1].ViewObject.DiffuseColor self.vertex[4][0].ViewObject.DiffuseColor = c0 self.vertex[4][1].ViewObject.DiffuseColor = c1 self.vertex[4][2].ViewObject.DiffuseColor = c2 self.edge[4][0].ViewObject.DiffuseColor = c3 self.edge[4][1].ViewObject.DiffuseColor = c4 def _rotp(self, steps = None): """ This internal face method rotates this face by +72 degrees.\ """ if steps == None: steps = _get("slowness") if steps > 1: removeTextures() angle = 0.0 for i in range(steps - 1): angle = angle + 72.0 / steps self._rotate(angle) Gui.updateGui() # finally we undo the rotation and switch the colours instead # because a 72 degree rotation cannot be represented exactly # so doing lots of them would accumulate rounding errors self._rotate(0.0) setTextures() self._cfixp() def rotp(self, steps = None): """ Rotate this face by +72 degrees. It also updates the history and does echoing if enabled. steps is the number of steps to animate the rotation, which defaults to slowness defined near the start of this macro. Zero steps omits the animation. This can be invoked by clicking an anticlockwise pointing curved black arrow./ """ if steps == None: steps = _get("slowness") self._rotp(steps) s = "rotp('" + self.name + "', " + str(steps) + ")" _get("history").append(s) if _get("echo"): print(s) updateMenu() def _rotm(self, steps = None): """ This internal face method rotates this face by -72 degrees.\ """ if steps == None: steps = _get("slowness") if steps > 1: removeTextures() angle = 0.0 for i in range(steps - 1): angle = angle - 72.0 / steps self._rotate(angle) Gui.updateGui() # finally we undo the rotation and switch the colours instead # because a 72 degree rotation cannot be represented exactly # so doing lots of them would accumulate rounding errors self._rotate(0.0) setTextures() self._cfixm() def rotm(self, steps = None): """ Rotate this face by -72 degrees. It also updates the history and does echoing if enabled. steps is the number of steps to animate the rotation, which defaults to slowness defined near the start of this macro Zero steps omits the animation. This can be invoked by clicking a clockwise pointing curved black arrow.\ """ if steps == None: steps = _get("slowness") self._rotm(steps) s = "rotm('" + self.name + "', " + str(steps) + ")" _get("history").append(s) if _get("echo"): print(s) updateMenu() def _rota(self, steps = None): """ This internal face method rotates the Megaminx by +72 degrees.\ """ if steps == None: steps = _get("slowness") if steps > 1: removeTextures() angle = 0.0 for i in range(steps - 1): angle = angle + 72.0 / steps self._rwhole(angle) Gui.updateGui() # finally we undo the rotation and switch the colours instead # because a 72 degree rotation cannot be represented exactly # so doing lots of them would accumulate rounding errors self._rwhole(0.0) setTextures() self._cfixp() opp = self.opposite opp._cfixm() a = [self.allvis[4][i].ViewObject.DiffuseColor for i in range(8)] b = [opp.allvis[0][i].ViewObject.DiffuseColor for i in range(8)] for i in range(8): for j in range(4): self.allvis[4 - j][i].ViewObject.DiffuseColor =\ self.allvis[3 - j][i].ViewObject.DiffuseColor opp.allvis[j][i].ViewObject.DiffuseColor =\ opp.allvis[j + 1][i].ViewObject.DiffuseColor self.allvis[0][i].ViewObject.DiffuseColor = a[i] opp.allvis[4][i].ViewObject.DiffuseColor = b[i] def rota(self, steps = None): """ Rotate the whole Megaminx by +72 degrees. It also updates the history and does echoing if enabled. steps is the number of steps to animate the rotation, which defaults to slowness defined near the start of this macro. Zero steps omits the animation. Use face.opposite.rota() to rotate by -72 degrees. This function is invoked by shift-clicking on a curved black arrow.\ """ if steps == None: steps = _get("slowness") self._rota(steps) s = "rota('" + self.name + "', " + str(steps) + ")" _get("history").append(s) if _get("echo"): print(s) updateMenu() def roth(self): """ Rotate the history by +72 degrees. This replaces the history by the equivalent of rotating the Megaminx by -72 degrees about this face's normal, executing the history, and then rotating the Megaminx by +72 degrees about this face's normal. However it does this by modifying the operations in the history without adding extra rotations. Use face.opposite.roth() to rotate by -72 degrees. This can be invoked by control-clicking on a curved black arrow. Rotating the history can be useful to align it with a real Megaminx before doing step_history(), or to compose more complex macros out of simple ones.\ """ history = _get("history") nh = history[:] reset() hs = _get("historyslowness") while len(nh) > 0: s = nh.pop(0) sl = len(s) - 1 f = "" rot = "" steps = "" if sl >= 13 and s[0:3] == "rot" and s[4] == "(" \ and (s[5] == '"' or s[5] == "'") \ and s[5] == s[12] and s.endswith(")"): f = s[6:12] rot = s[0:4] if s[13] == ",": steps = s[14:sl].strip() if steps == "": steps = "0" d = FreeCAD.Megaminx_Dictionary key = App.ActiveDocument.Name + "$" + f if rot in ["rota", "rotm", "rotp"] and key in d \ and f in self.rhdict and steps.isnumeric(): fn = self.rhdict[f] if rot == "rota": fn._rota(hs) history.append("rota('" + fn.name + "', " + steps + ")") elif rot == "rotm": fn._rotm(hs) history.append("rotm('" + fn.name + "', " + steps + ")") elif rot == "rotp": fn._rotp(hs) history.append("rotp('" + fn.name + "', " + steps + ")") else: print("Invalid history entry '" + s + "'") updateMenu() def reset(): """ Reset the model to its initial state.\ """ _get("history").clear() _get("face00").setColour([(1.0, 1.0, 1.0)]) # white _get("face10").setColour([(0.1, 0.6, 0.1)]) # darkgreen _get("face11").setColour([(0.75, 0.0, 0.0)]) # red _get("face12").setColour([(0.2, 0.2, 0.9)]) # darkblue _get("face13").setColour([(1.0, 1.0, 0.0)]) # yellow _get("face14").setColour([(0.4, 0.0, 0.4)]) # purple _get("face20").setColour([(0.1, 0.5, 0.6)]) # paleblue _get("face21").setColour([(1.0, 1.0, 0.8)]) # cream _get("face22").setColour([(1.0, 0.6, 0.8)]) # pink _get("face23").setColour([(0.4, 0.6, 0.4)]) # palegreen _get("face24").setColour([(0.8, 0.3, 0.1)]) # orange _get("face30").setColour([(0.8, 0.8, 0.8)]) # gray updateMenu() def setTextures(): """ This is an internal function used to make the model. It creates the text labels on the face centres by applying a texture to each face centre. The textures are made from images with the required text. The images are defined in a big table below. Note that the face labels are in the coordinate syste of the view, not the coordinate sytem of the model. If you rotate the Megaminx, the face labels will be on faces with different colours but in the same positions in the view.\ """ s = str(_get("dpi") / 130.0) s = s + " " + s f = _get("face00") node = f.middle.ViewObject.RootNode textr = coin.SoTexture2Transform() textr.rotation.set('1.5708') textr.scaleFactor.set(s) texim = coin.SoTexture2() texim.image.set(f.image) node.insertChild(textr, 1) node.insertChild(texim, 2) f = _get("face10") node = f.middle.ViewObject.RootNode textr = coin.SoTexture2Transform() textr.rotation.set('3.0') textr.scaleFactor.set(s) texim = coin.SoTexture2() texim.image.set(f.image) node.insertChild(textr, 1) node.insertChild(texim, 2) f = _get("face11") node = f.middle.ViewObject.RootNode textr = coin.SoTexture2Transform() textr.rotation.set('-0.5') textr.scaleFactor.set(s) texim = coin.SoTexture2() texim.image.set(f.image) node.insertChild(textr, 1) node.insertChild(texim, 2) f = _get("face12") node = f.middle.ViewObject.RootNode textr = coin.SoTexture2Transform() textr.rotation.set('1.57') textr.scaleFactor.set(s) texim = coin.SoTexture2() texim.image.set(f.image) node.insertChild(textr, 1) node.insertChild(texim, 2) f = _get("face13") node = f.middle.ViewObject.RootNode textr = coin.SoTexture2Transform() textr.rotation.set('-0.4') textr.scaleFactor.set(s) texim = coin.SoTexture2() texim.image.set(f.image) node.insertChild(textr, 1) node.insertChild(texim, 2) f = _get("face14") node = f.middle.ViewObject.RootNode textr = coin.SoTexture2Transform() textr.rotation.set('0.0') textr.scaleFactor.set(s) texim = coin.SoTexture2() texim.image.set(f.image) node.insertChild(textr, 1) node.insertChild(texim, 2) f = _get("face20") node = f.middle.ViewObject.RootNode textr = coin.SoTexture2Transform() textr.rotation.set('1.5708') textr.scaleFactor.set(s) texim = coin.SoTexture2() texim.image.set(f.image) node.insertChild(textr, 1) node.insertChild(texim, 2) f = _get("face21") node = f.middle.ViewObject.RootNode textr = coin.SoTexture2Transform() textr.rotation.set('0.3') textr.scaleFactor.set(s) texim = coin.SoTexture2() texim.image.set(f.image) node.insertChild(textr, 1) node.insertChild(texim, 2) f = _get("face22") node = f.middle.ViewObject.RootNode textr = coin.SoTexture2Transform() v = coin.SoSFVec2f() v.setValue(0.6, 0.5) textr.center = v textr.rotation.set('-0.8') textr.scaleFactor.set(s) texim = coin.SoTexture2() texim.image.set(f.image) node.insertChild(textr, 1) node.insertChild(texim, 2) f = _get("face23") node = f.middle.ViewObject.RootNode textr = coin.SoTexture2Transform() v = coin.SoSFVec2f() v.setValue(0.5, 0.5) textr.center = v textr.rotation.set('0.8') textr.scaleFactor.set(s) texim = coin.SoTexture2() texim.image.set(f.image) node.insertChild(textr, 1) node.insertChild(texim, 2) f = _get("face24") node = f.middle.ViewObject.RootNode textr = coin.SoTexture2Transform() v = coin.SoSFVec2f() v.setValue(0.5, 0.5) textr.center = v textr.rotation.set('0.4') textr.scaleFactor.set(s) texim = coin.SoTexture2() texim.image.set(f.image) node.insertChild(textr, 1) node.insertChild(texim, 2) f = _get("face30") node = f.middle.ViewObject.RootNode textr = coin.SoTexture2Transform() v = coin.SoSFVec2f() v.setValue(0.5, 0.5) textr.center = v textr.rotation.set('-0.4') textr.scaleFactor.set(s) texim = coin.SoTexture2() texim.image.set(f.image) node.insertChild(textr, 1) node.insertChild(texim, 2) def removeTextures(): """ This is an internal function used when rotating a face or the model. It removes the face labels which are later replaced when the rotation is completed.\ """ node = _get("face00").middle.ViewObject.RootNode if node.getNumChildren() > 2: texim = node.getChild(2) textr = node.getChild(1) if texim.getTypeId().getName().__str__() == "Texture2": node.removeChild(2) if textr.getTypeId().getName().__str__() == "Texture2Transform": node.removeChild(1) node = _get("face10").middle.ViewObject.RootNode if node.getNumChildren() > 2: texim = node.getChild(2) textr = node.getChild(1) if texim.getTypeId().getName().__str__() == "Texture2": node.removeChild(2) if textr.getTypeId().getName().__str__() == "Texture2Transform": node.removeChild(1) node = _get("face11").middle.ViewObject.RootNode if node.getNumChildren() > 2: texim = node.getChild(2) textr = node.getChild(1) if texim.getTypeId().getName().__str__() == "Texture2": node.removeChild(2) if textr.getTypeId().getName().__str__() == "Texture2Transform": node.removeChild(1) node = _get("face12").middle.ViewObject.RootNode if node.getNumChildren() > 2: texim = node.getChild(2) textr = node.getChild(1) if texim.getTypeId().getName().__str__() == "Texture2": node.removeChild(2) if textr.getTypeId().getName().__str__() == "Texture2Transform": node.removeChild(1) node = _get("face13").middle.ViewObject.RootNode if node.getNumChildren() > 2: texim = node.getChild(2) textr = node.getChild(1) if texim.getTypeId().getName().__str__() == "Texture2": node.removeChild(2) if textr.getTypeId().getName().__str__() == "Texture2Transform": node.removeChild(1) node = _get("face14").middle.ViewObject.RootNode if node.getNumChildren() > 2: texim = node.getChild(2) textr = node.getChild(1) if texim.getTypeId().getName().__str__() == "Texture2": node.removeChild(2) if textr.getTypeId().getName().__str__() == "Texture2Transform": node.removeChild(1) node = _get("face20").middle.ViewObject.RootNode if node.getNumChildren() > 2: texim = node.getChild(2) textr = node.getChild(1) if texim.getTypeId().getName().__str__() == "Texture2": node.removeChild(2) if textr.getTypeId().getName().__str__() == "Texture2Transform": node.removeChild(1) node = _get("face21").middle.ViewObject.RootNode if node.getNumChildren() > 2: texim = node.getChild(2) textr = node.getChild(1) if texim.getTypeId().getName().__str__() == "Texture2": node.removeChild(2) if textr.getTypeId().getName().__str__() == "Texture2Transform": node.removeChild(1) node = _get("face22").middle.ViewObject.RootNode if node.getNumChildren() > 2: texim = node.getChild(2) textr = node.getChild(1) if texim.getTypeId().getName().__str__() == "Texture2": node.removeChild(2) if textr.getTypeId().getName().__str__() == "Texture2Transform": node.removeChild(1) node = _get("face23").middle.ViewObject.RootNode if node.getNumChildren() > 2: texim = node.getChild(2) textr = node.getChild(1) if texim.getTypeId().getName().__str__() == "Texture2": node.removeChild(2) if textr.getTypeId().getName().__str__() == "Texture2Transform": node.removeChild(1) node = _get("face24").middle.ViewObject.RootNode if node.getNumChildren() > 2: texim = node.getChild(2) textr = node.getChild(1) if texim.getTypeId().getName().__str__() == "Texture2": node.removeChild(2) if textr.getTypeId().getName().__str__() == "Texture2Transform": node.removeChild(1) node = _get("face30").middle.ViewObject.RootNode if node.getNumChildren() > 2: texim = node.getChild(2) textr = node.getChild(1) if texim.getTypeId().getName().__str__() == "Texture2": node.removeChild(2) if textr.getTypeId().getName().__str__() == "Texture2Transform": node.removeChild(1) def mkarrow(v0, dx, dy, fs): """ Internal function to create a curved black arrow. v0 is a Vector to the point at the start of the arrow, dx is a Vector along the arrow, dy is a Vector across the arrow, fs is a string which will be the arrow's name. These arrows are not selectable because mouse clicks on them are interpreted by the ViewObserver defined later to call rotation functions.\ """ v1 = v0.sub(dy) v2 = v1.add(DVU.scale(dx, 0.707107)) v3 = v2.add(DVU.scale(dx, 1.2)).add(DVU.scale(dy, 0.403107)) v4 = v3.add(DVU.scale(dx, 1.507107)).add(DVU.scale(dy, 1.304107)) v5 = v4.sub(DVU.scale(dy, 0.5)).add(DVU.scale(dx, 0.5)) v6 = v5.add(DVU.scale(dy, 1.62137)) v7 = v6.sub(DVU.scale(dx, 1.62137)) v8 = v7.sub(DVU.scale(dy, 0.5)).add(DVU.scale(dx, 0.5)) v9 = v8.sub(dy).sub(dx) v10 = v9.sub(DVU.scale(dy, 0.328584)).sub(dx) arrow = App.ActiveDocument.addObject("Part::Feature", fs) arrow.Label = fs arrow.Shape = Part.Face( Part.makePolygon([v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v0])) arrow.ViewObject.RootNode.setName(coin.SbName(fs)) arrow.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] if fs[7] in "pqrst": _set("tooltip" + fs, \ "Click to rotate face" + fs[5:7] + " 72 degrees anticlockwise\n" + "Shift-click to rotate the whole Megaminx 72 degrees anticlockwise\n" + "Control-click to rotate the history 72 degrees anticlockwise") elif fs[7] in "ijklm": _set("tooltip" + fs, \ "Click to rotate face" + fs[5:7] + " 72 degrees clockwise\n" + "Shift-click to rotate the whole Megaminx 72 degrees clockwise\n" + "Control-click to rotate the history 72 degrees clockwise") arrow.ViewObject.Selectable = False def mkarrowx(v0, dx, dy, fs, ff): """ This internal function makes a green double headed arrow. v0 is a Vector to the centre of the arrow, dx is a Vector along the arrow, dy is a Vector across the arrow, fs is a string which will be the arrow's name, ff is the variable part of the arrow's tooltip. These arrows are not selectable because mouse clicks on them are interpreted by the ViewObserver defined later to call reflection functions.\ """ v0 = v0.sub(DVU.scale(dy, 0.5)) v1 = v0.add(dy) v2 = v1.add(dx) v3 = v2.add(DVU.scale(dy, 0.5)) v4 = v3.add(dx).sub(dy) v5 = v4.sub(dx).sub(dy) v6 = v5.add(DVU.scale(dy, 0.5)) v7 = v6.sub(DVU.scale(dx, 2.0)) v8 = v7.sub(DVU.scale(dy, 0.5)) v9 = v8.sub(dx).add(dy) v10 = v9.add(dx).add(dy) v11 = v10.sub(DVU.scale(dy, 0.5)) v12 = v11.add(dx) arrow = App.ActiveDocument.addObject("Part::Feature", fs) arrow.Label = fs arrow.Shape = Part.Face(Part.makePolygon( [v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v1])) arrow.ViewObject.DiffuseColor = [(0.0, 1.0, 0.0)] arrow.ViewObject.RootNode.setName(coin.SbName(fs)) _set("tooltip" + fs, \ "Click to reflect the history in a plane through the centre of the\n" + \ "Megaminx and the edge between faces " + ff) arrow.ViewObject.Selectable = False def undo(): """ Undo the last rotation and remove it from the history. """ history = _get("history") if len(history) > 0: s = history.pop() sl = len(s) - 1 f = "" rot = "" steps = "" if sl >= 13 and s[0:3] == "rot" and s[4] == "(" \ and (s[5] == '"' or s[5] == "'") \ and s[5] == s[12] and s.endswith(")"): f = s[6:12] rot = s[0:4] if s[13] == ",": steps = s[14:sl].strip() if steps == "": steps = "0" d = FreeCAD.Megaminx_Dictionary ff = App.ActiveDocument.Name + "$" + f if rot in ["rota", "rotm", "rotp"] and ff in d and steps.isnumeric(): if rot == "rota": d[ff].opposite._rota(int(steps)) elif rot == "rotm": d[ff]._rotp(int(steps)) elif rot == "rotp": d[ff]._rotm(int(steps)) else: print("Invalid history entry '" + s + "'") updateMenu() def undo_history(): """ Replace the history by its group-theoretic inverse. This replaces the history by a sequence of rotations which if done before or after the history would restore the model to its initial state.\ """ history = _get("history") nh = history[:] reset() hs = _get("historyslowness") while len(nh) > 0: s = nh.pop() sl = len(s) - 1 f = "" rot = "" steps = "" if sl >= 13 and s[0:3] == "rot" and s[4] == "(" \ and (s[5] == '"' or s[5] == "'") \ and s[5] == s[12] and s.endswith(")"): f = s[6:12] rot = s[0:4] if s[13] == ",": steps = s[14:sl].strip() if steps == "": steps = "0" d = FreeCAD.Megaminx_Dictionary ff = App.ActiveDocument.Name + "$" + f if rot in ["rota", "rotm", "rotp"] and ff in d \ and steps.isnumeric(): if rot == "rota": opp = d[ff].opposite opp._rota(hs) history.append("rota('" + opp.name + "'," + steps + ")") elif rot == "rotm": d[ff]._rotp(hs) history.append("rotp('" + f + "'," + steps + ")") elif rot == "rotp": d[ff]._rotm(hs) history.append("rotm('" + f + "'," + steps + ")") else: print("Invalid history entry '" + s + "'") updateMenu() def copy_history(): """ Save the history to the clipboard. The history is a sequence of function calls From the clipboard it can be pasted into the Python console or pasted into your favourite editor and saved into a new FreeCAD macro file. """ history = _get("history") if len(history) > 0: fs = "" for s in history: fs = fs + s + "\n" clip = QtGui.QApplication.clipboard() clip.setText(fs) def make_faces(): """ This internal function makes all the faces of the Megaminx. We put them into the dictionary so that multiple Megaminx documents don't interfere with each other.\ """ # define the geometry, starting with lots of points p00 = Base.Vector(2 * c0, 2 * s0, phi + 1) p01 = Base.Vector(2 * c1, 2 * s1, phi + 1) p02 = Base.Vector(2 * c2, 2 * s2, phi + 1) p03 = Base.Vector(2 * c3, 2 * s3, phi + 1) p04 = Base.Vector(2 * c4, 2 * s4, phi + 1) p10 = Base.Vector(2 * phi * c0, 2 * phi * s0, phi - 1) p11 = Base.Vector(2 * phi * c1, 2 * phi * s1, phi - 1) p12 = Base.Vector(2 * phi * c2, 2 * phi * s2, phi - 1) p13 = Base.Vector(2 * phi * c3, 2 * phi * s3, phi - 1) p14 = Base.Vector(2 * phi * c4, 2 * phi * s4, phi - 1) p20 = Base.Vector(-2 * phi * c0, -2 * phi * s0, 1 - phi) p21 = Base.Vector(-2 * phi * c1, -2 * phi * s1, 1 - phi) p22 = Base.Vector(-2 * phi * c2, -2 * phi * s2, 1 - phi) p23 = Base.Vector(-2 * phi * c3, -2 * phi * s3, 1 - phi) p24 = Base.Vector(-2 * phi * c4, -2 * phi * s4, 1 - phi) p30 = Base.Vector(-2 * c0, -2 * s0, -1 - phi) p31 = Base.Vector(-2 * c1, -2 * s1, -1 - phi) p32 = Base.Vector(-2 * c2, -2 * s2, -1 - phi) p33 = Base.Vector(-2 * c3, -2 * s3, -1 - phi) p34 = Base.Vector(-2 * c4, -2 * s4, -1 - phi) p00p01 = DVU.scale(p00, 0.6).add(DVU.scale(p01, 0.4)) p00p04 = DVU.scale(p00, 0.6).add(DVU.scale(p04, 0.4)) p00p10 = DVU.scale(p00, 0.6).add(DVU.scale(p10, 0.4)) p01p00 = DVU.scale(p01, 0.6).add(DVU.scale(p00, 0.4)) p01p02 = DVU.scale(p01, 0.6).add(DVU.scale(p02, 0.4)) p01p11 = DVU.scale(p01, 0.6).add(DVU.scale(p11, 0.4)) p02p01 = DVU.scale(p02, 0.6).add(DVU.scale(p01, 0.4)) p02p03 = DVU.scale(p02, 0.6).add(DVU.scale(p03, 0.4)) p02p12 = DVU.scale(p02, 0.6).add(DVU.scale(p12, 0.4)) p03p02 = DVU.scale(p03, 0.6).add(DVU.scale(p02, 0.4)) p03p04 = DVU.scale(p03, 0.6).add(DVU.scale(p04, 0.4)) p03p13 = DVU.scale(p03, 0.6).add(DVU.scale(p13, 0.4)) p04p00 = DVU.scale(p04, 0.6).add(DVU.scale(p00, 0.4)) p04p03 = DVU.scale(p04, 0.6).add(DVU.scale(p03, 0.4)) p04p14 = DVU.scale(p04, 0.6).add(DVU.scale(p14, 0.4)) p10p00 = DVU.scale(p10, 0.6).add(DVU.scale(p00, 0.4)) p10p22 = DVU.scale(p10, 0.6).add(DVU.scale(p22, 0.4)) p10p23 = DVU.scale(p10, 0.6).add(DVU.scale(p23, 0.4)) p11p01 = DVU.scale(p11, 0.6).add(DVU.scale(p01, 0.4)) p11p23 = DVU.scale(p11, 0.6).add(DVU.scale(p23, 0.4)) p11p24 = DVU.scale(p11, 0.6).add(DVU.scale(p24, 0.4)) p12p02 = DVU.scale(p12, 0.6).add(DVU.scale(p02, 0.4)) p12p20 = DVU.scale(p12, 0.6).add(DVU.scale(p20, 0.4)) p12p24 = DVU.scale(p12, 0.6).add(DVU.scale(p24, 0.4)) p13p03 = DVU.scale(p13, 0.6).add(DVU.scale(p03, 0.4)) p13p20 = DVU.scale(p13, 0.6).add(DVU.scale(p20, 0.4)) p13p21 = DVU.scale(p13, 0.6).add(DVU.scale(p21, 0.4)) p14p04 = DVU.scale(p14, 0.6).add(DVU.scale(p04, 0.4)) p14p21 = DVU.scale(p14, 0.6).add(DVU.scale(p21, 0.4)) p14p22 = DVU.scale(p14, 0.6).add(DVU.scale(p22, 0.4)) p20p12 = DVU.scale(p20, 0.6).add(DVU.scale(p12, 0.4)) p20p13 = DVU.scale(p20, 0.6).add(DVU.scale(p13, 0.4)) p20p30 = DVU.scale(p20, 0.6).add(DVU.scale(p30, 0.4)) p21p13 = DVU.scale(p21, 0.6).add(DVU.scale(p13, 0.4)) p21p14 = DVU.scale(p21, 0.6).add(DVU.scale(p14, 0.4)) p21p31 = DVU.scale(p21, 0.6).add(DVU.scale(p31, 0.4)) p22p10 = DVU.scale(p22, 0.6).add(DVU.scale(p10, 0.4)) p22p14 = DVU.scale(p22, 0.6).add(DVU.scale(p14, 0.4)) p22p32 = DVU.scale(p22, 0.6).add(DVU.scale(p32, 0.4)) p23p10 = DVU.scale(p23, 0.6).add(DVU.scale(p10, 0.4)) p23p11 = DVU.scale(p23, 0.6).add(DVU.scale(p11, 0.4)) p23p33 = DVU.scale(p23, 0.6).add(DVU.scale(p33, 0.4)) p24p11 = DVU.scale(p24, 0.6).add(DVU.scale(p11, 0.4)) p24p12 = DVU.scale(p24, 0.6).add(DVU.scale(p12, 0.4)) p24p34 = DVU.scale(p24, 0.6).add(DVU.scale(p34, 0.4)) p30p20 = DVU.scale(p30, 0.6).add(DVU.scale(p20, 0.4)) p30p31 = DVU.scale(p30, 0.6).add(DVU.scale(p31, 0.4)) p30p34 = DVU.scale(p30, 0.6).add(DVU.scale(p34, 0.4)) p31p21 = DVU.scale(p31, 0.6).add(DVU.scale(p21, 0.4)) p31p30 = DVU.scale(p31, 0.6).add(DVU.scale(p30, 0.4)) p31p32 = DVU.scale(p31, 0.6).add(DVU.scale(p32, 0.4)) p32p22 = DVU.scale(p32, 0.6).add(DVU.scale(p22, 0.4)) p32p31 = DVU.scale(p32, 0.6).add(DVU.scale(p31, 0.4)) p32p33 = DVU.scale(p32, 0.6).add(DVU.scale(p33, 0.4)) p33p23 = DVU.scale(p33, 0.6).add(DVU.scale(p23, 0.4)) p33p32 = DVU.scale(p33, 0.6).add(DVU.scale(p32, 0.4)) p33p34 = DVU.scale(p33, 0.6).add(DVU.scale(p34, 0.4)) p34p24 = DVU.scale(p34, 0.6).add(DVU.scale(p24, 0.4)) p34p30 = DVU.scale(p34, 0.6).add(DVU.scale(p30, 0.4)) p34p33 = DVU.scale(p34, 0.6).add(DVU.scale(p33, 0.4)) p00p01p04 = p00p04p01 = p00p01.add(p00p04).sub(p00) p00p01p10 = p00p10p01 = p00p01.add(p00p10).sub(p00) p00p04p10 = p00p10p04 = p00p04.add(p00p10).sub(p00) p01p00p02 = p01p02p00 = p01p00.add(p01p02).sub(p01) p01p00p11 = p01p11p00 = p01p00.add(p01p11).sub(p01) p01p02p11 = p01p11p02 = p01p02.add(p01p11).sub(p01) p02p01p03 = p02p03p01 = p02p01.add(p02p03).sub(p02) p02p01p12 = p02p12p01 = p02p01.add(p02p12).sub(p02) p02p03p12 = p02p12p03 = p02p03.add(p02p12).sub(p02) p03p02p04 = p03p04p02 = p03p02.add(p03p04).sub(p03) p03p02p13 = p03p13p02 = p03p02.add(p03p13).sub(p03) p03p04p13 = p03p13p04 = p03p04.add(p03p13).sub(p03) p04p00p03 = p04p03p00 = p04p00.add(p04p03).sub(p04) p04p00p14 = p04p14p00 = p04p00.add(p04p14).sub(p04) p04p03p14 = p04p14p03 = p04p03.add(p04p14).sub(p04) p10p00p22 = p10p22p00 = p10p00.add(p10p22).sub(p10) p10p00p23 = p10p23p00 = p10p00.add(p10p23).sub(p10) p10p22p23 = p10p23p22 = p10p22.add(p10p23).sub(p10) p11p01p23 = p11p23p01 = p11p01.add(p11p23).sub(p11) p11p01p24 = p11p24p01 = p11p01.add(p11p24).sub(p11) p11p23p24 = p11p24p23 = p11p23.add(p11p24).sub(p11) p12p02p20 = p12p20p02 = p12p02.add(p12p20).sub(p12) p12p02p24 = p12p24p02 = p12p02.add(p12p24).sub(p12) p12p20p24 = p12p24p20 = p12p20.add(p12p24).sub(p12) p13p03p20 = p13p20p03 = p13p03.add(p13p20).sub(p13) p13p03p21 = p13p21p03 = p13p03.add(p13p21).sub(p13) p13p20p21 = p13p21p20 = p13p20.add(p13p21).sub(p13) p14p04p21 = p14p21p04 = p14p04.add(p14p21).sub(p14) p14p04p22 = p14p22p04 = p14p04.add(p14p22).sub(p14) p14p21p22 = p14p22p21 = p14p21.add(p14p22).sub(p14) p20p12p13 = p20p13p12 = p20p12.add(p20p13).sub(p20) p20p12p30 = p20p30p12 = p20p12.add(p20p30).sub(p20) p20p13p30 = p20p30p13 = p20p13.add(p20p30).sub(p20) p21p13p14 = p21p14p13 = p21p13.add(p21p14).sub(p21) p21p13p31 = p21p31p13 = p21p13.add(p21p31).sub(p21) p21p14p31 = p21p31p14 = p21p14.add(p21p31).sub(p21) p22p10p14 = p22p14p10 = p22p10.add(p22p14).sub(p22) p22p10p32 = p22p32p10 = p22p10.add(p22p32).sub(p22) p22p14p32 = p22p32p14 = p22p14.add(p22p32).sub(p22) p23p10p11 = p23p11p10 = p23p10.add(p23p11).sub(p23) p23p10p33 = p23p33p10 = p23p10.add(p23p33).sub(p23) p23p11p33 = p23p33p11 = p23p11.add(p23p33).sub(p23) p24p11p12 = p24p12p11 = p24p11.add(p24p12).sub(p24) p24p11p34 = p24p34p11 = p24p11.add(p24p34).sub(p24) p24p12p34 = p24p34p12 = p24p12.add(p24p34).sub(p24) p30p20p31 = p30p31p20 = p30p20.add(p30p31).sub(p30) p30p20p34 = p30p34p20 = p30p20.add(p30p34).sub(p30) p30p31p34 = p30p34p31 = p30p31.add(p30p34).sub(p30) p31p21p30 = p31p30p21 = p31p21.add(p31p30).sub(p31) p31p21p32 = p31p32p21 = p31p21.add(p31p32).sub(p31) p31p30p32 = p31p32p30 = p31p30.add(p31p32).sub(p31) p32p22p31 = p32p31p22 = p32p22.add(p32p31).sub(p32) p32p22p33 = p32p33p22 = p32p22.add(p32p33).sub(p32) p32p31p33 = p32p33p31 = p32p31.add(p32p33).sub(p32) p33p23p32 = p33p32p23 = p33p23.add(p33p32).sub(p33) p33p23p34 = p33p34p23 = p33p23.add(p33p34).sub(p33) p33p32p34 = p33p34p32 = p33p32.add(p33p34).sub(p33) p34p24p30 = p34p30p24 = p34p24.add(p34p30).sub(p34) p34p24p33 = p34p33p24 = p34p24.add(p34p33).sub(p34) p34p30p33 = p34p33p30 = p34p30.add(p34p33).sub(p34) p00c = p00p01.add(p00p04).add(p00p10).sub(DVU.scale(p00, 2)) p01c = p01p02.add(p01p00).add(p01p11).sub(DVU.scale(p01, 2)) p02c = p02p03.add(p02p01).add(p02p12).sub(DVU.scale(p02, 2)) p03c = p03p04.add(p03p02).add(p03p13).sub(DVU.scale(p03, 2)) p04c = p04p00.add(p04p03).add(p04p14).sub(DVU.scale(p04, 2)) p10c = p10p00.add(p10p22).add(p10p23).sub(DVU.scale(p10, 2)) p11c = p11p01.add(p11p23).add(p11p24).sub(DVU.scale(p11, 2)) p12c = p12p02.add(p12p24).add(p12p20).sub(DVU.scale(p12, 2)) p13c = p13p03.add(p13p20).add(p13p21).sub(DVU.scale(p13, 2)) p14c = p14p04.add(p14p21).add(p14p22).sub(DVU.scale(p14, 2)) p20c = p20p12.add(p20p13).add(p20p30).sub(DVU.scale(p20, 2)) p21c = p21p13.add(p21p14).add(p21p31).sub(DVU.scale(p21, 2)) p22c = p22p14.add(p22p10).add(p22p32).sub(DVU.scale(p22, 2)) p23c = p23p10.add(p23p11).add(p23p33).sub(DVU.scale(p23, 2)) p24c = p24p11.add(p24p12).add(p24p34).sub(DVU.scale(p24, 2)) p30c = p30p20.add(p30p31).add(p30p34).sub(DVU.scale(p30, 2)) p31c = p31p21.add(p31p32).add(p31p30).sub(DVU.scale(p31, 2)) p32c = p32p22.add(p32p33).add(p32p31).sub(DVU.scale(p32, 2)) p33c = p33p23.add(p33p34).add(p33p32).sub(DVU.scale(p33, 2)) p34c = p34p24.add(p34p30).add(p34p33).sub(DVU.scale(p34, 2)) # Now define all the movable bits of the faces # face centres a = [p00p01p04, p01p02p00, p02p03p01, p03p04p02, p04p00p03, p00p01p04] fc00 = App.ActiveDocument.addObject("Part::Feature", "fc00") fc00.Shape = Part.Face(Part.makePolygon(a)) a = [p01p11p00, p11p23p01, p23p10p11, p10p23p00, p00p01p10, p01p11p00] fc10 = App.ActiveDocument.addObject("Part::Feature", "fc10") fc10.Shape = Part.Face(Part.makePolygon(a)) a = [p01p02p11, p02p12p01, p12p24p02, p24p11p12, p11p24p01, p01p02p11] fc11 = App.ActiveDocument.addObject("Part::Feature", "fc11") fc11.Shape = Part.Face(Part.makePolygon(a)) a = [p02p03p12, p03p13p02, p13p20p03, p20p12p13, p12p20p02, p02p03p12] fc12 = App.ActiveDocument.addObject("Part::Feature", "fc12") fc12.Shape = Part.Face(Part.makePolygon(a)) a = [p03p04p13, p04p14p03, p14p21p04, p21p13p14, p13p21p03, p03p04p13] fc13 = App.ActiveDocument.addObject("Part::Feature", "fc13") fc13.Shape = Part.Face(Part.makePolygon(a)) a = [p04p00p14, p00p10p04, p10p22p00, p22p14p10, p14p22p04, p04p00p14] fc14 = App.ActiveDocument.addObject("Part::Feature", "fc14") fc14.Shape = Part.Face(Part.makePolygon(a)) a = [p10p22p23, p23p33p10, p33p32p23, p32p33p22, p22p32p10, p10p22p23] fc20 = App.ActiveDocument.addObject("Part::Feature", "fc20") fc20.Shape = Part.Face(Part.makePolygon(a)) a = [p11p23p24, p24p34p11, p34p33p24, p33p34p23, p23p33p11, p11p23p24] fc21 = App.ActiveDocument.addObject("Part::Feature", "fc21") fc21.Shape = Part.Face(Part.makePolygon(a)) a = [p12p24p20, p20p30p12, p30p34p20, p34p30p24, p24p34p12, p12p24p20] fc22 = App.ActiveDocument.addObject("Part::Feature", "fc22") fc22.Shape = Part.Face(Part.makePolygon(a)) a = [p13p20p21, p21p31p13, p31p30p21, p30p31p20, p20p30p13, p13p20p21] fc23 = App.ActiveDocument.addObject("Part::Feature", "fc23") fc23.Shape = Part.Face(Part.makePolygon(a)) a = [p14p21p22, p22p32p14, p32p31p22, p31p32p21, p21p31p14, p14p21p22] fc24 = App.ActiveDocument.addObject("Part::Feature", "fc24") fc24.Shape = Part.Face(Part.makePolygon(a)) a = [p30p31p34, p34p30p33, p33p34p32, p32p33p31, p31p32p30, p30p31p34] fc30 = App.ActiveDocument.addObject("Part::Feature", "fc30") fc30.Shape = Part.Face(Part.makePolygon(a)) # edge centre facets a = [p00p01, p01p00, p01p00p02, p00p01p04, p00p01] ec0204 = App.ActiveDocument.addObject("Part::Feature", "ec0204") ec0204.Shape = Part.Face(Part.makePolygon(a)) a = [p01p02, p02p01, p02p01p03, p01p02p00, p01p02] ec0300 = App.ActiveDocument.addObject("Part::Feature", "ec0300") ec0300.Shape = Part.Face(Part.makePolygon(a)) a = [p02p03, p03p02, p03p02p04, p02p01p03, p02p03] ec0401 = App.ActiveDocument.addObject("Part::Feature", "ec0401") ec0401.Shape = Part.Face(Part.makePolygon(a)) a = [p03p04, p04p03, p04p03p00, p03p04p02, p03p04] ec0002 = App.ActiveDocument.addObject("Part::Feature", "ec0002") ec0002.Shape = Part.Face(Part.makePolygon(a)) a = [p04p00, p00p04, p00p04p01, p04p00p03, p04p00] ec0103 = App.ActiveDocument.addObject("Part::Feature", "ec0103") ec0103.Shape = Part.Face(Part.makePolygon(a)) a = [p00p01, p01p00, p01p00p11, p00p01p10, p00p01] ec1011 = App.ActiveDocument.addObject("Part::Feature", "ec1011") ec1011.Shape = Part.Face(Part.makePolygon(a)) a = [p01p11, p11p01, p11p01p23, p01p11p00, p01p11] ec0023 = App.ActiveDocument.addObject("Part::Feature", "ec0023") ec0023.Shape = Part.Face(Part.makePolygon(a)) a = [p11p23, p23p11, p23p11p10, p11p23p01, p11p23] ec0110 = App.ActiveDocument.addObject("Part::Feature", "ec0110") ec0110.Shape = Part.Face(Part.makePolygon(a)) a = [p23p10, p10p23, p10p23p00, p23p10p11, p23p10] ec1100 = App.ActiveDocument.addObject("Part::Feature", "ec1100") ec1100.Shape = Part.Face(Part.makePolygon(a)) a = [p10p00, p00p10, p00p10p01, p10p00p23, p10p00] ec2301 = App.ActiveDocument.addObject("Part::Feature", "ec2301") ec2301.Shape = Part.Face(Part.makePolygon(a)) a = [p01p02, p02p01, p02p01p12, p01p02p11, p01p02] ec1112 = App.ActiveDocument.addObject("Part::Feature", "ec1112") ec1112.Shape = Part.Face(Part.makePolygon(a)) a = [p02p12, p12p02, p12p02p24, p02p12p01, p02p12] ec0124 = App.ActiveDocument.addObject("Part::Feature", "ec0124") ec0124.Shape = Part.Face(Part.makePolygon(a)) a = [p12p24, p24p12, p24p12p11, p12p24p02, p12p24] ec0211 = App.ActiveDocument.addObject("Part::Feature", "ec0211") ec0211.Shape = Part.Face(Part.makePolygon(a)) a = [p24p11, p11p24, p11p24p01, p24p11p12, p24p11] ec1201 = App.ActiveDocument.addObject("Part::Feature", "ec1201") ec1201.Shape = Part.Face(Part.makePolygon(a)) a = [p11p01, p01p11, p01p11p02, p11p01p24, p11p01] ec2402 = App.ActiveDocument.addObject("Part::Feature", "ec2402") ec2402.Shape = Part.Face(Part.makePolygon(a)) a = [p02p03, p03p02, p03p02p13, p02p03p12, p02p03] ec1213 = App.ActiveDocument.addObject("Part::Feature", "ec1213") ec1213.Shape = Part.Face(Part.makePolygon(a)) a = [p03p13, p13p03, p13p03p20, p03p13p02, p03p13] ec0220 = App.ActiveDocument.addObject("Part::Feature", "ec0220") ec0220.Shape = Part.Face(Part.makePolygon(a)) a = [p13p20, p20p13, p20p13p12, p13p20p03, p13p20] ec0312 = App.ActiveDocument.addObject("Part::Feature", "ec0312") ec0312.Shape = Part.Face(Part.makePolygon(a)) a = [p20p12, p12p20, p12p20p02, p20p12p13, p20p12] ec1302 = App.ActiveDocument.addObject("Part::Feature", "ec1302") ec1302.Shape = Part.Face(Part.makePolygon(a)) a = [p12p02, p02p12, p02p12p03, p12p02p20, p12p02] ec2003 = App.ActiveDocument.addObject("Part::Feature", "ec2003") ec2003.Shape = Part.Face(Part.makePolygon(a)) a = [p03p04, p04p03, p04p03p14, p03p04p13, p03p04] ec1314 = App.ActiveDocument.addObject("Part::Feature", "ec1314") ec1314.Shape = Part.Face(Part.makePolygon(a)) a = [p04p14, p14p04, p14p04p21, p04p14p03, p04p14] ec0321 = App.ActiveDocument.addObject("Part::Feature", "ec0321") ec0321.Shape = Part.Face(Part.makePolygon(a)) a = [p14p21, p21p14, p21p14p13, p14p21p04, p14p21] ec0413 = App.ActiveDocument.addObject("Part::Feature", "ec0413") ec0413.Shape = Part.Face(Part.makePolygon(a)) a = [p21p13, p13p21, p13p21p03, p21p13p14, p21p13] ec1403 = App.ActiveDocument.addObject("Part::Feature", "ec1403") ec1403.Shape = Part.Face(Part.makePolygon(a)) a = [p13p03, p03p13, p03p13p04, p13p03p21, p13p03] ec2104 = App.ActiveDocument.addObject("Part::Feature", "ec2104") ec2104.Shape = Part.Face(Part.makePolygon(a)) a = [p04p00, p00p04, p00p04p10, p04p00p14, p04p00] ec1014 = App.ActiveDocument.addObject("Part::Feature", "ec1014") ec1014.Shape = Part.Face(Part.makePolygon(a)) a = [p00p10, p10p00, p10p00p22, p00p10p04, p00p10] ec2204 = App.ActiveDocument.addObject("Part::Feature", "ec2204") ec2204.Shape = Part.Face(Part.makePolygon(a)) a = [p10p22, p22p10, p22p10p14, p10p22p00, p10p22] ec1400 = App.ActiveDocument.addObject("Part::Feature", "ec1400") ec1400.Shape = Part.Face(Part.makePolygon(a)) a = [p22p14, p14p22, p14p22p04, p22p14p10, p22p14] ec0410 = App.ActiveDocument.addObject("Part::Feature", "ec0410") ec0410.Shape = Part.Face(Part.makePolygon(a)) a = [p14p04, p04p14, p04p14p00, p14p04p22, p14p04] ec0022 = App.ActiveDocument.addObject("Part::Feature", "ec0022") ec0022.Shape = Part.Face(Part.makePolygon(a)) a = [p10p23, p23p10, p23p10p33, p10p23p22, p10p23] ec3322 = App.ActiveDocument.addObject("Part::Feature", "ec3322") ec3322.Shape = Part.Face(Part.makePolygon(a)) a = [p23p33, p33p23, p33p23p32, p23p33p10, p23p33] ec3210 = App.ActiveDocument.addObject("Part::Feature", "ec3210") ec3210.Shape = Part.Face(Part.makePolygon(a)) a = [p33p32, p32p33, p32p33p22, p33p32p23, p33p32] ec2223 = App.ActiveDocument.addObject("Part::Feature", "ec2223") ec2223.Shape = Part.Face(Part.makePolygon(a)) a = [p32p22, p22p32, p22p32p10, p32p22p33, p32p22] ec1033 = App.ActiveDocument.addObject("Part::Feature", "ec1033") ec1033.Shape = Part.Face(Part.makePolygon(a)) a = [p22p10, p10p22, p10p22p23, p22p10p32, p22p10] ec2332 = App.ActiveDocument.addObject("Part::Feature", "ec2332") ec2332.Shape = Part.Face(Part.makePolygon(a)) a = [p11p24, p24p11, p24p11p34, p11p24p23, p11p24] ec3423 = App.ActiveDocument.addObject("Part::Feature", "ec3423") ec3423.Shape = Part.Face(Part.makePolygon(a)) a = [p24p34, p34p24, p34p24p33, p24p34p11, p24p34] ec3311 = App.ActiveDocument.addObject("Part::Feature", "ec3311") ec3311.Shape = Part.Face(Part.makePolygon(a)) a = [p34p33, p33p34, p33p34p23, p34p33p24, p34p33] ec2324 = App.ActiveDocument.addObject("Part::Feature", "ec2324") ec2324.Shape = Part.Face(Part.makePolygon(a)) a = [p33p23, p23p33, p23p33p11, p33p23p34, p33p23] ec1144 = App.ActiveDocument.addObject("Part::Feature", "ec1144") ec1144.Shape = Part.Face(Part.makePolygon(a)) a = [p23p11, p11p23, p11p23p24, p23p11p33, p23p11] ec2433 = App.ActiveDocument.addObject("Part::Feature", "ec2433") ec2433.Shape = Part.Face(Part.makePolygon(a)) a = [p24p12, p12p24, p12p24p20, p24p12p34, p24p12] ec2034 = App.ActiveDocument.addObject("Part::Feature", "ec2034") ec2034.Shape = Part.Face(Part.makePolygon(a)) a = [p12p20, p20p12, p20p12p30, p12p20p24, p12p20] ec3024 = App.ActiveDocument.addObject("Part::Feature", "ec3024") ec3024.Shape = Part.Face(Part.makePolygon(a)) a = [p20p30, p30p20, p30p20p34, p20p30p12, p20p30] ec3412 = App.ActiveDocument.addObject("Part::Feature", "ec3412") ec3412.Shape = Part.Face(Part.makePolygon(a)) a = [p30p34, p34p30, p34p30p24, p30p34p20, p30p34] ec2420 = App.ActiveDocument.addObject("Part::Feature", "ec2420") ec2420.Shape = Part.Face(Part.makePolygon(a)) a = [p34p24, p24p34, p24p34p12, p34p24p30, p34p24] ec1230 = App.ActiveDocument.addObject("Part::Feature", "ec1230") ec1230.Shape = Part.Face(Part.makePolygon(a)) a = [p20p13, p13p20, p13p20p21, p20p13p30, p20p13] ec2130 = App.ActiveDocument.addObject("Part::Feature", "ec2130") ec2130.Shape = Part.Face(Part.makePolygon(a)) a = [p13p21, p21p13, p21p13p31, p13p21p20, p13p21] ec3120 = App.ActiveDocument.addObject("Part::Feature", "ec3120") ec3120.Shape = Part.Face(Part.makePolygon(a)) a = [p21p31, p31p21, p31p21p30, p21p31p13, p21p31] ec3013 = App.ActiveDocument.addObject("Part::Feature", "ec3013") ec3013.Shape = Part.Face(Part.makePolygon(a)) a = [p31p30, p30p31, p30p31p20, p31p30p21, p31p30] ec2021 = App.ActiveDocument.addObject("Part::Feature", "ec2021") ec2021.Shape = Part.Face(Part.makePolygon(a)) a = [p30p20, p20p30, p20p30p13, p30p20p31, p30p20] ec1331 = App.ActiveDocument.addObject("Part::Feature", "ec1331") ec1331.Shape = Part.Face(Part.makePolygon(a)) a = [p21p14, p14p21, p14p21p22, p21p14p31, p21p14] ec2231 = App.ActiveDocument.addObject("Part::Feature", "ec2231") ec2231.Shape = Part.Face(Part.makePolygon(a)) a = [p14p22, p22p14, p22p14p32, p14p22p21, p14p22] ec3221 = App.ActiveDocument.addObject("Part::Feature", "ec3221") ec3221.Shape = Part.Face(Part.makePolygon(a)) a = [p22p32, p32p22, p32p22p31, p22p32p14, p22p32] ec3114 = App.ActiveDocument.addObject("Part::Feature", "ec3114") ec3114.Shape = Part.Face(Part.makePolygon(a)) a = [p32p31, p31p32, p31p32p21, p32p31p22, p32p31] ec2122 = App.ActiveDocument.addObject("Part::Feature", "ec2122") ec2122.Shape = Part.Face(Part.makePolygon(a)) a = [p31p21, p21p31, p21p31p14, p31p21p32, p31p21] ec1432 = App.ActiveDocument.addObject("Part::Feature", "ec1432") ec1432.Shape = Part.Face(Part.makePolygon(a)) a = [p30p31, p31p30, p31p30p32, p30p31p34, p30p31] ec3234 = App.ActiveDocument.addObject("Part::Feature", "ec3234") ec3234.Shape = Part.Face(Part.makePolygon(a)) a = [p31p32, p32p31, p32p31p33, p31p32p30, p31p32] ec3330 = App.ActiveDocument.addObject("Part::Feature", "ec3330") ec3330.Shape = Part.Face(Part.makePolygon(a)) a = [p32p33, p33p32, p33p32p34, p32p33p31, p32p33] ec3431 = App.ActiveDocument.addObject("Part::Feature", "ec3431") ec3431.Shape = Part.Face(Part.makePolygon(a)) a = [p33p34, p34p33, p34p33p30, p33p34p32, p33p34] ec3032 = App.ActiveDocument.addObject("Part::Feature", "ec3032") ec3032.Shape = Part.Face(Part.makePolygon(a)) a = [p34p30, p30p34, p30p34p31, p34p30p33, p34p30] ec3133 = App.ActiveDocument.addObject("Part::Feature", "ec3133") ec3133.Shape = Part.Face(Part.makePolygon(a)) # vertex facets a = [p00, p00p01, p00p01p04, p00p04, p00] v000104 = App.ActiveDocument.addObject("Part::Feature", "v000104") v000104.Shape = Part.Face(Part.makePolygon(a)) a = [p01, p01p02, p01p02p00, p01p00, p01] v010200 = App.ActiveDocument.addObject("Part::Feature", "v010200") v010200.Shape = Part.Face(Part.makePolygon(a)) a = [p02, p02p03, p02p03p01, p02p01, p02] v020301 = App.ActiveDocument.addObject("Part::Feature", "v020301") v020301.Shape = Part.Face(Part.makePolygon(a)) a = [p03, p03p04, p03p04p02, p03p02, p03] v030402 = App.ActiveDocument.addObject("Part::Feature", "v030402") v030402.Shape = Part.Face(Part.makePolygon(a)) a = [p04, p04p00, p04p00p03, p04p03, p04] v040003 = App.ActiveDocument.addObject("Part::Feature", "v040003") v040003.Shape = Part.Face(Part.makePolygon(a)) a = [p00, p00p01, p00p01p10, p00p10, p00] v000110 = App.ActiveDocument.addObject("Part::Feature", "v000110") v000110.Shape = Part.Face(Part.makePolygon(a)) a = [p01, p01p11, p01p11p00, p01p00, p01] v011100 = App.ActiveDocument.addObject("Part::Feature", "v011100") v011100.Shape = Part.Face(Part.makePolygon(a)) a = [p11, p11p23, p11p23p01, p11p01, p11] v112301 = App.ActiveDocument.addObject("Part::Feature", "v112301") v112301.Shape = Part.Face(Part.makePolygon(a)) a = [p23, p23p10, p23p10p11, p23p11, p23] v231011 = App.ActiveDocument.addObject("Part::Feature", "v231011") v231011.Shape = Part.Face(Part.makePolygon(a)) a = [p10, p10p00, p10p00p23, p10p23, p10] v100023 = App.ActiveDocument.addObject("Part::Feature", "v100023") v100023.Shape = Part.Face(Part.makePolygon(a)) a = [p01, p01p02, p01p02p11, p01p11, p01] v010211 = App.ActiveDocument.addObject("Part::Feature", "v010211") v010211.Shape = Part.Face(Part.makePolygon(a)) a = [p02, p02p12, p02p12p01, p02p01, p02] v021201 = App.ActiveDocument.addObject("Part::Feature", "v021201") v021201.Shape = Part.Face(Part.makePolygon(a)) a = [p12, p12p24, p12p24p02, p12p02, p12] v122402 = App.ActiveDocument.addObject("Part::Feature", "v122402") v122402.Shape = Part.Face(Part.makePolygon(a)) a = [p24, p24p11, p24p11p12, p24p12, p24] v241112 = App.ActiveDocument.addObject("Part::Feature", "v241112") v241112.Shape = Part.Face(Part.makePolygon(a)) a = [p11, p11p01, p11p01p24, p11p24, p11] v110124 = App.ActiveDocument.addObject("Part::Feature", "v110124") v110124.Shape = Part.Face(Part.makePolygon(a)) a = [p02, p02p03, p02p03p12, p02p12, p02] v020312 = App.ActiveDocument.addObject("Part::Feature", "v020312") v020312.Shape = Part.Face(Part.makePolygon(a)) a = [p03, p03p13, p03p13p02, p03p02, p03] v031302 = App.ActiveDocument.addObject("Part::Feature", "v031302") v031302.Shape = Part.Face(Part.makePolygon(a)) a = [p13, p13p20, p13p20p03, p13p03, p13] v132003 = App.ActiveDocument.addObject("Part::Feature", "v132003") v132003.Shape = Part.Face(Part.makePolygon(a)) a = [p20, p20p12, p20p12p13, p20p13, p20] v201213 = App.ActiveDocument.addObject("Part::Feature", "v201213") v201213.Shape = Part.Face(Part.makePolygon(a)) a = [p12, p12p02, p12p02p20, p12p20, p12] v120220 = App.ActiveDocument.addObject("Part::Feature", "v120220") v120220.Shape = Part.Face(Part.makePolygon(a)) a = [p03, p03p04, p03p04p13, p03p13, p03] v030413 = App.ActiveDocument.addObject("Part::Feature", "v030413") v030413.Shape = Part.Face(Part.makePolygon(a)) a = [p04, p04p14, p04p14p03, p04p03, p04] v041403 = App.ActiveDocument.addObject("Part::Feature", "v041403") v041403.Shape = Part.Face(Part.makePolygon(a)) a = [p14, p14p21, p14p21p04, p14p04, p14] v142104 = App.ActiveDocument.addObject("Part::Feature", "v142104") v142104.Shape = Part.Face(Part.makePolygon(a)) a = [p21, p21p13, p21p13p14, p21p14, p21] v211314 = App.ActiveDocument.addObject("Part::Feature", "v211314") v211314.Shape = Part.Face(Part.makePolygon(a)) a = [p13, p13p03, p13p03p21, p13p21, p13] v130321 = App.ActiveDocument.addObject("Part::Feature", "v130321") v130321.Shape = Part.Face(Part.makePolygon(a)) a = [p04, p04p00, p04p00p14, p04p14, p04] v040014 = App.ActiveDocument.addObject("Part::Feature", "v040014") v040014.Shape = Part.Face(Part.makePolygon(a)) a = [p00, p00p10, p00p10p04, p00p04, p00] v001004 = App.ActiveDocument.addObject("Part::Feature", "v001004") v001004.Shape = Part.Face(Part.makePolygon(a)) a = [p10, p10p22, p10p22p00, p10p00, p10] v102200 = App.ActiveDocument.addObject("Part::Feature", "v102200") v102200.Shape = Part.Face(Part.makePolygon(a)) a = [p22, p22p14, p22p14p10, p22p10, p22] v221410 = App.ActiveDocument.addObject("Part::Feature", "v221410") v221410.Shape = Part.Face(Part.makePolygon(a)) a = [p14, p14p04, p14p04p22, p14p22, p14] v140422 = App.ActiveDocument.addObject("Part::Feature", "v140422") v140422.Shape = Part.Face(Part.makePolygon(a)) a = [p10, p10p22, p10p22p23, p10p23, p10] v102223 = App.ActiveDocument.addObject("Part::Feature", "v102223") v102223.Shape = Part.Face(Part.makePolygon(a)) a = [p22, p22p32, p22p32p10, p22p10, p22] v223210 = App.ActiveDocument.addObject("Part::Feature", "v223210") v223210.Shape = Part.Face(Part.makePolygon(a)) a = [p32, p32p33, p32p33p22, p32p22, p32] v323322 = App.ActiveDocument.addObject("Part::Feature", "v323322") v323322.Shape = Part.Face(Part.makePolygon(a)) a = [p33, p33p23, p33p23p32, p33p32, p33] v332332 = App.ActiveDocument.addObject("Part::Feature", "v332332") v332332.Shape = Part.Face(Part.makePolygon(a)) a = [p23, p23p10, p23p10p33, p23p33, p23] v231033 = App.ActiveDocument.addObject("Part::Feature", "v231033") v231033.Shape = Part.Face(Part.makePolygon(a)) a = [p11, p11p23, p11p23p24, p11p24, p11] v112324 = App.ActiveDocument.addObject("Part::Feature", "v112324") v112324.Shape = Part.Face(Part.makePolygon(a)) a = [p23, p23p33, p23p33p11, p23p11, p23] v233311 = App.ActiveDocument.addObject("Part::Feature", "v233311") v233311.Shape = Part.Face(Part.makePolygon(a)) a = [p33, p33p34, p33p34p23, p33p23, p33] v333423 = App.ActiveDocument.addObject("Part::Feature", "v333423") v333423.Shape = Part.Face(Part.makePolygon(a)) a = [p34, p34p24, p34p24p33, p34p33, p34] v342433 = App.ActiveDocument.addObject("Part::Feature", "v342433") v342433.Shape = Part.Face(Part.makePolygon(a)) a = [p24, p24p11, p24p11p34, p24p34, p24] v241134 = App.ActiveDocument.addObject("Part::Feature", "v241134") v241134.Shape = Part.Face(Part.makePolygon(a)) a = [p12, p12p24, p12p24p20, p12p20, p12] v122420 = App.ActiveDocument.addObject("Part::Feature", "v122420") v122420.Shape = Part.Face(Part.makePolygon(a)) a = [p24, p24p34, p24p34p12, p24p12, p24] v243412 = App.ActiveDocument.addObject("Part::Feature", "v243412") v243412.Shape = Part.Face(Part.makePolygon(a)) a = [p34, p34p30, p34p30p24, p34p24, p34] v343024 = App.ActiveDocument.addObject("Part::Feature", "v343024") v343024.Shape = Part.Face(Part.makePolygon(a)) a = [p30, p30p20, p30p20p34, p30p34, p30] v302034 = App.ActiveDocument.addObject("Part::Feature", "v302034") v302034.Shape = Part.Face(Part.makePolygon(a)) a = [p20, p20p12, p20p12p30, p20p30, p20] v201230 = App.ActiveDocument.addObject("Part::Feature", "v201230") v201230.Shape = Part.Face(Part.makePolygon(a)) a = [p13, p13p20, p13p20p21, p13p21, p13] v132021 = App.ActiveDocument.addObject("Part::Feature", "v132021") v132021.Shape = Part.Face(Part.makePolygon(a)) a = [p20, p20p30, p20p30p13, p20p13, p20] v203013 = App.ActiveDocument.addObject("Part::Feature", "v203013") v203013.Shape = Part.Face(Part.makePolygon(a)) a = [p30, p30p31, p30p31p20, p30p20, p30] v303120 = App.ActiveDocument.addObject("Part::Feature", "v303120") v303120.Shape = Part.Face(Part.makePolygon(a)) a = [p31, p31p21, p31p21p30, p31p30, p31] v312130 = App.ActiveDocument.addObject("Part::Feature", "v312130") v312130.Shape = Part.Face(Part.makePolygon(a)) a = [p21, p21p13, p21p13p31, p21p31, p21] v211331 = App.ActiveDocument.addObject("Part::Feature", "v211331") v211331.Shape = Part.Face(Part.makePolygon(a)) a = [p14, p14p21, p14p21p22, p14p22, p14] v142122 = App.ActiveDocument.addObject("Part::Feature", "v142122") v142122.Shape = Part.Face(Part.makePolygon(a)) a = [p21, p21p31, p21p31p14, p21p14, p21] v213114 = App.ActiveDocument.addObject("Part::Feature", "v213114") v213114.Shape = Part.Face(Part.makePolygon(a)) a = [p31, p31p32, p31p32p21, p31p21, p31] v313221 = App.ActiveDocument.addObject("Part::Feature", "v313221") v313221.Shape = Part.Face(Part.makePolygon(a)) a = [p32, p32p22, p32p22p31, p32p31, p32] v322231 = App.ActiveDocument.addObject("Part::Feature", "v322231") v322231.Shape = Part.Face(Part.makePolygon(a)) a = [p22, p22p14, p22p14p32, p22p32, p22] v221432 = App.ActiveDocument.addObject("Part::Feature", "v221432") v221432.Shape = Part.Face(Part.makePolygon(a)) a = [p30, p30p31, p30p31p34, p30p34, p30] v303134 = App.ActiveDocument.addObject("Part::Feature", "v303134") v303134.Shape = Part.Face(Part.makePolygon(a)) a = [p31, p31p32, p31p32p30, p31p30, p31] v313230 = App.ActiveDocument.addObject("Part::Feature", "v313230") v313230.Shape = Part.Face(Part.makePolygon(a)) a = [p32, p32p33, p32p33p31, p32p31, p32] v323331 = App.ActiveDocument.addObject("Part::Feature", "v323331") v323331.Shape = Part.Face(Part.makePolygon(a)) a = [p33, p33p34, p33p34p32, p33p32, p33] v333432 = App.ActiveDocument.addObject("Part::Feature", "v333432") v333432.Shape = Part.Face(Part.makePolygon(a)) a = [p34, p34p30, p34p30p33, p34p33, p34] v343033 = App.ActiveDocument.addObject("Part::Feature", "v343033") v343033.Shape = Part.Face(Part.makePolygon(a)) # internal facets (only partly visible when rotating) # Two copies each because one rotates and one doesn't a = [p00p01, p00p01p10, p00c, p00p01p04, p00p01] i0001a = App.ActiveDocument.addObject("Part::Feature", "i0001a") i0001a.Shape = Part.Face(Part.makePolygon(a)) i0001a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0001b = App.ActiveDocument.addObject("Part::Feature", "i0001b") i0001b.Shape = Part.Face(Part.makePolygon(a)) i0001b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p00p10, p00p10p01, p00c, p00p10p04, p00p10] i0010a = App.ActiveDocument.addObject("Part::Feature", "i0010a") i0010a.Shape = Part.Face(Part.makePolygon(a)) i0010a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0010b = App.ActiveDocument.addObject("Part::Feature", "i0010b") i0010b.Shape = Part.Face(Part.makePolygon(a)) i0010b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p00p04, p00p04p10, p00c, p00p04p01, p00p04] i0004a = App.ActiveDocument.addObject("Part::Feature", "i0004a") i0004a.Shape = Part.Face(Part.makePolygon(a)) i0004a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0004b = App.ActiveDocument.addObject("Part::Feature", "i0004b") i0004b.Shape = Part.Face(Part.makePolygon(a)) i0004b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p01p02, p01p02p11, p01c, p01p02p00, p01p02] i0102a = App.ActiveDocument.addObject("Part::Feature", "i0102a") i0102a.Shape = Part.Face(Part.makePolygon(a)) i0102a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0102b = App.ActiveDocument.addObject("Part::Feature", "i0102b") i0102b.Shape = Part.Face(Part.makePolygon(a)) i0102b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p01p11, p01p11p02, p01c, p01p11p00, p01p11] i0111a = App.ActiveDocument.addObject("Part::Feature", "i0111a") i0111a.Shape = Part.Face(Part.makePolygon(a)) i0111a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0111b = App.ActiveDocument.addObject("Part::Feature", "i0111b") i0111b.Shape = Part.Face(Part.makePolygon(a)) i0111b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p01p00, p01p00p11, p01c, p01p00p02, p01p00] i0100a = App.ActiveDocument.addObject("Part::Feature", "i0100a") i0100a.Shape = Part.Face(Part.makePolygon(a)) i0100a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0100b = App.ActiveDocument.addObject("Part::Feature", "i0100b") i0100b.Shape = Part.Face(Part.makePolygon(a)) i0100b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p02p03, p02p03p12, p02c,p02p03p01, p02p03] i0203a = App.ActiveDocument.addObject("Part::Feature", "i0203a") i0203a.Shape = Part.Face(Part.makePolygon(a)) i0203a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0203b = App.ActiveDocument.addObject("Part::Feature", "i0203b") i0203b.Shape = Part.Face(Part.makePolygon(a)) i0203b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p02p12, p02p12p03, p02c, p02p12p01, p02p12] i0212a = App.ActiveDocument.addObject("Part::Feature", "i0212a") i0212a.Shape = Part.Face(Part.makePolygon(a)) i0212a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0212b = App.ActiveDocument.addObject("Part::Feature", "i0212b") i0212b.Shape = Part.Face(Part.makePolygon(a)) i0212b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p02p01, p02p01p12, p02c, p02p01p03, p02p01] i0201a = App.ActiveDocument.addObject("Part::Feature", "i0201a") i0201a.Shape = Part.Face(Part.makePolygon(a)) i0201a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0201b = App.ActiveDocument.addObject("Part::Feature", "i0201b") i0201b.Shape = Part.Face(Part.makePolygon(a)) i0201b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p03p04, p03p04p13, p03c, p03p04p02, p03p04] i0304a = App.ActiveDocument.addObject("Part::Feature", "i0304a") i0304a.Shape = Part.Face(Part.makePolygon(a)) i0304a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0304b = App.ActiveDocument.addObject("Part::Feature", "i0304b") i0304b.Shape = Part.Face(Part.makePolygon(a)) i0304b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p03p13, p03p13p04, p03c, p03p13p02, p03p13] i0313a = App.ActiveDocument.addObject("Part::Feature", "i0313a") i0313a.Shape = Part.Face(Part.makePolygon(a)) i0313a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0313b = App.ActiveDocument.addObject("Part::Feature", "i0313b") i0313b.Shape = Part.Face(Part.makePolygon(a)) i0313b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p03p02, p03p02p13, p03c, p03p02p04, p03p02] i0302a = App.ActiveDocument.addObject("Part::Feature", "i0302a") i0302a.Shape = Part.Face(Part.makePolygon(a)) i0302a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0302b = App.ActiveDocument.addObject("Part::Feature", "i0302b") i0302b.Shape = Part.Face(Part.makePolygon(a)) i0302b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p04p00, p04p00p14, p04c, p04p00p03, p04p00] i0400a = App.ActiveDocument.addObject("Part::Feature", "i0400a") i0400a.Shape = Part.Face(Part.makePolygon(a)) i0400a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0400b = App.ActiveDocument.addObject("Part::Feature", "i0400b") i0400b.Shape = Part.Face(Part.makePolygon(a)) i0400b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p04p14, p04p14p00, p04c, p04p14p03, p04p14] i0414a = App.ActiveDocument.addObject("Part::Feature", "i0414a") i0414a.Shape = Part.Face(Part.makePolygon(a)) i0414a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0414b = App.ActiveDocument.addObject("Part::Feature", "i0414b") i0414b.Shape = Part.Face(Part.makePolygon(a)) i0414b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p04p03, p04p03p14, p04c, p04p03p00, p04p03] i0403a = App.ActiveDocument.addObject("Part::Feature", "i0403a") i0403a.Shape = Part.Face(Part.makePolygon(a)) i0403a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i0403b = App.ActiveDocument.addObject("Part::Feature", "i0403b") i0403b.Shape = Part.Face(Part.makePolygon(a)) i0403b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p10p00, p10p00p23, p10c, p10p00p22, p10p00] i1000a = App.ActiveDocument.addObject("Part::Feature", "i1000a") i1000a.Shape = Part.Face(Part.makePolygon(a)) i1000a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1000b = App.ActiveDocument.addObject("Part::Feature", "i1000b") i1000b.Shape = Part.Face(Part.makePolygon(a)) i1000b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p10p22, p10p22p00, p10c, p10p22p23, p10p22] i1022a = App.ActiveDocument.addObject("Part::Feature", "i1022a") i1022a.Shape = Part.Face(Part.makePolygon(a)) i1022a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1022b = App.ActiveDocument.addObject("Part::Feature", "i1022b") i1022b.Shape = Part.Face(Part.makePolygon(a)) i1022b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p10p23, p10p23p00, p10c, p10p23p22, p10p23] i1023a = App.ActiveDocument.addObject("Part::Feature", "i1023a") i1023a.Shape = Part.Face(Part.makePolygon(a)) i1023a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1023b = App.ActiveDocument.addObject("Part::Feature", "i1023b") i1023b.Shape = Part.Face(Part.makePolygon(a)) i1023b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p11p01, p11p01p23, p11c, p11p01p24, p11p01] i1101a = App.ActiveDocument.addObject("Part::Feature", "i1101a") i1101a.Shape = Part.Face(Part.makePolygon(a)) i1101a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1101b = App.ActiveDocument.addObject("Part::Feature", "i1101b") i1101b.Shape = Part.Face(Part.makePolygon(a)) i1101b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p11p23, p11p23p01, p11c, p11p23p24, p11p23] i1123a = App.ActiveDocument.addObject("Part::Feature", "i1123a") i1123a.Shape = Part.Face(Part.makePolygon(a)) i1123a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1123b = App.ActiveDocument.addObject("Part::Feature", "i1123b") i1123b.Shape = Part.Face(Part.makePolygon(a)) i1123b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p11p24, p11p24p01, p11c, p11p24p23, p11p24] i1124a = App.ActiveDocument.addObject("Part::Feature", "i1124a") i1124a.Shape = Part.Face(Part.makePolygon(a)) i1124a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1124b = App.ActiveDocument.addObject("Part::Feature", "i1124b") i1124b.Shape = Part.Face(Part.makePolygon(a)) i1124b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p12p02, p12p02p24, p12c, p12p02p20, p12p02] i1202a = App.ActiveDocument.addObject("Part::Feature", "i1202a") i1202a.Shape = Part.Face(Part.makePolygon(a)) i1202a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1202b = App.ActiveDocument.addObject("Part::Feature", "i1202b") i1202b.Shape = Part.Face(Part.makePolygon(a)) i1202b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p12p20, p12p20p24, p12c, p12p20p02, p12p20] i1220a = App.ActiveDocument.addObject("Part::Feature", "i1220a") i1220a.Shape = Part.Face(Part.makePolygon(a)) i1220a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1220b = App.ActiveDocument.addObject("Part::Feature", "i1220b") i1220b.Shape = Part.Face(Part.makePolygon(a)) i1220b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p12p24, p12p24p20, p12c, p12p24p02, p12p24] i1224a = App.ActiveDocument.addObject("Part::Feature", "i1224a") i1224a.Shape = Part.Face(Part.makePolygon(a)) i1224a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1224b = App.ActiveDocument.addObject("Part::Feature", "i1224b") i1224b.Shape = Part.Face(Part.makePolygon(a)) i1224b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p13p03, p13p03p20, p13c, p13p03p21, p13p03] i1303a = App.ActiveDocument.addObject("Part::Feature", "i1303a") i1303a.Shape = Part.Face(Part.makePolygon(a)) i1303a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1303b = App.ActiveDocument.addObject("Part::Feature", "i1303b") i1303b.Shape = Part.Face(Part.makePolygon(a)) i1303b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p13p20, p13p20p21, p13c, p13p20p03, p13p20] i1320a = App.ActiveDocument.addObject("Part::Feature", "i1320a") i1320a.Shape = Part.Face(Part.makePolygon(a)) i1320a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1320b = App.ActiveDocument.addObject("Part::Feature", "i1320b") i1320b.Shape = Part.Face(Part.makePolygon(a)) i1320b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p13p21, p13p21p20, p13c, p13p21p03, p13p21] i1321a = App.ActiveDocument.addObject("Part::Feature", "i1321a") i1321a.Shape = Part.Face(Part.makePolygon(a)) i1321a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1321b = App.ActiveDocument.addObject("Part::Feature", "i1321b") i1321b.Shape = Part.Face(Part.makePolygon(a)) i1321b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p14p04, p14p04p21, p14c, p14p04p22, p14p04] i1404a = App.ActiveDocument.addObject("Part::Feature", "i1404a") i1404a.Shape = Part.Face(Part.makePolygon(a)) i1404a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1404b = App.ActiveDocument.addObject("Part::Feature", "i1404b") i1404b.Shape = Part.Face(Part.makePolygon(a)) i1404b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p14p21, p14p21p04, p14c, p14p21p22, p14p21] i1421a = App.ActiveDocument.addObject("Part::Feature", "i1421a") i1421a.Shape = Part.Face(Part.makePolygon(a)) i1421a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1421b = App.ActiveDocument.addObject("Part::Feature", "i1421b") i1421b.Shape = Part.Face(Part.makePolygon(a)) i1421b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p14p22, p14p22p21, p14c, p14p22p04, p14p22] i1422a = App.ActiveDocument.addObject("Part::Feature", "i1422a") i1422a.Shape = Part.Face(Part.makePolygon(a)) i1422a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i1422b = App.ActiveDocument.addObject("Part::Feature", "i1422b") i1422b.Shape = Part.Face(Part.makePolygon(a)) i1422b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p20p12, p20p12p13, p20c, p20p12p30, p20p12] i2012a = App.ActiveDocument.addObject("Part::Feature", "i2012a") i2012a.Shape = Part.Face(Part.makePolygon(a)) i2012a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2012b = App.ActiveDocument.addObject("Part::Feature", "i2012b") i2012b.Shape = Part.Face(Part.makePolygon(a)) i2012b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p20p13, p20p13p30, p20c, p20p13p12, p20p13] i2013a = App.ActiveDocument.addObject("Part::Feature", "i2013a") i2013a.Shape = Part.Face(Part.makePolygon(a)) i2013a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2013b = App.ActiveDocument.addObject("Part::Feature", "i2013b") i2013b.Shape = Part.Face(Part.makePolygon(a)) i2013b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p20p30, p20p30p13, p20c, p20p30p12, p20p30] i2030a = App.ActiveDocument.addObject("Part::Feature", "i2030a") i2030a.Shape = Part.Face(Part.makePolygon(a)) i2030a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2030b = App.ActiveDocument.addObject("Part::Feature", "i2030b") i2030b.Shape = Part.Face(Part.makePolygon(a)) i2030b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p21p13, p21p13p14, p21c, p21p13p31, p21p13] i2113a = App.ActiveDocument.addObject("Part::Feature", "i2113a") i2113a.Shape = Part.Face(Part.makePolygon(a)) i2113a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2113b = App.ActiveDocument.addObject("Part::Feature", "i2113b") i2113b.Shape = Part.Face(Part.makePolygon(a)) i2113b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p21p14, p21p14p31, p21c, p21p14p13, p21p14] i2114a = App.ActiveDocument.addObject("Part::Feature", "i2114a") i2114a.Shape = Part.Face(Part.makePolygon(a)) i2114a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2114b = App.ActiveDocument.addObject("Part::Feature", "i2114b") i2114b.Shape = Part.Face(Part.makePolygon(a)) i2114b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p21p31, p21p31p13, p21c, p21p31p14, p21p31] i2131a = App.ActiveDocument.addObject("Part::Feature", "i2131a") i2131a.Shape = Part.Face(Part.makePolygon(a)) i2131a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2131b = App.ActiveDocument.addObject("Part::Feature", "i2131b") i2131b.Shape = Part.Face(Part.makePolygon(a)) i2131b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p22p10, p22p10p14, p22c, p22p10p32, p22p10] i2210a = App.ActiveDocument.addObject("Part::Feature", "i2210a") i2210a.Shape = Part.Face(Part.makePolygon(a)) i2210a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2210b = App.ActiveDocument.addObject("Part::Feature", "i2210b") i2210b.Shape = Part.Face(Part.makePolygon(a)) i2210b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p22p14, p22p14p32, p22c, p22p14p10, p22p14] i2214a = App.ActiveDocument.addObject("Part::Feature", "i2214a") i2214a.Shape = Part.Face(Part.makePolygon(a)) i2214a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2214b = App.ActiveDocument.addObject("Part::Feature", "i2214b") i2214b.Shape = Part.Face(Part.makePolygon(a)) i2214b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p22p32, p22p32p10, p22c, p22p32p14, p22p32] i2232a = App.ActiveDocument.addObject("Part::Feature", "i2232a") i2232a.Shape = Part.Face(Part.makePolygon(a)) i2232a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2232b = App.ActiveDocument.addObject("Part::Feature", "i2232b") i2232b.Shape = Part.Face(Part.makePolygon(a)) i2232b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p23p10, p23p10p11, p23c, p23p10p11, p23p10] i2310a = App.ActiveDocument.addObject("Part::Feature", "i2310a") i2310a.Shape = Part.Face(Part.makePolygon(a)) i2310a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2310b = App.ActiveDocument.addObject("Part::Feature", "i2310b") i2310b.Shape = Part.Face(Part.makePolygon(a)) i2310b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p23p11, p23p11p33, p23c, p23p11p10, p23p11] i2311a = App.ActiveDocument.addObject("Part::Feature", "i2311a") i2311a.Shape = Part.Face(Part.makePolygon(a)) i2311a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2311b = App.ActiveDocument.addObject("Part::Feature", "i2311b") i2311b.Shape = Part.Face(Part.makePolygon(a)) i2311b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p23p33, p23p33p10, p23c, p23p33p11, p23p33] i2333a = App.ActiveDocument.addObject("Part::Feature", "i2333a") i2333a.Shape = Part.Face(Part.makePolygon(a)) i2333a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2333b = App.ActiveDocument.addObject("Part::Feature", "i2333b") i2333b.Shape = Part.Face(Part.makePolygon(a)) i2333b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p24p11, p24p11p12, p24c, p24p11p34, p24p11] i2411a = App.ActiveDocument.addObject("Part::Feature", "i2411a") i2411a.Shape = Part.Face(Part.makePolygon(a)) i2411a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2411b = App.ActiveDocument.addObject("Part::Feature", "i2411b") i2411b.Shape = Part.Face(Part.makePolygon(a)) i2411b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p24p12, p24p12p34, p24c, p24p12p11, p24p12] i2412a = App.ActiveDocument.addObject("Part::Feature", "i2412a") i2412a.Shape = Part.Face(Part.makePolygon(a)) i2412a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2412b = App.ActiveDocument.addObject("Part::Feature", "i2412b") i2412b.Shape = Part.Face(Part.makePolygon(a)) i2412b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p24p34, p24p11p34, p24c, p24p12p34, p24p34] i2434a = App.ActiveDocument.addObject("Part::Feature", "i2434a") i2434a.Shape = Part.Face(Part.makePolygon(a)) i2434a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i2434b = App.ActiveDocument.addObject("Part::Feature", "i2434b") i2434b.Shape = Part.Face(Part.makePolygon(a)) i2434b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p30p20, p30p20p31, p30c, p30p20p34, p30p20] i3020a = App.ActiveDocument.addObject("Part::Feature", "i3020a") i3020a.Shape = Part.Face(Part.makePolygon(a)) i3020a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3020b = App.ActiveDocument.addObject("Part::Feature", "i3020b") i3020b.Shape = Part.Face(Part.makePolygon(a)) i3020b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p30p31, p30p31p20, p30c, p30p31p34, p30p31] i3031a = App.ActiveDocument.addObject("Part::Feature", "i3031a") i3031a.Shape = Part.Face(Part.makePolygon(a)) i3031a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3031b = App.ActiveDocument.addObject("Part::Feature", "i3031b") i3031b.Shape = Part.Face(Part.makePolygon(a)) i3031b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p30p34, p30p34p31, p30c, p30p34p20, p30p34] i3034a = App.ActiveDocument.addObject("Part::Feature", "i3034a") i3034a.Shape = Part.Face(Part.makePolygon(a)) i3034a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3034b = App.ActiveDocument.addObject("Part::Feature", "i3034b") i3034b.Shape = Part.Face(Part.makePolygon(a)) i3034b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p31p21, p31p21p30, p31c, p31p21p32, p31p21] i3121a = App.ActiveDocument.addObject("Part::Feature", "i3121a") i3121a.Shape = Part.Face(Part.makePolygon(a)) i3121a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3121b = App.ActiveDocument.addObject("Part::Feature", "i3121b") i3121b.Shape = Part.Face(Part.makePolygon(a)) i3121b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p31p30, p31p30p21, p31c, p31p30p32, p31p30] i3130a = App.ActiveDocument.addObject("Part::Feature", "i3130a") i3130a.Shape = Part.Face(Part.makePolygon(a)) i3130a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3130b = App.ActiveDocument.addObject("Part::Feature", "i3130b") i3130b.Shape = Part.Face(Part.makePolygon(a)) i3130b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p31p32, p31p32p21, p31c, p31p32p30, p31p32] i3132a = App.ActiveDocument.addObject("Part::Feature", "i3132a") i3132a.Shape = Part.Face(Part.makePolygon(a)) i3132a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3132b = App.ActiveDocument.addObject("Part::Feature", "i3132b") i3132b.Shape = Part.Face(Part.makePolygon(a)) i3132b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p32p22, p32p22p33, p32c, p32p22p31, p32p22] i3222a = App.ActiveDocument.addObject("Part::Feature", "i3122a") i3222a.Shape = Part.Face(Part.makePolygon(a)) i3222a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3222b = App.ActiveDocument.addObject("Part::Feature", "i3222b") i3222b.Shape = Part.Face(Part.makePolygon(a)) i3222b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p32p31, p32p31p22, p32c, p32p31p33, p32p31] i3231a = App.ActiveDocument.addObject("Part::Feature", "i3231a") i3231a.Shape = Part.Face(Part.makePolygon(a)) i3231a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3231b = App.ActiveDocument.addObject("Part::Feature", "i3231b") i3231b.Shape = Part.Face(Part.makePolygon(a)) i3231b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p32p33, p32p33p22, p32c, p32p31p33, p32p33] i3233a = App.ActiveDocument.addObject("Part::Feature", "i3233a") i3233a.Shape = Part.Face(Part.makePolygon(a)) i3233a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3233b = App.ActiveDocument.addObject("Part::Feature", "i3233b") i3233b.Shape = Part.Face(Part.makePolygon(a)) i3233b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p33p23, p33p23p32, p33c, p33p23p34, p33p23] i3323a = App.ActiveDocument.addObject("Part::Feature", "i3323a") i3323a.Shape = Part.Face(Part.makePolygon(a)) i3323a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3323b = App.ActiveDocument.addObject("Part::Feature", "i3323b") i3323b.Shape = Part.Face(Part.makePolygon(a)) i3323b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p33p32, p33p32p23, p33c, p33p32p34, p33p32] i3332a = App.ActiveDocument.addObject("Part::Feature", "i3332a") i3332a.Shape = Part.Face(Part.makePolygon(a)) i3332a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3332b = App.ActiveDocument.addObject("Part::Feature", "i3332b") i3332b.Shape = Part.Face(Part.makePolygon(a)) i3332b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p33p34, p33p34p32, p33c, p33p34p32, p33p34] i3334a = App.ActiveDocument.addObject("Part::Feature", "i3334a") i3334a.Shape = Part.Face(Part.makePolygon(a)) i3334a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3334b = App.ActiveDocument.addObject("Part::Feature", "i3334b") i3334b.Shape = Part.Face(Part.makePolygon(a)) i3334b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p34p24, p34p24p30, p34c, p34p24p33, p34p24] i3424a = App.ActiveDocument.addObject("Part::Feature", "i3424a") i3424a.Shape = Part.Face(Part.makePolygon(a)) i3424a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3424b = App.ActiveDocument.addObject("Part::Feature", "i3424b") i3424b.Shape = Part.Face(Part.makePolygon(a)) i3424b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p34p30, p34p30p24, p34c, p34p30p33, p34p30] i3430a = App.ActiveDocument.addObject("Part::Feature", "i3430a") i3430a.Shape = Part.Face(Part.makePolygon(a)) i3430a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3430b = App.ActiveDocument.addObject("Part::Feature", "i3430b") i3430b.Shape = Part.Face(Part.makePolygon(a)) i3430b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p34p33, p34p33p24, p34c, p34p33p30, p34p33] i3433a = App.ActiveDocument.addObject("Part::Feature", "i3433a") i3433a.Shape = Part.Face(Part.makePolygon(a)) i3433a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i3433b = App.ActiveDocument.addObject("Part::Feature", "i3433b") i3433b.Shape = Part.Face(Part.makePolygon(a)) i3433b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p00c, p01c, p01p00p02, p00p01p04, p00c] i000001a = App.ActiveDocument.addObject("Part::Feature", "i000001a") i000001a.Shape = Part.Face(Part.makePolygon(a)) i000001a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i000001b = App.ActiveDocument.addObject("Part::Feature", "i000001b") i000001b.Shape = Part.Face(Part.makePolygon(a)) i000001b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p01c, p02c, p02p01p03, p01p00p02, p01c] i000102a = App.ActiveDocument.addObject("Part::Feature", "i000102a") i000102a.Shape = Part.Face(Part.makePolygon(a)) i000102a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i000102b = App.ActiveDocument.addObject("Part::Feature", "i000102b") i000102b.Shape = Part.Face(Part.makePolygon(a)) i000102b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p02c, p03c, p03p04p02, p02p01p03, p02c] i000203a = App.ActiveDocument.addObject("Part::Feature", "i000203a") i000203a.Shape = Part.Face(Part.makePolygon(a)) i000203a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i000203b = App.ActiveDocument.addObject("Part::Feature", "i000203b") i000203b.Shape = Part.Face(Part.makePolygon(a)) i000203b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p03c, p04c, p04p00p03, p03p02p04, p03c] i000304a = App.ActiveDocument.addObject("Part::Feature", "i000304a") i000304a.Shape = Part.Face(Part.makePolygon(a)) i000304a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i000304b = App.ActiveDocument.addObject("Part::Feature", "i000304b") i000304b.Shape = Part.Face(Part.makePolygon(a)) i000304b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p04c, p00c, p00p01p04, p04p03p00, p04c] i000400a = App.ActiveDocument.addObject("Part::Feature", "i000400a") i000400a.Shape = Part.Face(Part.makePolygon(a)) i000400a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i000400b = App.ActiveDocument.addObject("Part::Feature", "i000400b") i000400b.Shape = Part.Face(Part.makePolygon(a)) i000400b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p00c, p10c, p10p23p00, p00p01p10, p00c] i100010a = App.ActiveDocument.addObject("Part::Feature", "i100010a") i100010a.Shape = Part.Face(Part.makePolygon(a)) i100010a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i100010b = App.ActiveDocument.addObject("Part::Feature", "i100010b") i100010b.Shape = Part.Face(Part.makePolygon(a)) i100010b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p10c, p23c, p23p10p11, p10p00p23, p10c] i101023a = App.ActiveDocument.addObject("Part::Feature", "i101023a") i101023a.Shape = Part.Face(Part.makePolygon(a)) i101023a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i101023b = App.ActiveDocument.addObject("Part::Feature", "i101023b") i101023b.Shape = Part.Face(Part.makePolygon(a)) i101023b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p23c, p11c, p11p01p23, p23p10p11, p23c] i102311a = App.ActiveDocument.addObject("Part::Feature", "i102311a") i102311a.Shape = Part.Face(Part.makePolygon(a)) i102311a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i102311b = App.ActiveDocument.addObject("Part::Feature", "i102311b") i102311b.Shape = Part.Face(Part.makePolygon(a)) i102311b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p11c, p01c, p01p00p11, p11p01p23, p11c] i101101a = App.ActiveDocument.addObject("Part::Feature", "i101101a") i101101a.Shape = Part.Face(Part.makePolygon(a)) i101101a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i101101b = App.ActiveDocument.addObject("Part::Feature", "i101101b") i101101b.Shape = Part.Face(Part.makePolygon(a)) i101101b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p01c, p00c, p00p10p01, p01p00p11, p01c] i100100a = App.ActiveDocument.addObject("Part::Feature", "i100100a") i100100a.Shape = Part.Face(Part.makePolygon(a)) i100100a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i100100b = App.ActiveDocument.addObject("Part::Feature", "i100100b") i100100b.Shape = Part.Face(Part.makePolygon(a)) i100100b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p01c, p11c, p11p01p24, p01p02p11, p01c] i110111a = App.ActiveDocument.addObject("Part::Feature", "i110111a") i110111a.Shape = Part.Face(Part.makePolygon(a)) i110111a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i110111b = App.ActiveDocument.addObject("Part::Feature", "i110111b") i110111b.Shape = Part.Face(Part.makePolygon(a)) i110111b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p11c, p24c, p24p11p12, p11p01p24, p11c] i111124a = App.ActiveDocument.addObject("Part::Feature", "i111124a") i111124a.Shape = Part.Face(Part.makePolygon(a)) i111124a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i111124b = App.ActiveDocument.addObject("Part::Feature", "i111124b") i111124b.Shape = Part.Face(Part.makePolygon(a)) i111124b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p24c, p12c, p12p02p24, p24p11p12, p24c] i112412a = App.ActiveDocument.addObject("Part::Feature", "i112412a") i112412a.Shape = Part.Face(Part.makePolygon(a)) i112412a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i112412b = App.ActiveDocument.addObject("Part::Feature", "i112412b") i112412b.Shape = Part.Face(Part.makePolygon(a)) i112412b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p12c, p02c, p02p12p01, p12p02p24, p12c] i111202a = App.ActiveDocument.addObject("Part::Feature", "i111202a") i111202a.Shape = Part.Face(Part.makePolygon(a)) i111202a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i111202b = App.ActiveDocument.addObject("Part::Feature", "i111202b") i111202b.Shape = Part.Face(Part.makePolygon(a)) i111202b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p02c, p01c, p01p02p11, p02p01p12, p02c] i110201a = App.ActiveDocument.addObject("Part::Feature", "i110201a") i110201a.Shape = Part.Face(Part.makePolygon(a)) i110201a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i110201b = App.ActiveDocument.addObject("Part::Feature", "i110201b") i110201b.Shape = Part.Face(Part.makePolygon(a)) i110201b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p02c, p12c, p12p02p20, p02p03p12, p02c] i120212a = App.ActiveDocument.addObject("Part::Feature", "i120212a") i120212a.Shape = Part.Face(Part.makePolygon(a)) i120212a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i120212b = App.ActiveDocument.addObject("Part::Feature", "i120212b") i120212b.Shape = Part.Face(Part.makePolygon(a)) i120212b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p12c, p20c, p20p12p13, p12p02p20, p12c] i121220a = App.ActiveDocument.addObject("Part::Feature", "i121220a") i121220a.Shape = Part.Face(Part.makePolygon(a)) i121220a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i121220b = App.ActiveDocument.addObject("Part::Feature", "i121220b") i121220b.Shape = Part.Face(Part.makePolygon(a)) i121220b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p20c, p13c, p13p03p20, p20p12p13, p20c] i122013a = App.ActiveDocument.addObject("Part::Feature", "i122013a") i122013a.Shape = Part.Face(Part.makePolygon(a)) i122013a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i122013b = App.ActiveDocument.addObject("Part::Feature", "i122013b") i122013b.Shape = Part.Face(Part.makePolygon(a)) i122013b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p13c, p03c, p03p02p13, p13p03p20, p13c] i121303a = App.ActiveDocument.addObject("Part::Feature", "i121303a") i121303a.Shape = Part.Face(Part.makePolygon(a)) i121303a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i121303b = App.ActiveDocument.addObject("Part::Feature", "i121303b") i121303b.Shape = Part.Face(Part.makePolygon(a)) i121303b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p03c, p02c, p02p03p12, p03p02p13, p03c] i120302a = App.ActiveDocument.addObject("Part::Feature", "i120302a") i120302a.Shape = Part.Face(Part.makePolygon(a)) i120302a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i120302b = App.ActiveDocument.addObject("Part::Feature", "i120302b") i120302b.Shape = Part.Face(Part.makePolygon(a)) i120302b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p03c, p13c, p13p03p21, p03p04p13, p03c] i130313a = App.ActiveDocument.addObject("Part::Feature", "i130313a") i130313a.Shape = Part.Face(Part.makePolygon(a)) i130313a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i130313b = App.ActiveDocument.addObject("Part::Feature", "i130313b") i130313b.Shape = Part.Face(Part.makePolygon(a)) i130313b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p13c, p21c, p21p13p14, p13p03p21, p13c] i131321a = App.ActiveDocument.addObject("Part::Feature", "i131321a") i131321a.Shape = Part.Face(Part.makePolygon(a)) i131321a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i131321b = App.ActiveDocument.addObject("Part::Feature", "i131321b") i131321b.Shape = Part.Face(Part.makePolygon(a)) i131321b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p21c, p14c, p14p04p21, p21p13p14, p21c] i132114a = App.ActiveDocument.addObject("Part::Feature", "i132114a") i132114a.Shape = Part.Face(Part.makePolygon(a)) i132114a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i132114b = App.ActiveDocument.addObject("Part::Feature", "i132114b") i132114b.Shape = Part.Face(Part.makePolygon(a)) i132114b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p14c, p04c, p04p03p14, p14p04p21, p14c] i131404a = App.ActiveDocument.addObject("Part::Feature", "i131404a") i131404a.Shape = Part.Face(Part.makePolygon(a)) i131404a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i131404b = App.ActiveDocument.addObject("Part::Feature", "i131404b") i131404b.Shape = Part.Face(Part.makePolygon(a)) i131404b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p04c, p03c, p03p04p13, p04p03p14, p04c] i130403a = App.ActiveDocument.addObject("Part::Feature", "i130403a") i130403a.Shape = Part.Face(Part.makePolygon(a)) i130403a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i130403b = App.ActiveDocument.addObject("Part::Feature", "i130403b") i130403b.Shape = Part.Face(Part.makePolygon(a)) i130403b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p04c, p14c, p14p04p22, p04p00p14, p04c] i140414a = App.ActiveDocument.addObject("Part::Feature", "i140414a") i140414a.Shape = Part.Face(Part.makePolygon(a)) i140414a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i140414b = App.ActiveDocument.addObject("Part::Feature", "i140414b") i140414b.Shape = Part.Face(Part.makePolygon(a)) i140414b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p14c, p22c, p22p10p14, p14p04p22, p14c] i141422a = App.ActiveDocument.addObject("Part::Feature", "i141422a") i141422a.Shape = Part.Face(Part.makePolygon(a)) i141422a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i141422b = App.ActiveDocument.addObject("Part::Feature", "i141422b") i141422b.Shape = Part.Face(Part.makePolygon(a)) i141422b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p22c, p10c, p10p00p22, p22p10p14, p22c] i142210a = App.ActiveDocument.addObject("Part::Feature", "i142210a") i142210a.Shape = Part.Face(Part.makePolygon(a)) i142210a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i142210b = App.ActiveDocument.addObject("Part::Feature", "i142210b") i142210b.Shape = Part.Face(Part.makePolygon(a)) i142210b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p10c, p00c, p00p04p10, p10p00p22, p10c] i141000a = App.ActiveDocument.addObject("Part::Feature", "i141000a") i141000a.Shape = Part.Face(Part.makePolygon(a)) i141000a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i141000b = App.ActiveDocument.addObject("Part::Feature", "i141000b") i141000b.Shape = Part.Face(Part.makePolygon(a)) i141000b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p00c, p04c, p04p00p14, p00p04p10, p00c] i140004a = App.ActiveDocument.addObject("Part::Feature", "i140004a") i140004a.Shape = Part.Face(Part.makePolygon(a)) i140004a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i140004b = App.ActiveDocument.addObject("Part::Feature", "i140004b") i140004b.Shape = Part.Face(Part.makePolygon(a)) i140004b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p10c, p22c, p22p10p32, p10p22p23, p10c] i201022a = App.ActiveDocument.addObject("Part::Feature", "i201022a") i201022a.Shape = Part.Face(Part.makePolygon(a)) i201022a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i201022b = App.ActiveDocument.addObject("Part::Feature", "i201022b") i201022b.Shape = Part.Face(Part.makePolygon(a)) i201022b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p22c, p32c, p32p22p33, p22p10p32, p22c] i202232a = App.ActiveDocument.addObject("Part::Feature", "i202232a") i202232a.Shape = Part.Face(Part.makePolygon(a)) i202232a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i202232b = App.ActiveDocument.addObject("Part::Feature", "i202232b") i202232b.Shape = Part.Face(Part.makePolygon(a)) i202232b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p32c, p33c, p33p23p32, p32p22p33, p32c] i203233a = App.ActiveDocument.addObject("Part::Feature", "i203233a") i203233a.Shape = Part.Face(Part.makePolygon(a)) i203233a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i203233b = App.ActiveDocument.addObject("Part::Feature", "i203233b") i203233b.Shape = Part.Face(Part.makePolygon(a)) i203233b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p33c, p23c, p23p10p33, p33p23p32, p33c] i203323a = App.ActiveDocument.addObject("Part::Feature", "i203323a") i203323a.Shape = Part.Face(Part.makePolygon(a)) i203323a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i203323b = App.ActiveDocument.addObject("Part::Feature", "i203323b") i203323b.Shape = Part.Face(Part.makePolygon(a)) i203323b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p23c, p10c, p10p22p23, p23p10p33, p23c] i202310a = App.ActiveDocument.addObject("Part::Feature", "i202310a") i202310a.Shape = Part.Face(Part.makePolygon(a)) i202310a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i202310b = App.ActiveDocument.addObject("Part::Feature", "i202310b") i202310b.Shape = Part.Face(Part.makePolygon(a)) i202310b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p11c, p23c, p23p11p33, p11p23p24, p11c] i211123a = App.ActiveDocument.addObject("Part::Feature", "i211123a") i211123a.Shape = Part.Face(Part.makePolygon(a)) i211123a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i211123b = App.ActiveDocument.addObject("Part::Feature", "i211123b") i211123b.Shape = Part.Face(Part.makePolygon(a)) i211123b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p23c, p33c, p33p23p34, p23p11p33, p23c] i212333a = App.ActiveDocument.addObject("Part::Feature", "i212333a") i212333a.Shape = Part.Face(Part.makePolygon(a)) i212333a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i212333b = App.ActiveDocument.addObject("Part::Feature", "i212333b") i212333b.Shape = Part.Face(Part.makePolygon(a)) i212333b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p33c, p34c, p34p24p33, p33p23p34, p33c] i213334a = App.ActiveDocument.addObject("Part::Feature", "i213334a") i213334a.Shape = Part.Face(Part.makePolygon(a)) i213334a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i213334b = App.ActiveDocument.addObject("Part::Feature", "i213334b") i213334b.Shape = Part.Face(Part.makePolygon(a)) i213334b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p34c, p24c, p24p11p34, p34p24p33, p34c] i213424a = App.ActiveDocument.addObject("Part::Feature", "i213424a") i213424a.Shape = Part.Face(Part.makePolygon(a)) i213424a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i213424b = App.ActiveDocument.addObject("Part::Feature", "i213424b") i213424b.Shape = Part.Face(Part.makePolygon(a)) i213424b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p24c, p11c, p11p23p24, p24p11p34, p24c] i212411a = App.ActiveDocument.addObject("Part::Feature", "i212411a") i212411a.Shape = Part.Face(Part.makePolygon(a)) i212411a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i212411b = App.ActiveDocument.addObject("Part::Feature", "i212411b") i212411b.Shape = Part.Face(Part.makePolygon(a)) i212411b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p12c, p24c, p24p12p34, p12p20p24, p12c] i221224a = App.ActiveDocument.addObject("Part::Feature", "i221224a") i221224a.Shape = Part.Face(Part.makePolygon(a)) i221224a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i221224b = App.ActiveDocument.addObject("Part::Feature", "i221224b") i221224b.Shape = Part.Face(Part.makePolygon(a)) i221224b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p24c, p34c, p34p24p30, p24p12p34, p24c] i222434a = App.ActiveDocument.addObject("Part::Feature", "i222434a") i222434a.Shape = Part.Face(Part.makePolygon(a)) i222434a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i222434b = App.ActiveDocument.addObject("Part::Feature", "i222434b") i222434b.Shape = Part.Face(Part.makePolygon(a)) i222434b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p34c, p30c, p30p20p34, p34p24p30, p34c] i223430a = App.ActiveDocument.addObject("Part::Feature", "i223430a") i223430a.Shape = Part.Face(Part.makePolygon(a)) i223430a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i223430b = App.ActiveDocument.addObject("Part::Feature", "i223430b") i223430b.Shape = Part.Face(Part.makePolygon(a)) i223430b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p30c, p20c, p20p12p30, p30p20p34, p30c] i223020a = App.ActiveDocument.addObject("Part::Feature", "i223020a") i223020a.Shape = Part.Face(Part.makePolygon(a)) i223020a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i223020b = App.ActiveDocument.addObject("Part::Feature", "i223020b") i223020b.Shape = Part.Face(Part.makePolygon(a)) i223020b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p20c, p12c, p12p20p24, p20p12p30, p20c] i222012a = App.ActiveDocument.addObject("Part::Feature", "i222012a") i222012a.Shape = Part.Face(Part.makePolygon(a)) i222012a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i222012b = App.ActiveDocument.addObject("Part::Feature", "i222012b") i222012b.Shape = Part.Face(Part.makePolygon(a)) i222012b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p13c, p20c, p20p13p30, p13p20p21, p13c] i231320a = App.ActiveDocument.addObject("Part::Feature", "i231320a") i231320a.Shape = Part.Face(Part.makePolygon(a)) i231320a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i231320b = App.ActiveDocument.addObject("Part::Feature", "i231320b") i231320b.Shape = Part.Face(Part.makePolygon(a)) i231320b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p20c, p30c, p30p20p31, p20p13p30, p20c] i232030a = App.ActiveDocument.addObject("Part::Feature", "i232030a") i232030a.Shape = Part.Face(Part.makePolygon(a)) i232030a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i232030b = App.ActiveDocument.addObject("Part::Feature", "i232030b") i232030b.Shape = Part.Face(Part.makePolygon(a)) i232030b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p30c, p31c, p31p21p30, p30p20p31, p30c] i233031a = App.ActiveDocument.addObject("Part::Feature", "i233031a") i233031a.Shape = Part.Face(Part.makePolygon(a)) i233031a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i233031b = App.ActiveDocument.addObject("Part::Feature", "i233031b") i233031b.Shape = Part.Face(Part.makePolygon(a)) i233031b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p31c, p21c, p21p13p31, p31p21p30, p31c] i233121a = App.ActiveDocument.addObject("Part::Feature", "i233121a") i233121a.Shape = Part.Face(Part.makePolygon(a)) i233121a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i233121b = App.ActiveDocument.addObject("Part::Feature", "i233121b") i233121b.Shape = Part.Face(Part.makePolygon(a)) i233121b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p21c, p13c, p13p20p21, p21p13p31, p21c] i232113a = App.ActiveDocument.addObject("Part::Feature", "i232113a") i232113a.Shape = Part.Face(Part.makePolygon(a)) i232113a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i232113b = App.ActiveDocument.addObject("Part::Feature", "i232113b") i232113b.Shape = Part.Face(Part.makePolygon(a)) i232113b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p14c, p21c, p21p14p31, p14p21p22, p14c] i241421a = App.ActiveDocument.addObject("Part::Feature", "i241421a") i241421a.Shape = Part.Face(Part.makePolygon(a)) i241421a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i241421b = App.ActiveDocument.addObject("Part::Feature", "i241421b") i241421b.Shape = Part.Face(Part.makePolygon(a)) i241421b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p21c, p31c, p31p21p32, p21p14p31, p21c] i242131a = App.ActiveDocument.addObject("Part::Feature", "i242131a") i242131a.Shape = Part.Face(Part.makePolygon(a)) i242131a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i242131b = App.ActiveDocument.addObject("Part::Feature", "i242131b") i242131b.Shape = Part.Face(Part.makePolygon(a)) i242131b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p31c, p32c, p32p22p31, p31p21p32, p31c] i243132a = App.ActiveDocument.addObject("Part::Feature", "i243132a") i243132a.Shape = Part.Face(Part.makePolygon(a)) i243132a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i243132b = App.ActiveDocument.addObject("Part::Feature", "i243132b") i243132b.Shape = Part.Face(Part.makePolygon(a)) i243132b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p32c, p22c, p22p14p32, p32p22p31, p32c] i243222a = App.ActiveDocument.addObject("Part::Feature", "i243222a") i243222a.Shape = Part.Face(Part.makePolygon(a)) i243222a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i243222b = App.ActiveDocument.addObject("Part::Feature", "i243222b") i243222b.Shape = Part.Face(Part.makePolygon(a)) i243222b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p22c, p14c, p14p21p22, p22p14p32, p22c] i242214a = App.ActiveDocument.addObject("Part::Feature", "i242214a") i242214a.Shape = Part.Face(Part.makePolygon(a)) i242214a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i242214b = App.ActiveDocument.addObject("Part::Feature", "i242214b") i242214b.Shape = Part.Face(Part.makePolygon(a)) i242214b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p30c, p34c, p34p30p33, p30p31p34, p30c] i303034a = App.ActiveDocument.addObject("Part::Feature", "i303034a") i303034a.Shape = Part.Face(Part.makePolygon(a)) i303034a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i303034b = App.ActiveDocument.addObject("Part::Feature", "i303034b") i303034b.Shape = Part.Face(Part.makePolygon(a)) i303034b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p34c, p33c, p33p32p34, p34p30p33, p34c] i303433a = App.ActiveDocument.addObject("Part::Feature", "i303433a") i303433a.Shape = Part.Face(Part.makePolygon(a)) i303433a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i303433b = App.ActiveDocument.addObject("Part::Feature", "i303433b") i303433b.Shape = Part.Face(Part.makePolygon(a)) i303433b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p33c, p32c, p32p31p33, p33p32p34, p33c] i303332a = App.ActiveDocument.addObject("Part::Feature", "i303332a") i303332a.Shape = Part.Face(Part.makePolygon(a)) i303332a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i303332b = App.ActiveDocument.addObject("Part::Feature", "i303332b") i303332b.Shape = Part.Face(Part.makePolygon(a)) i303332b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p32c, p31c, p31p30p32, p32p31p33, p32c] i303231a = App.ActiveDocument.addObject("Part::Feature", "i303231a") i303231a.Shape = Part.Face(Part.makePolygon(a)) i303231a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i303231b = App.ActiveDocument.addObject("Part::Feature", "i303231b") i303231b.Shape = Part.Face(Part.makePolygon(a)) i303231b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] a = [p31c, p30c, p30p31p34, p31p30p32, p31c] i303130a = App.ActiveDocument.addObject("Part::Feature", "i303130a") i303130a.Shape = Part.Face(Part.makePolygon(a)) i303130a.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] i303130b = App.ActiveDocument.addObject("Part::Feature", "i303130b") i303130b.Shape = Part.Face(Part.makePolygon(a)) i303130b.ViewObject.DiffuseColor = [(0.0, 0.0, 0.0)] face00 = face(p00.add(p01).add(p02).add(p03).add(p04)) face00.middle = fc00 face00.name = "face00" face00.vertex[0] = [v000104, v001004, v000110] face00.vertex[1] = [v010200, v011100, v010211] face00.vertex[2] = [v020301, v021201, v020312] face00.vertex[3] = [v030402, v031302, v030413] face00.vertex[4] = [v040003, v041403, v040014] face00.edge[0] = [ec0204, ec1011] face00.edge[1] = [ec0300, ec1112] face00.edge[2] = [ec0401, ec1213] face00.edge[3] = [ec0002, ec1314] face00.edge[4] = [ec0103, ec1014] face00.invis = [ i0004b, i0004a, i0010a, i0001a, i0001b, i000001a, i000001b, i100100b, i0100b, i0100a, i0111a, i0102a, i0102b, i000102a, i000102b, i110201b, i0201b, i0201a, i0212a, i0203a, i0203b, i000203a, i000203b, i120302b, i0302b, i0302a, i0313a, i0304a, i0304b, i000304a, i000304b, i130403b, i0403b, i0403a, i0414a, i0400a, i0400b, i000400a, i000400b, i140004b] face00.allvis = [ [v100023, ec2301, ec1100, fc10, v231011, ec0110, ec0023, v112301], [v110124, ec2402, ec1201, fc11, v241112, ec0211, ec0124, v122402], [v120220, ec2003, ec1302, fc12, v201213, ec0312, ec0220, v132003], [v130321, ec2104, ec1403, fc13, v211314, ec0413, ec0321, v142104], [v140422, ec0022, ec0410, fc14, v221410, ec1400, ec2204, v102200]] face10 = face(p00.add(p01).add(p11).add(p23).add(p10)) face10.middle = fc10 face10.name = "face10" face10.vertex[0] = [v000110, v000104, v001004] face10.vertex[1] = [v100023, v102200, v102223] face10.vertex[2] = [v231011, v231033, v233311] face10.vertex[3] = [v112301, v112324, v110124] face10.vertex[4] = [v011100, v010211, v010200] face10.edge[0] = [ec1011, ec0204] face10.edge[1] = [ec2301, ec2204] face10.edge[2] = [ec1100, ec3322] face10.edge[3] = [ec0110, ec2433] face10.edge[4] = [ec0023, ec2402] face10.invis = [ i0001b, i0001a, i0004a, i0010a, i0010b, i100010a, i100010b, i141000b, i1000b, i1000a, i1022a, i1023a, i1023b, i101023a, i101023b, i202310b, i2310b, i2310a, i2333a, i2311a, i2311b, i102311a, i102311b, i211123b, i1123b, i1123a, i1124a, i1101a, i1101b, i101101a, i101101b, i110111b, i0111b, i0111a, i0102a, i0100a, i0100b, i100100a, i100100b, i000001b] face10.allvis = [ [v040014, ec1014, ec0022, fc14, v140422, ec0410, ec1400, v221410], [v223210, ec2332, ec1033, fc20, v323322, ec2223, ec3210, v332332], [v333423, ec1144, ec2324, fc21, v342433, ec3311, ec3423, v241134], [v241112, ec1201, ec0211, fc11, v122402, ec0124, ec1112, v021201], [v020301, ec0300, ec0401, fc00, v030402, ec0002, ec0103, v040003]] face11 = face(p01.add(p11).add(p24).add(p12).add(p02)) face11.middle = fc11 face11.name = "face11" face11.vertex[0] = [v010211, v010200, v011100] face11.vertex[1] = [v110124, v112301, v112324] face11.vertex[2] = [v241112, v241134, v243412] face11.vertex[3] = [v122402, v122420, v120220] face11.vertex[4] = [v021201, v020312, v020301] face11.edge[0] = [ec2402, ec0023] face11.edge[1] = [ec1201, ec3423] face11.edge[2] = [ec0211, ec2034] face11.edge[3] = [ec0124, ec2003] face11.edge[4] = [ec1112, ec0300] face11.invis = [ i0102b, i0102a, i0100a, i0111a, i0111b, i110111a, i110111b, i101101b, i1101b, i1101a, i1123a, i1124a, i1124b, i111124a, i111124b, i212411b, i2411b, i2411a, i2434a, i2412a, i2412b, i112412a, i112412b, i221224b, i1224b, i1224a, i1220a, i1202a, i1202b, i111202a, i111202b, i120212b, i0212b, i0212a, i0203a, i0201a, i0201b, i110201a, i110201b, i000102b] face11.allvis = [ [v000110, ec1011, ec2301, fc10, v100023, ec1100, ec0110, v231011], [v233311, ec2433, ec1144, fc21, v333423, ec2324, ec3311, v342433], [v343024, ec1230, ec2420, fc22, v302034, ec3412, ec3024, v201230], [v201213, ec1302, ec0312, fc12, v132003, ec0220, ec1213, v031302], [v030402, ec0401, ec0002, fc00, v040003, ec0103, ec0204, v000104]] face12 = face(p02.add(p12).add(p20).add(p13).add(p03)) face12.middle = fc12 face12.name = "face12" face12.vertex[0] = [v020312, v020301, v021201] face12.vertex[1] = [v120220, v122402, v122420] face12.vertex[2] = [v201213, v201230, v203013] face12.vertex[3] = [v132003, v132021, v130321] face12.vertex[4] = [v031302, v030413, v030402] face12.edge[0] = [ec2003, ec0124] face12.edge[1] = [ec1302, ec3024] face12.edge[2] = [ec0312, ec2130] face12.edge[3] = [ec0220, ec2104] face12.edge[4] = [ec1213, ec0401] face12.invis = [ i0203b, i0203a, i0201a, i0212a, i0212b, i120212a, i120212b, i111202b, i1202b, i1202a, i1224a, i1220a, i1220b, i121220a, i121220b, i222012b, i2012b, i2012a, i2030a, i2013a, i2013b, i122013a, i122013b, i231320b, i1320b, i1320a, i1321a, i1303a, i1303b, i121303a, i121303b, i130313b, i0313b, i0313a, i0304a, i0302a, i0302b, i120302a, i120302b, i000203b] face12.allvis = [ [v010211, ec1112, ec2402, fc11, v110124, ec1201, ec0211, v241112], [v243412, ec2034, ec1230, fc22, v343024, ec2420, ec3412, v302034], [v303120, ec1331, ec2021, fc23, v312130, ec3013, ec3120, v211331], [v211314, ec1403, ec0413, fc13, v142104, ec0321, ec1314, v041403], [v040003, ec0002, ec0103, fc00, v000104, ec0204, ec0300, v010200]] face13 = face(p03.add(p13).add(p21).add(p14).add(p04)) face13.middle = fc13 face13.name = "face13" face13.vertex[0] = [v030413, v030402, v031302] face13.vertex[1] = [v130321, v132003, v132021] face13.vertex[2] = [v211314, v211331, v213114] face13.vertex[3] = [v142104, v142122, v140422] face13.vertex[4] = [v041403, v040014, v040003] face13.edge[0] = [ec2104, ec0220] face13.edge[1] = [ec1403, ec3120] face13.edge[2] = [ec0413, ec2231] face13.edge[3] = [ec0321, ec0022] face13.edge[4] = [ec1314, ec0002] face13.invis = [ i0304b, i0304a, i0302a, i0313a, i0313b, i130313a, i130313b, i121303b, i1303b, i1303a, i1320a, i1321a, i1321b, i131321a, i131321b, i232113b, i2113b, i2113a, i2131a, i2114a, i2114b, i132114a, i132114b, i241421b, i1421b, i1421a, i1422a, i1404a, i1404b, i131404a, i131404b, i140414b, i0414b, i0414a, i0400a, i0403a, i0403b, i130403a, i130403b, i000304b] face13.allvis = [ [v020312, ec1213, ec2003, fc12, v120220, ec1302, ec0312, v201213], [v203013, ec2130, ec1331, fc23, v303120, ec2021, ec3013, v312130], [v313221, ec1432, ec2122, fc24, v322231, ec3114, ec3221, v221432], [v221410, ec0410, ec1400, fc14, v102200, ec2204, ec1014, v001004], [v000104, ec0103, ec0204, fc00, v010200, ec0300, ec0401, v020301]] face14 = face(p04.add(p14).add(p22).add(p10).add(p00)) face14.middle = fc14 face14.name = "face14" face14.vertex[0] = [v040014, v040003, v041403] face14.vertex[1] = [v140422, v142104, v142122] face14.vertex[2] = [v221410, v221432, v223210] face14.vertex[3] = [v102200, v102223, v100023] face14.vertex[4] = [v001004, v000110, v000104] face14.edge[0] = [ec0022, ec0321] face14.edge[1] = [ec0410, ec3221] face14.edge[2] = [ec1400, ec2332] face14.edge[3] = [ec2204, ec2301] face14.edge[4] = [ec1014, ec0103] face14.invis = [ i0400b, i0400a, i0403a, i0414a, i0414b, i140414a, i140414b, i131404b, i1404b, i1404a, i1421a, i1422a, i1422b, i141422a, i141422b, i242214b, i2214b, i2214b, i2232a, i2210a, i2210b, i142210a, i142210b, i201022b, i1022b, i1022a, i1023a, i1000a, i1000b, i141000a, i141000b, i100010b, i0010b, i0010a, i0001a, i0004a, i0004b, i140004a, i140004b, i000400b] face14.allvis = [ [v010200, ec0204, ec0300, fc00, v020301, ec0401, ec0002, v030402], [v030413, ec1314, ec2104, fc13, v130321, ec1403, ec0413, v211314], [v213114, ec2231, ec1432, fc24, v313221, ec2122, ec3114, v322231], [v323322, ec1033, ec2223, fc20, v332332, ec3210, ec3322, v231033], [v231011, ec1100, ec0110, fc10, v112301, ec0023, ec1011, v011100]] face20 = face(p10.add(p22).add(p32).add(p33).add(p23)) face20.middle = fc20 face20.name = "face20" face20.vertex[0] = [v102223, v100023, v102200] face20.vertex[1] = [v223210, v221410, v221432] face20.vertex[2] = [v323322, v322231, v323331] face20.vertex[3] = [v332332, v333432, v333423] face20.vertex[4] = [v231033, v233311, v231011] face20.edge[0] = [ec2332, ec1400] face20.edge[1] = [ec1033, ec3114] face20.edge[2] = [ec2223, ec3431] face20.edge[3] = [ec3210, ec1144] face20.edge[4] = [ec3322, ec1100] face20.invis = [ i1023b, i1023a, i1000a, i1022a, i1022b, i201022a, i201022b, i142210b, i2210b, i2210a, i2214a, i2232a, i2232b, i202232a, i202232b, i243222b, i3222b, i3222a, i3231a, i3233a, i3233b, i203233a, i203233b, i303332b, i3332b, i3332a, i3323a, i3323a, i3323b, i203323a, i203323b, i212333b, i2333b, i2333a, i2311a, i2310a, i2310b, i202310a, i202310b, i101023b] face20.allvis = [ [v001004, ec2204, ec1014, fc14, v040014, ec0022, ec0410, v140422], [v142122, ec3221, ec2231, fc24, v213114, ec1432, ec2122, v313221], [v313230, ec3330, ec3234, fc30, v303134, ec3133, ec3032, v343033], [v342433, ec2324, ec3311, fc21, v241134, ec3423, ec2433, v112324], [v112301, ec0110, ec0023, fc10, v011100, ec1011, ec2301, v000110]] face21 = face(p11.add(p23).add(p33).add(p34).add(p24)) face21.middle = fc21 face21.name = "face21" face21.vertex[0] = [v112324, v110124, v112301] face21.vertex[1] = [v233311, v231011, v231033] face21.vertex[2] = [v333423, v332332, v333432] face21.vertex[3] = [v342433, v343033, v343024] face21.vertex[4] = [v241134, v243412, v241112] face21.edge[0] = [ec2433, ec0110] face21.edge[1] = [ec1144, ec3210] face21.edge[2] = [ec2324, ec3032] face21.edge[3] = [ec3311, ec1230] face21.edge[4] = [ec3423, ec1201] face21.invis = [ i1124b, i1124a, i1101a, i1123a, i1123b, i211123a, i211123b, i102311b, i2311b, i2311a, i2310a, i2333a, i2333b, i212333a, i212333b, i203323b, i3323b, i3323a, i3332a, i3334a, i3334b, i213334a, i213334b, i303433b, i3433b, i3433a, i3430a, i3424a, i3424b, i213424a, i213424b, i222434b, i2434b, i2434a, i2412a, i2411a, i2411b, i212411a, i212411b, i111124b] face21.allvis = [ [v011100, ec0023, ec1011, fc10, v000110, ec2301, ec1100, v100023], [v102223, ec3322, ec2332, fc20, v223210, ec1033, ec2223, v323322], [v323331, ec3431, ec3330, fc30, v313230, ec3234, ec3133, v303134], [v302034, ec2420, ec3412, fc22, v201230, ec3024, ec2034, v122420], [v122402, ec0211, ec0124, fc11, v021201, ec1112, ec2402, v010211]] face22 = face(p12.add(p24).add(p34).add(p30).add(p20)) face22.middle = fc22 face22.name = "face22" face22.vertex[0] = [v122420, v120220, v122402] face22.vertex[1] = [v243412, v241112, v241134] face22.vertex[2] = [v343024, v342433, v343033] face22.vertex[3] = [v302034, v303134, v303120] face22.vertex[4] = [v201230, v203013, v201213] face22.edge[0] = [ec2034, ec0211] face22.edge[1] = [ec1230, ec3311] face22.edge[2] = [ec2420, ec3133] face22.edge[3] = [ec3412, ec1331] face22.edge[4] = [ec3024, ec1302] face22.invis = [ i1220b, i1220a, i1202a, i1224a, i1224b, i221224a, i221224b, i112412b, i2412b, i2412a, i2411a, i2434a, i2434b, i222434a, i222434b, i213424b, i3424b, i3424a, i3433a, i3430a, i3430b, i223430a, i223430b, i303034b, i3034b, i3034a, i3031a, i3020a, i3020b, i223020a, i223020b, i232030b, i2030b, i2030a, i2013a, i2012a, i2012b, i222012a, i222012b, i121220b] face22.allvis = [ [v021201, ec0124, ec1112, fc11, v010211, ec2402, ec1201, v110124], [v112324, ec3423, ec2433, fc21, v233311, ec1144, ec2324, v333423], [v333432, ec3032, ec3431, fc30, v323331, ec3330, ec3234, v313230], [v312130, ec2021, ec3013, fc23, v211331, ec3120, ec2130, v132021], [v132003, ec0312, ec0220, fc12, v031302, ec1213, ec2003, v020312]] face23 = face(p13.add(p20).add(p30).add(p31).add(p21)) face23.middle = fc23 face23.name = "face23" face23.vertex[0] = [v132021, v130321, v132003] face23.vertex[1] = [v203013, v201213, v201230] face23.vertex[2] = [v303120, v302034, v303134] face23.vertex[3] = [v312130, v313230, v313221] face23.vertex[4] = [v211331, v213114, v211314] face23.edge[0] = [ec2130, ec0312] face23.edge[1] = [ec1331, ec3412] face23.edge[2] = [ec2021, ec3234] face23.edge[3] = [ec3013, ec1432] face23.edge[4] = [ec3120, ec1403] face23.invis = [ i1321b, i1321a, i1303a, i1320a, i1320b, i231320a, i231320b, i122013b, i2013b, i2013a, i2012a, i2030a, i2030b, i232030a, i232030b, i223020b, i3020b, i3020a, i3034a, i3031a, i3031b, i233031a, i233031b, i303130b, i3130b, i3130a, i3132a, i3121a, i3121b, i233121a, i233121b, i242131b, i2131b, i2131a, i2114a, i2113a, i2113b, i232113a, i232113b, i131321b] face23.allvis = [ [v031302, ec0220, ec1213, fc12, v020312, ec2003, ec1302, v120220], [v122420, ec3024, ec2034, fc22, v243412, ec1230, ec2420, v343024], [v343033, ec3133, ec3032, fc30, v333432, ec3431, ec3330, v323331], [v322231, ec2122, ec3114, fc24, v221432, ec3221, ec2231, v142122], [v142104, ec0413, ec0321, fc13, v041403, ec1314, ec2104, v030413]] face24 = face(p14.add(p21).add(p31).add(p32).add(p22)) face24.middle = fc24 face24.name = "face24" face24.vertex[0] = [v142122, v140422, v142104] face24.vertex[1] = [v213114, v211314, v211331] face24.vertex[2] = [v313221, v312130, v313230] face24.vertex[3] = [v322231, v323331, v323322] face24.vertex[4] = [v221432, v223210, v221410] face24.edge[0] = [ec2231, ec0413] face24.edge[1] = [ec1432, ec3013] face24.edge[2] = [ec2122, ec3330] face24.edge[3] = [ec3114, ec1033] face24.edge[4] = [ec3221, ec0410] face24.invis = [ i1422b, i1422a, i1404a, i1421a, i1421b, i241421a, i241421b, i132114b, i2114b, i2114a, i2113a, i2131a, i2131b, i242131a, i242131b, i233121b, i3121b, i3121a, i3130a, i3132a, i3132b, i243132a, i243132b, i303231b, i3231b, i3231a, i3233a, i3222a, i3222b, i243222a, i243222b, i202232b, i2232b, i2232a, i2210a, i2214a, i2214b, i242214a, i242214b, i141422b] face24.allvis = [ [v041403, ec0321, ec1314, fc13, v030413, ec2104, ec1403, v130321], [v132021, ec3120, ec2130, fc23, v203013, ec1331, ec2021, v303120], [v303134, ec3234, ec3133, fc30, v343033, ec3032, ec3431, v333432], [v332332, ec2223, ec3210, fc20, v231033, ec3322, ec2332, v102223], [v102200, ec1400, ec2204, fc14, v001004, ec1014, ec0022, v040014]] face30 = face(p30.add(p34).add(p33).add(p32).add(p31)) face30.middle = fc30 face30.name = "face30" face30.vertex[0] = [v303134, v303120, v302034] face30.vertex[1] = [v343033, v343024, v342433] face30.vertex[2] = [v333432, v333423, v332332] face30.vertex[3] = [v323331, v323322, v322231] face30.vertex[4] = [v313230, v313221, v312130] face30.edge[0] = [ec3133, ec2420] face30.edge[1] = [ec3032, ec2324] face30.edge[2] = [ec3431, ec2223] face30.edge[3] = [ec3330, ec2122] face30.edge[4] = [ec3234, ec2021] face30.invis = [ i3031b, i3031a, i3020a, i3034a, i3034b, i303034a, i303034b, i223430b, i3430b, i3430a, i3424a, i3433a, i3433b, i303433a, i303433b, i213334b, i3334b, i3334a, i3323a, i3332a, i3332b, i303332a, i303332b, i203233b, i3233b, i3233a, i3222a, i3231a, i3231b, i303231a, i303231b, i243132b, i3132b, i3132a, i3121a, i3130a, i3130b, i303130a, i303130b, i233031b] face30.allvis = [ [v241134, ec3311, ec3423, fc21, v112324, ec2433, ec1144, v233311], [v231033, ec3210, ec3322, fc20, v102223, ec2332, ec1033, v223210], [v221432, ec3114, ec3221, fc24, v142122, ec2231, ec1432, v213114], [v211331, ec3013, ec3120, fc23, v132021, ec2130, ec1331, v203013], [v201230, ec3412, ec3024, fc22, v122420, ec2034, ec1230, v243412]] # This list of all objects is for rotating the whole thing _set("all",[fc00, fc10, fc11, fc12, fc13, fc14, fc20, fc21, fc22, fc23, fc24, fc30, ec0204, ec0300, ec0401, ec0002, ec0103, ec1011, ec0023, ec0110, ec1100, ec2301, ec1112, ec0124, ec0211, ec1201, ec2402, ec1213, ec0220, ec0312, ec1302, ec2003, ec1314, ec0321, ec0413, ec1403, ec2104, ec1014, ec2204, ec1400, ec0410, ec0022, ec3322, ec3210, ec2223, ec1033, ec2332, ec3423, ec3311, ec2324, ec1144, ec2433, ec2034, ec3024, ec3412, ec2420, ec1230, ec2130, ec3120, ec3013, ec2021, ec1331, ec2231, ec3221, ec3114, ec2122, ec1432, ec3234, ec3330, ec3431, ec3032, ec3133, v000104, v010200, v020301, v030402, v040003, v000110, v011100, v112301, v231011, v100023, v010211, v021201, v122402, v241112, v110124, v020312, v031302, v132003, v201213, v120220, v030413, v041403, v142104, v211314, v130321, v040014, v001004, v102200, v221410, v140422, v102223, v223210, v323322, v332332, v231033, v112324, v233311, v333423, v342433, v241134, v122420, v243412, v343024, v302034, v201230, v132021, v203013, v303120, v312130, v211331, v142122, v213114, v313221, v322231, v221432, v303134, v313230, v323331, v333432, v343033, i0001a, i0001b, i0010a, i0010b, i0004a, i0004b, i0102a, i0102b, i0111a, i0111b, i0100a, i0100b, i0203a, i0203b, i0212a, i0212b, i0201a, i0201b, i0304a, i0304b, i0313a, i0313b, i0302a, i0302b, i0400a, i0400b, i0414a, i0414b, i0403a, i0403b, i1000a, i1000b, i1022a, i1022b, i1023a, i1023b, i1101a, i1101b, i1123a, i1123b, i1124a, i1124b, i1202a, i1202b, i1220a, i1220b, i1224a, i1224b, i1303a, i1303b, i1320a, i1320b, i1321a, i1321b, i1404a, i1404b, i1421a, i1421b, i1422a, i1422b, i2012a, i2012b, i2013a, i2013b, i2030a, i2030b, i2113a, i2113b, i2114a, i2114b, i2131a, i2131b, i2210a, i2210b, i2214a, i2214b, i2232a, i2232b, i2310a, i2310b, i2311a, i2311b, i2333a, i2333b, i2411a, i2411b, i2412a, i2412b, i2434a, i2434b, i3020a, i3020b, i3031a, i3031b, i3034a, i3034b, i3121a, i3121b, i3130a, i3130b, i3132a, i3132b, i3222a, i3222b, i3231a, i3231b, i3233a, i3233b, i3323a, i3323b, i3332a, i3332b, i3334a, i3334b, i3424a, i3424b, i3430a, i3430b, i3433a, i3433b, i000001a, i000001b, i000102a, i000102b, i000203a, i000203b, i000304a, i000304b, i000400a, i000400b, i100010a, i100010b, i101023a, i101023b, i102311a, i102311b, i101101a, i101101b, i100100a, i100100b, i110111a, i110111b, i111124a, i111124b, i112412a, i112412b, i111202a, i111202b, i110201a, i110201b, i120212a, i120212b, i121220a, i121220b, i122013a, i122013b, i121303a, i121303b, i120302a, i120302b, i130313a, i130313b, i131321a, i131321b, i132114a, i132114b, i131404a, i131404b, i130403a, i130403b, i140414a, i140414b, i141422a, i141422b, i142210a, i142210b, i141000a, i141000b, i140004a, i140004b, i201022a, i201022b, i202232a, i202232b, i203233a, i203233b, i203323a, i203323b, i202310a, i202310b, i211123a, i211123b, i212333a, i212333b, i213334a, i213334b, i213424a, i213424b, i212411a, i212411b, i221224a, i221224b, i222434a, i222434b, i223430a, i223430b, i223020a, i223020b, i222012a, i222012b, i231320a, i231320b, i232030a, i232030b, i233031a, i233031b, i233121a, i233121b, i232113a, i232113b, i241421a, i241421b, i242131a, i242131b, i243132a, i243132b, i243222a, i243222b, i242214a, i242214b, i303034a, i303034b, i303433a, i303433b, i303332a, i303332b, i303231a, i303231b, i303130a, i303130b]) face00.opposite = face30 face10.opposite = face23 face11.opposite = face24 face12.opposite = face20 face13.opposite = face21 face14.opposite = face22 face20.opposite = face12 face21.opposite = face13 face22.opposite = face14 face23.opposite = face10 face24.opposite = face11 face30.opposite = face00 face00.rhdict = {"face00":face00, "face14":face10, "face13":face14, "face12":face13, "face11":face12, "face10":face11, "face24":face20, "face23":face24, "face22":face23, "face21":face22, "face20":face21, "face30":face30} face10.rhdict = {"face10":face10, "face11":face00, "face21":face11, "face20":face21, "face14":face20, "face00":face14, "face22":face12, "face30":face22, "face24":face30, "face13":face24, "face12":face13, "face23":face23} face11.rhdict = {"face11":face11, "face12":face00, "face22":face12, "face21":face22, "face10":face21, "face00":face20, "face23":face13, "face30":face23, "face20":face30, "face14":face20, "face13":face14, "face24":face24} face12.rhdict = {"face12":face12, "face13":face00, "face23":face13, "face22":face23, "face11":face22, "face00":face11, "face14":face10, "face24":face14, "face30":face24, "face21":face30, "face10":face21, "face20":face20} face13.rhdict = {"face13":face13, "face14":face00, "face24":face14, "face23":face24, "face12":face23, "face00":face12, "face20":face10, "face30":face20, "face22":face30, "face11":face22, "face10":face12, "face21":face21} face14.rhdict = {"face14":face14, "face10":face00, "face20":face10, "face24":face20, "face13":face24, "face00":face13, "face21":face11, "face30":face21, "face23":face30, "face12":face23, "face11":face12, "face22":face22} face20.rhdict = {"face20":face20, "face21":face10, "face30":face21, "face24":face30, "face14":face24, "face10":face14, "face11":face00, "face22":face11, "face23":face22, "face13":face23, "face00":face13, "face12":face12} face21.rhdict = {"face21":face21, "face11":face10, "face22":face11, "face30":face22, "face20":face30, "face10":face20, "face12":face00, "face23":face12, "face24":face23, "face14":face24, "face00":face14, "face13":face13} face22.rhdict = {"face22":face22, "face12":face11, "face23":face12, "face30":face23, "face21":face30, "face11":face21, "face13":face00, "face24":face13, "face20":face24, "face10":face20, "face00":face10, "face14":face14} face23.rhdict = {"face23":face23, "face13":face12, "face24":face13, "face30":face24, "face22":face30, "face12":face22, "face14":face00, "face20":face14, "face21":face20, "face11":face21, "face00":face11, "face10":face10} face24.rhdict = {"face24":face24, "face14":face13, "face20":face14, "face30":face20, "face23":face30, "face13":face23, "face10":face00, "face21":face10, "face22":face21, "face12":face22, "face00":face12, "face11":face11} face30.rhdict = {"face30":face30, "face21":face20, "face22":face21, "face23":face22, "face24":face23, "face20":face24, "face11":face10, "face12":face11, "face13":face12, "face14":face13, "face10":face14, "face00":face00} _set("reflect", {"arrow00x":{"face00":face10, "face10":face00, "face11":face11, "face12":face21, "face13":face20, "face14":face14, "face20":face13, "face21":face12, "face22":face22, "face23":face30, "face24":face24, "face30":face23}, "arrow01x":{"face00":face11, "face10":face10, "face11":face00, "face12":face12, "face13":face22, "face14":face21, "face20":face20, "face21":face14, "face22":face13, "face23":face23, "face24":face30, "face30":face24}, "arrow02x":{"face00":face12, "face10":face22, "face11":face11, "face12":face00, "face13":face13, "face14":face23, "face20":face30, "face21":face21, "face22":face10, "face23":face14, "face24":face24, "face30":face20}, "arrow03x":{"face00":face13, "face10":face24, "face11":face23, "face12":face12, "face13":face00, "face14":face14, "face20":face20, "face21":face30, "face22":face22, "face23":face11, "face24":face10, "face30":face21}, "arrow04x":{"face00":face14, "face10":face10, "face11":face20, "face12":face24, "face13":face13, "face14":face00, "face20":face11, "face21":face21, "face22":face30, "face23":face23, "face24":face12, "face30":face22}, "arrow10x":{"face00":face00, "face10":face11, "face11":face10, "face12":face14, "face13":face13, "face14":face12, "face20":face22, "face21":face21, "face22":face20, "face23":face24, "face24":face23, "face30":face30}, "arrow14x":{"face00":face00, "face10":face14, "face11":face13, "face12":face12, "face13":face11, "face14":face10, "face20":face20, "face21":face24, "face22":face23, "face23":face22, "face24":face21, "face30":face30}, "arrow20x":{"face00":face24, "face10":face20, "face11":face30, "face12":face23, "face13":face13, "face14":face14, "face20":face10, "face21":face21, "face22":face22, "face23":face12, "face24":face00, "face30":face11}, "arrow11x":{"face00":face00, "face10":face13, "face11":face12, "face12":face11, "face13":face10, "face14":face14, "face20":face24, "face21":face23, "face22":face22, "face23":face21, "face24":face20, "face30":face30}, "arrow21x":{"face00":face20, "face10":face10, "face11":face21, "face12":face30, "face13":face24, "face14":face14, "face20":face00, "face21":face11, "face22":face22, "face23":face23, "face24":face13, "face30":face12}, "arrow12x":{"face00":face00, "face10":face10, "face11":face14, "face12":face13, "face13":face12, "face14":face11, "face20":face21, "face21":face20, "face22":face24, "face23":face23, "face24":face22, "face30":face30}, "arrow22x":{"face00":face21, "face10":face10, "face11":face11, "face12":face22, "face13":face30, "face14":face20, "face20":face14, "face21":face00, "face22":face12, "face23":face23, "face24":face24, "face30":face13}, "arrow13x":{"face00":face00, "face10":face12, "face11":face11, "face12":face10, "face13":face14, "face14":face13, "face20":face23, "face21":face22, "face22":face21, "face23":face20, "face24":face24, "face30":face30}, "arrow23x":{"face00":face22, "face10":face21, "face11":face11, "face12":face12, "face13":face23, "face14":face30, "face20":face20, "face21":face10, "face22":face00, "face23":face13, "face24":face24, "face30":face14}, "arrow24x":{"face00":face23, "face10":face30, "face11":face22, "face12":face12, "face13":face13, "face14":face24, "face20":face20, "face21":face21, "face22":face11, "face23":face00, "face24":face14, "face30":face10}}) _set("face00", face00) _set("face10", face10) _set("face11", face11) _set("face12", face12) _set("face13", face13) _set("face14", face14) _set("face20", face20) _set("face21", face21) _set("face22", face22) _set("face23", face23) _set("face24", face24) _set("face30", face30) # Text labels for faces, done by applying textures # Use this bit of code to make a new image from a .jpg file ## texim = coin.SoTexture2() ## texim.filename = str("file.jpg") ## s = texim.image.get().getString() ## outfile = open("file.txt", "w") ## outfile.write("%s" % compressImage(s)) ## outfile.close() # and then paste file.txt into the image definition ffs = '0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff ' ffs4 = ffs + ffs + ffs + ffs ffs16 = ffs4 + ffs4 + ffs4 + ffs4 ffs64 = ffs16 + ffs16 + ffs16 + ffs16 face00.image = '80 80 1 \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xff 0xff 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xff 0xff 0xff 0xff 0xff \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfe 0xff 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfe 0xfe 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xfe 0xff 0xff 0xff 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs4 + ' \ 0xff 0xf7 0x92 0x41 0x15 0x4 0x14 0x3e \ 0x8e 0xf5 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xff 0xfe 0xff 0xf7 0x92 0x41 0x15 \ 0x5 0x14 0x3e 0x8e 0xf5 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xce 0x1e 0x0 0x0 0x1 0x0 0x0 0x0 \ 0x0 0x1b 0xcb 0xff 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xcf 0x1e 0x0 0x0 0x0 \ 0x0 0x0 0x0 0x0 0x1b 0xca 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xd9 \ 0xd 0x0 0x0 0x12 0x61 0x7d 0x64 0x14 \ 0x0 0x0 0xc 0xd9 0xfe 0xff 0xff 0xff \ 0xff 0xff 0xda 0xd 0x0 0x0 0x12 0x61 \ 0x7d 0x64 0x15 0x0 0x0 0xc 0xd9 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0x40 \ 0x0 0x0 0x40 0xed 0xff 0xff 0xff 0xf0 \ 0x45 0x0 0x0 0x40 0xff 0xff 0xff 0xff \ 0xff 0xff 0x3f 0x0 0x0 0x40 0xed 0xff \ 0xff 0xfe 0xf0 0x45 0x0 0x0 0x40 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0xd5 0x0 \ 0x0 0x10 0xed 0xff 0xff 0xff 0xff 0xff \ 0xef 0x10 0x0 0x0 0xd7 0xff 0xfe 0xff \ 0xff 0xd5 0x0 0x0 0x10 0xee 0xff 0xff \ 0xff 0xff 0xff 0xef 0x10 0x0 0x0 0xd7 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0x81 0x0 \ 0x0 0x70 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0x6f 0x0 0x0 0x85 0xff 0xff 0xff \ 0xff 0x82 0x0 0x0 0x70 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0x6f 0x0 0x0 0x85 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfe 0xff 0x51 0x0 \ 0x0 0xb6 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xb3 0x0 0x0 0x55 0xff 0xff 0xff \ 0xff 0x51 0x0 0x1 0xb7 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xb3 0x0 0x0 0x56 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0x28 0x0 \ 0x0 0xdf 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xda 0x0 0x0 0x2d 0xff 0xff 0xff \ 0xff 0x28 0x0 0x0 0xdf 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xda 0x0 0x0 0x2d \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0x14 0x0 \ 0x0 0xf6 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xf2 0x0 0x0 0x1a 0xff 0xff 0xfe \ 0xff 0x15 0x0 0x0 0xf6 0xff 0xff 0xff \ 0xff 0xff 0xff 0xfe 0xf2 0x0 0x0 0x1a \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfe 0x8 0x0 \ 0x1 0xff 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xfc 0x0 0x0 0xe 0xff 0xff 0xff \ 0xff 0x8 0x0 0x1 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xfc 0x0 0x0 0xe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xff 0xfe 0xff 0x0 0x0 \ 0x3 0xff 0xff 0xff 0xfe 0xff 0xff 0xff \ 0xff 0xff 0x0 0x0 0x4 0xff 0xff 0xff \ 0xff 0x0 0x0 0x3 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xff 0x0 0x0 0x4 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0x0 0x0 \ 0x3 0xfe 0xff 0xfe 0xff 0xff 0xff 0xff \ 0xfe 0xff 0x0 0x0 0x3 0xff 0xff 0xff \ 0xff 0x0 0x0 0x3 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xff 0x0 0x0 0x3 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0x1 0x0 \ 0x3 0xff 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xff 0x0 0x0 0x3 0xff 0xff 0xff \ 0xff 0x0 0x0 0x3 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xff 0x0 0x0 0x3 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0x0 0x0 \ 0x3 0xff 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xff 0x0 0x0 0x4 0xff 0xff 0xff \ 0xff 0x0 0x0 0x4 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xff 0x0 0x0 0x4 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0x6 0x0 \ 0x2 0xff 0xff 0xff 0xff 0xff 0xff 0xff \ 0xfe 0xfd 0x0 0x0 0xb 0xff 0xff 0xff \ 0xff 0x6 0x0 0x2 0xff 0xff 0xff 0xff \ 0xfe 0xff 0xff 0xff 0xfd 0x0 0x0 0xb \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0x12 0x0 \ 0x0 0xf8 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xf2 0x0 0x0 0x18 0xff 0xff 0xff \ 0xff 0x12 0x0 0x0 0xf8 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xf2 0x0 0x0 0x17 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0x23 0x0 \ 0x0 0xe4 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xdf 0x0 0x0 0x29 0xff 0xff 0xff \ 0xff 0x23 0x0 0x0 0xe4 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xdf 0x0 0x0 0x29 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfe 0xff 0x4b 0x0 \ 0x0 0xbe 0xff 0xff 0xff 0xff 0xff 0xff \ 0xfe 0xba 0x0 0x1 0x51 0xff 0xff 0xff \ 0xff 0x4b 0x0 0x0 0xbe 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xba 0x0 0x0 0x51 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0x7a 0x0 \ 0x0 0x7b 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0x77 0x1 0x0 0x7f 0xff 0xff 0xff \ 0xff 0x7a 0x0 0x0 0x7c 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0x77 0x0 0x0 0x7f \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xff 0xff 0xff 0xca 0x0 \ 0x0 0x19 0xf4 0xff 0xff 0xff 0xff 0xfe \ 0xf3 0x16 0x0 0x0 0xd0 0xff 0xff 0xff \ 0xff 0xca 0x0 0x1 0x19 0xf4 0xfe 0xff \ 0xff 0xff 0xff 0xf3 0x16 0x0 0x0 0xd0 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0x32 \ 0x0 0x0 0x4c 0xf2 0xff 0xff 0xff 0xf0 \ 0x49 0x0 0x0 0x38 0xff 0xff 0xff 0xff \ 0xff 0xff 0x33 0x0 0x0 0x4c 0xf2 0xff \ 0xff 0xff 0xf0 0x49 0x0 0x0 0x38 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xd1 \ 0x8 0x0 0x0 0x15 0x63 0x7d 0x62 0x15 \ 0x0 0x0 0xa 0xd4 0xff 0xff 0xff 0xff \ 0xff 0xff 0xd1 0x8 0x0 0x0 0x16 0x63 \ 0x7c 0x62 0x15 0x1 0x0 0xa 0xd4 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xc5 0x19 0x0 0x0 0x0 0x0 0x0 0x0 \ 0x0 0x1a 0xc8 0xff 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xc5 0x18 0x0 0x0 0x0 \ 0x0 0x0 0x0 0x0 0x1a 0xc8 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xf3 0x8c 0x3e 0x15 0x5 0x16 0x41 \ 0x8f 0xf5 0xff 0xff 0xfe 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xf4 0x8c 0x3e 0x15 \ 0x5 0x16 0x40 0x8f 0xf5 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xff 0xff 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfe 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs4 + ' \ ' + ffs4 + ' \ 0xff 0xff 0xff 0xfe 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xfe 0xff 0xff 0xff 0xff \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' ' face10.image = '80 80 1 \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs + ' \ 0xfd 0xf9 0xff 0xfd 0xfc 0xff 0xfa 0xff \ 0xfe 0xff 0xfd 0xff 0xfe 0xfd 0xfe 0xfe \ 0xff 0xff 0xfc 0xfe 0xff 0xff 0xff 0xff \ 0xff 0xfd 0xfe 0xfb 0xff 0xff 0xf7 0xff \ 0xff 0xfd 0xff 0xfc 0xfc 0xff 0xfe 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xf8 0xf9 0xff 0xfd 0xfe 0xff \ 0xfe 0xfc 0xff 0xff 0xfc 0xff 0xff 0xff \ 0xff 0xfd 0xff 0xff 0xfb 0xf9 0xff 0xff \ 0xff 0xff 0xfb 0xff 0xff 0xfb 0xff 0xf6 \ 0xff 0xff 0xfc 0xff 0xff 0xff 0xfa 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfb 0xff 0xff 0xfb 0xff 0xff 0xfc \ 0xff 0xff 0xfd 0xfd 0xff 0xfc 0xfd 0xfc \ 0xff 0xfb 0xff 0xfb 0xff 0xfd 0xfc 0xff \ 0xf6 0xfe 0xff 0xf8 0xff 0xfd 0xff 0xff \ 0xfe 0xfc 0xfa 0xff 0xfa 0xfd 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xfd 0xff 0xff 0xfd 0xff \ 0xfd 0xc6 0x63 0x13 0xfc 0xff 0xff 0xff \ 0xfb 0xff 0xf9 0xfd 0xff 0xff 0xfc 0xf7 \ 0xfb 0x8c 0x3e 0x17 0x6 0x18 0x3d 0x8f \ 0xf2 0xff 0xff 0xfe 0xff 0xfe 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xfe 0xff 0xf4 0xee 0x8d \ 0x2a 0x0 0x5 0x3 0xf3 0xff 0xfe 0xff \ 0xff 0xfe 0xff 0xfd 0xff 0xf9 0xff 0xce \ 0x15 0x1 0x0 0x0 0x0 0x0 0x1 0x0 \ 0x1a 0xc3 0xff 0xff 0xf9 0xff 0xfd 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xfb 0xfd 0xb1 0x5a 0x4 0x0 \ 0x1 0x0 0x2 0x7 0xff 0xf9 0xfe 0xfe \ 0xff 0xfd 0xfe 0xff 0xfe 0xff 0xd3 0x0 \ 0x2 0x0 0x18 0x64 0x75 0x62 0x1e 0x0 \ 0x3 0x8 0xd0 0xff 0xfa 0xfc 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xfe 0x1e 0x0 0x0 0x0 0x0 \ 0x12 0x6 0x0 0x0 0xfb 0xff 0xff 0xff \ 0xff 0xfd 0xff 0xfe 0xff 0xff 0x2c 0xe \ 0x0 0x4c 0xf0 0xff 0xff 0xfc 0xf1 0x46 \ 0x0 0x0 0x44 0xff 0xff 0xfa 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xfd 0x2 0x0 0x2 0x47 0xaa \ 0xf8 0x0 0x0 0x7 0xff 0xfd 0xff 0xfc \ 0xfd 0xff 0xff 0xfe 0xff 0xc8 0x0 0x0 \ 0x1a 0xf8 0xfe 0xfa 0xff 0xff 0xfc 0xf5 \ 0x16 0x0 0x0 0xce 0xfc 0xff 0xfb 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0x28 0x8c 0xe4 0xfc 0xff \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xff 0xfd 0xfd 0xff 0xff 0x78 0x0 0x1 \ 0x7f 0xff 0xfb 0xff 0xff 0xff 0xfd 0xff \ 0x78 0x3 0x0 0x80 0xff 0xff 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xfd 0xf8 0xff 0xff 0xfa 0xfe \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xfe 0xff 0xff 0xff 0xfe 0x4f 0x0 0x1 \ 0xb6 0xff 0xfc 0xff 0xfe 0xff 0xff 0xfb \ 0xb3 0x5 0x0 0x50 0xfc 0xfd 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfb 0xff 0xfe 0xff 0xf8 0xff 0xfd \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xfc 0xff 0xfe 0xff 0xff 0x22 0x0 0x1 \ 0xe7 0xff 0xfb 0xff 0xfc 0xfe 0xff 0xfc \ 0xe2 0x0 0x1 0x28 0xfe 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xfe 0xff 0xf8 0xfc 0xff 0xff 0xfd \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xfe 0xff 0xfb 0xfd 0xff 0xd 0x2 0x1 \ 0xf9 0xfb 0xfe 0xff 0xfd 0xfc 0xff 0xff \ 0xf3 0x0 0x1 0x19 0xfe 0xff 0xfb 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xf7 0xff 0xff 0xfc 0xfc 0xff \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xff 0xff 0xfc 0xfd 0xff 0x8 0x2 0x1 \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xfd 0xff \ 0xfe 0x0 0x0 0xd 0xfc 0xfd 0xfc 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfa 0xff 0xfb \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xfd 0xff 0xff 0xff 0xfd 0x4 0x0 0x2 \ 0xff 0xff 0xff 0xfb 0xff 0xff 0xfb 0xff \ 0xff 0x1 0x0 0x3 0xff 0xf9 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf7 0xff 0xff 0xfa 0xff 0xfb 0xff \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xfe 0xff 0xff 0xff 0xfd 0x0 0x1 0x3 \ 0xfd 0xff 0xfc 0xfb 0xff 0xff 0xfe 0xff \ 0xfc 0x0 0x0 0x2 0xff 0xfd 0xff 0xfc \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xff 0xfe 0xfe 0xff 0xfb 0xff \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xff 0xfe 0xfc 0xff 0xff 0x0 0x4 0x3 \ 0xfd 0xff 0xfe 0xff 0xfe 0xff 0xff 0xff \ 0xfc 0x4 0x0 0x4 0xfc 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xff 0xff 0xff 0xfe 0xfd 0x3 0x0 0x4 \ 0xfc 0xff 0xff 0xff 0xfe 0xff 0xfb 0xff \ 0xff 0x0 0x2 0x3 0xff 0xfc 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xff 0xfb 0xff 0xff 0xff 0x6 0x2 0x1 \ 0xff 0xf6 0xff 0xfb 0xff 0xff 0xff 0xff \ 0xfb 0x0 0x0 0xd 0xfb 0xff 0xfe 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xff 0xfc 0xff 0xff 0xff 0x10 0x3 0x0 \ 0xf0 0xff 0xff 0xff 0xff 0xfe 0xff 0xfb \ 0xf4 0x3 0x2 0x1c 0xff 0xf8 0xff 0xf8 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xfe 0xff 0xff 0xfd 0xfd 0x27 0x3 0x0 \ 0xdd 0xff 0xf6 0xfc 0xfe 0xff 0xff 0xff \ 0xd7 0x1 0x0 0x32 0xfd 0xfc 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xfc 0xff 0xfd 0xfd 0xff 0x4e 0x0 0x6 \ 0xb5 0xfb 0xff 0xff 0xff 0xfa 0xf6 0xff \ 0xb7 0x0 0x7 0x4c 0xff 0xff 0xf7 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xff 0xff 0xfb 0xff 0xff 0x83 0x0 0x0 \ 0x70 0xff 0xfb 0xff 0xfa 0xfd 0xff 0xf9 \ 0x6d 0x3 0x0 0x87 0xff 0xfb 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xff 0xfe 0xff 0xff 0xff 0xc8 0x13 0x0 \ 0x11 0xec 0xff 0xf8 0xff 0xff 0xff 0xf1 \ 0x10 0x5 0x0 0xd8 0xf8 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ 0xfd 0xfe 0xff 0xfb 0xfe 0xff 0x39 0x1 \ 0x0 0x3d 0xef 0xff 0xff 0xfe 0xef 0x45 \ 0x0 0x1 0x46 0xff 0xff 0xfc 0xfe 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfd 0x0 0x2 0x1 0xff 0xfc 0xff 0xfc \ 0xfd 0xff 0xff 0xfe 0xff 0xff 0xd8 0xe \ 0x5 0x0 0x19 0x5f 0x78 0x66 0x19 0x0 \ 0x0 0x13 0xd6 0xf9 0xff 0xfe 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0x0 0x3 0x0 0xfe 0xfd 0xff 0xff \ 0xfe 0xff 0xff 0xfb 0xff 0xfc 0xff 0xc9 \ 0x1a 0x1 0x0 0x1 0x0 0x6 0x0 0x4 \ 0x1b 0xc7 0xff 0xff 0xfd 0xf9 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfb 0x0 0x1 0x5 0xff 0xff 0xfd 0xff \ 0xff 0xfe 0xfd 0xfa 0xff 0xff 0xff 0xff \ 0xf5 0x95 0x44 0x1b 0x6 0xb 0x3e 0x8e \ 0xfc 0xfd 0xff 0xff 0xfc 0xff 0xff 0xfb \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfd 0xff 0xfc 0xfe 0xff 0xff \ 0xff 0xfc 0xff 0xff 0xfb 0xfd 0xfb 0xfc \ 0xff 0xfe 0xff 0xf7 0xfd 0xff 0xff 0xfd \ 0xfa 0xfa 0xff 0xf6 0xff 0xfc 0xf9 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfe 0xfd 0xf9 0xfd 0xff 0xff 0xfe 0xfb \ 0xff 0xfa 0xff 0xff 0xfb 0xfc 0xff 0xff \ 0xfe 0xfa 0xff 0xfe 0xff 0xfb 0xfd 0xff \ 0xff 0xff 0xfc 0xff 0xff 0xf9 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfb 0xff 0xff 0xff 0xff 0xf6 0xff 0xfe \ 0xff 0xff 0xfb 0xff 0xff 0xff 0xfd 0xfa \ 0xff 0xff 0xff 0xfc 0xff 0xfb 0xff 0xff \ 0xfa 0xfe 0xff 0xfd 0xfc 0xff 0xfe 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfd 0xfe 0xfe 0xf8 0xf8 0xff 0xfb 0xfe \ 0xfd 0xff 0xff 0xfa 0xfc 0xff 0xff 0xff \ 0xfc 0xfc 0xfd 0xff 0xff 0xff 0xff 0xfc \ 0xff 0xff 0xff 0xfe 0xff 0xf6 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xff 0xff 0xfc 0xfe 0xff \ 0xff 0xf4 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xfe 0xfb 0xff 0xff \ 0xff 0xfc 0xff 0xff 0xfd 0xff 0xff 0xfd \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs4 + ' ' face11.image = '80 80 1 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xfd 0xff 0xfe 0xff 0xf9 0xff \ ' + ffs + ' \ 0xfd 0xff 0xff 0xff 0xff 0xff 0xff 0xfc \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfb 0xff 0xf9 0xfe 0xff 0xff 0xff \ ' + ffs + ' \ 0xfe 0xff 0xff 0xff 0xfb 0xfb 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfd 0xfa 0xff 0xff 0xfa 0xff 0xfc \ ' + ffs + ' \ 0xff 0xff 0xfc 0xfd 0xff 0xff 0xfe 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfd 0xff 0xff 0xfd 0xff 0xfd 0xff 0xfc \ ' + ffs + ' \ 0xfd 0xfd 0xff 0xff 0xff 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfc 0xfd 0xfd 0xff 0xff 0xf5 0xff \ ' + ffs + ' \ 0xff 0xff 0xfc 0xfd 0xfd 0xfe 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfc 0xff 0xfe 0xfe 0xff 0xff 0xff 0xfb \ ' + ffs + ' \ 0xfd 0xff 0xff 0xff 0xff 0xff 0xfe 0xfb \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xf8 0xff 0xff 0xfe 0xff 0xff 0xfd \ ' + ffs + ' \ 0xff 0xff 0xff 0xfb 0xfb 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfd 0xff 0xc7 0x63 0x11 0xff 0xf8 0xff \ ' + ffs + ' \ 0xff 0xfd 0xfd 0xff 0xfe 0xc9 0x65 0x10 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfc 0xff 0xff 0xfb 0xeb \ 0x8d 0x26 0x0 0x2 0x5 0xff 0xfe 0xfe \ 0xff 0xff 0xff 0xff 0xfe 0xfb 0xff 0xfe \ 0xfc 0xff 0xe5 0x90 0x27 0x0 0x5 0x2 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfa 0xff 0xff 0xfb 0xad 0x53 0x6 \ 0x1 0x0 0x0 0x0 0x2 0xff 0xfc 0xff \ 0xfe 0xfe 0xff 0xfd 0xff 0xff 0xff 0xfc \ 0xb7 0x48 0x5 0x3 0x0 0x2 0x0 0x3 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xf6 0x18 0x2 0x0 0x1 \ 0x3 0xb 0x6 0xa 0x0 0xff 0xff 0xf8 \ 0xff 0xfb 0xfa 0xff 0xfc 0xff 0xf9 0x19 \ 0x3 0x3 0x5 0x0 0xe 0x0 0x6 0x1 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xf9 0xff 0xf9 0xff 0x7 0x0 0x5 0x45 \ 0xa9 0xf8 0x0 0x0 0x0 0xfb 0xff 0xfc \ 0xff 0xf9 0xff 0xff 0xfc 0xfd 0xff 0x1 \ 0x0 0x2 0x4b 0xa7 0xfe 0x0 0x0 0xb \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfd 0xfb 0xfb 0x2d 0x89 0xe0 0xff \ 0xfc 0xff 0x4 0x0 0xa 0xfe 0xf8 0xff \ 0xff 0xff 0xf3 0xff 0xff 0xfc 0xff 0x28 \ 0x8e 0xe9 0xf7 0xff 0xfb 0x5 0x2 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfd 0xff 0xff 0xff \ 0xff 0xfe 0x0 0x2 0x0 0xff 0xfd 0xfd \ 0xfe 0xff 0xff 0xff 0xfb 0xfa 0xfd 0xff \ 0xfa 0xff 0xff 0xfc 0xff 0x0 0x5 0x3 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfc 0xfb 0xff 0xff 0xfa 0xff 0xff 0xfb \ 0xff 0xfe 0x0 0x1 0xc 0xf3 0xff 0xfe \ 0xfd 0xfd 0xfe 0xff 0xfd 0xff 0xff 0xf9 \ 0xff 0xfa 0xfe 0xff 0xff 0x4 0x0 0x1 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xf9 0xff 0xfc 0xff 0xff \ 0xfc 0xff 0x2 0x2 0x0 0xff 0xfe 0xff \ 0xff 0xff 0xff 0xf9 0xff 0xfd 0xfb 0xff \ 0xff 0xff 0xfc 0xff 0xff 0x0 0x0 0x8 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0x0 0x0 0x3 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0x0 0x0 0x3 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0x0 0x0 0x3 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0x0 0x0 0x3 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0x0 0x0 0x3 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0x0 0x0 0x3 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0x0 0x0 0x3 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0x0 0x0 0x3 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfb 0xff 0x0 0x4 0x0 0xff 0xfc 0xfe \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0x0 0x0 0x4 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfd 0xfc 0x8 0x1 0x2 0xfa 0xff 0xff \ ' + ffs + ' \ 0xff 0xfa 0xff 0xfd 0xfa 0x1 0x2 0x9 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xf7 0x0 0x3 0x2 0xff 0xfb 0xfb \ ' + ffs + ' \ 0xfe 0xff 0xfa 0xff 0xfa 0x3 0x4 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfb 0xff 0x3 0x0 0x0 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xfb 0xfd 0xff 0xff 0x0 0x7 0x9 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfe 0xff 0x0 0x5 0x8 0xfd 0xfa 0xfd \ ' + ffs + ' \ 0xfd 0xff 0xff 0xfa 0xfe 0x5 0x0 0x1 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x0 0x6 0xfc 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xf7 0xff 0xff 0x2 0x0 0x1 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xf7 0x5 0x7 0x0 0xff 0xfc 0xfa \ ' + ffs + ' \ 0xff 0xfa 0xff 0xff 0xf9 0x0 0x3 0x1 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfe 0xfc 0xff 0xfe 0xfc 0xff \ ' + ffs + ' \ 0xfd 0xff 0xfe 0xfd 0xff 0xff 0xf9 0xff \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' ' face12.image = '80 80 1 \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfb 0xff 0xfb 0xff 0xff 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xfa 0xff 0xfe 0xfe 0xfe 0xff \ 0xff 0xff 0xf8 0xff 0xfc 0xff 0xf6 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xfe 0xfc 0xff 0xf7 0xff \ ' + ffs + ' \ 0xfb 0xfe 0xff 0xff 0xff 0xf8 0xff 0xfb \ 0xfc 0xfe 0xff 0xff 0xff 0xf6 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfc 0xff 0xff 0xfd 0xff 0xfb \ ' + ffs + ' \ 0xff 0xff 0xff 0xf3 0xfe 0xff 0xfa 0xff \ 0xff 0xff 0xfe 0xff 0xfd 0xff 0xff 0xf7 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfe 0xf8 0xff 0xfd 0xfc 0xfe 0xfe 0xff \ ' + ffs + ' \ 0xfe 0xf6 0xfe 0xff 0xfb 0xff 0xf9 0xff \ 0xfd 0xf9 0xfe 0xff 0xff 0xfb 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfd 0xff 0xfb 0xfd 0xff 0xff 0xf9 0xfd \ ' + ffs + ' \ 0xff 0xff 0xfa 0xff 0xff 0xff 0xff 0xfa \ 0xff 0xff 0xff 0xfa 0xfc 0xff 0xfa 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfe 0xfa 0xff 0xfe 0xff 0xf8 0xff 0xff \ ' + ffs + ' \ 0xfb 0xf9 0xff 0xfc 0xff 0xfc 0xfe 0xff \ 0xfc 0xfb 0xff 0xfc 0xff 0xff 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfc 0xff 0xfa 0xfe \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfd 0xfe 0xff 0xff \ 0xff 0xff 0xf8 0xff 0xf9 0xf9 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfb 0x0 0x2 0x0 0x2 0x4 0x0 \ 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 \ 0x0 0xff 0xfb 0xfd 0xff 0xfe 0xff 0xfe \ 0xfa 0xff 0xff 0x2 0x4 0x0 0xfe 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x0 0x0 0x7 0x0 \ 0x1 0x0 0x1 0x0 0x4 0x0 0x2 0x0 \ 0x0 0xff 0xff 0xfc 0xfd 0xff 0xff 0xfc \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfd 0xff 0x86 0x82 0x88 0x85 0x80 0x82 \ 0x81 0x85 0x86 0x84 0x7c 0x5d 0x0 0x0 \ 0x51 0xf5 0xfe 0xff 0xff 0xfa 0xfb 0xff \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfc 0xf9 0xfe 0xff 0xfa 0xff \ 0xff 0xfa 0xfd 0xff 0xde 0x17 0x8 0x32 \ 0xf1 0xff 0xfe 0xfc 0xff 0xff 0xfd 0xff \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfc 0xfc 0xff 0xff 0xfc 0xff 0xff 0xff \ 0xff 0xfb 0xff 0xe3 0x26 0x0 0x1b 0xe6 \ 0xff 0xf7 0xfc 0xfc 0xfc 0xff 0xff 0xff \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfb 0xff 0xfb 0xfa 0xfe 0xf8 \ 0xff 0xff 0xee 0x23 0x2 0x12 0xd4 0xff \ 0xfd 0xfd 0xff 0xff 0xfd 0xfc 0xff 0xfd \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xfc 0xff 0xff 0xff 0xff \ 0xfd 0xeb 0x40 0xd 0x0 0xbf 0xfc 0xff \ 0xff 0xfd 0xf7 0xfd 0xfc 0xff 0xff 0xff \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xf9 0xff 0xfc 0xfc 0xff \ 0xfb 0x48 0x0 0x0 0xa6 0xfb 0xff 0xff \ 0xff 0xff 0xff 0xff 0xff 0xfc 0xff 0xfe \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfc 0xff 0xfc 0xff 0xff 0xfe 0xfe 0xfd \ 0x4f 0x0 0x2 0x7d 0xff 0xfc 0xff 0xff \ 0xff 0xfc 0xff 0xfb 0xff 0xfe 0xff 0xfd \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfc 0xff 0xff 0xff 0xfb 0xff 0x63 \ 0x0 0x0 0x62 0xfe 0xff 0xff 0xf9 0xff \ 0xfe 0xfe 0xfd 0xff 0xff 0xff 0xff 0xfa \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfa 0xff 0xfd 0xfc 0xff 0xfe 0x8d 0x0 \ 0x1 0x41 0xf7 0xff 0xff 0xfc 0xff 0xf8 \ 0xff 0xff 0xff 0xfe 0xfa 0xff 0xfe 0xff \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfe 0xfe 0xff 0xb4 0x0 0x0 \ 0x27 0xf0 0xff 0xfc 0xfc 0xff 0xff 0xff \ 0xfc 0xfd 0xfe 0xff 0xfe 0xff 0xfa 0xff \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfd 0xff 0xff 0xe3 0x17 0x0 0x13 \ 0xd4 0xff 0xff 0xfb 0xfe 0xfc 0xfe 0xfc \ 0xff 0xff 0xfd 0xff 0xfd 0xff 0xfb 0xff \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfb 0xff 0xff 0x50 0x2 0x2 0x90 \ 0xff 0xfb 0xf6 0xff 0xff 0xff 0xff 0xff \ 0xf7 0xff 0xfb 0xff 0xfc 0xfb 0xff 0xff \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfe 0xff 0xfc 0xc5 0x6 0x0 0x3d 0xff \ 0xff 0xff 0xff 0xfb 0xfe 0xf7 0xff 0xfd \ 0xff 0xff 0xfe 0xff 0xff 0xfe 0xff 0xfa \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0x65 0x0 0x0 0xaa 0xf6 \ 0xff 0xff 0xf9 0xff 0xff 0xf9 0xff 0xfd \ 0xff 0xf3 0xff 0xfc 0xfc 0xff 0xff 0xfe \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfd 0xff 0xff 0x1f 0x4 0x0 0xe2 0xff \ 0xff 0xfd 0xff 0xff 0xfd 0xff 0xf9 0xb7 \ 0xb1 0xb4 0xff 0xff 0xff 0xff 0xfc 0xff \ 0xff 0xff 0xff 0x3 0x1 0x0 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfc 0x7 0x3 0x3 0xf5 0xfe \ 0xf9 0xff 0xff 0xf8 0xff 0xfd 0xf3 0x1 \ 0x0 0x15 0xfd 0xff 0xff 0xfe 0xff 0xfe \ 0xff 0xfb 0xff 0x8 0x0 0x0 0xff 0xfe \ 0xfe 0xff 0xfd 0xfa 0xff 0xff 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf8 0xff 0x1a 0x0 0x4 0xd8 0xff \ 0xff 0xff 0xff 0xfe 0xff 0xfb 0xb9 0x2 \ 0x9 0x33 0xff 0xfd 0xfe 0xff 0xfb 0xff \ 0xfe 0xff 0xfe 0x0 0x4 0x1 0xfb 0xff \ 0xff 0xe2 0x8e 0x30 0xfb 0xfc 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0x48 0x3 0x0 0x6f 0xfe \ 0xfe 0xfb 0xff 0xff 0xfd 0xff 0x4c 0x0 \ 0x0 0x8a 0xff 0xfd 0xfe 0xfc 0xff 0xfb \ 0xfe 0xfc 0xff 0x0 0x8 0x1 0xfa 0xaa \ 0x4b 0x1 0x0 0x6 0xff 0xf7 0xff 0xfa \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfb 0xfe 0xfb 0x9b 0x4 0x6 0x0 0x9f \ 0xff 0xf7 0xff 0xfb 0xf3 0x6d 0x0 0x3 \ 0x1b 0xf2 0xf9 0xf6 0xff 0xfc 0xfc 0xff \ 0xff 0xfc 0xff 0x1 0x0 0x0 0xd 0x0 \ 0x0 0x5 0x4 0x11 0xfb 0xff 0xfc 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0x4d 0x0 0x2 0x0 \ 0x2f 0x78 0x80 0x5d 0x1a 0xc 0x0 0x5 \ 0xaf 0xfd 0xff 0xff 0xfa 0xff 0xff 0xfe \ 0xf9 0xff 0xff 0x6 0x0 0x0 0x4 0x1 \ 0x3 0x51 0xb2 0xff 0xff 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfb 0xff 0xfb 0xfc 0xf0 0x57 0x2 0x0 \ 0x0 0x0 0x0 0x4 0x0 0x0 0x19 0xb0 \ 0xff 0xfc 0xff 0xfb 0xff 0xff 0xfa 0xff \ 0xff 0xf6 0xff 0x1 0x0 0x0 0x2b 0x8a \ 0xec 0xfe 0xff 0xff 0xfb 0xfc 0xfc 0xfa \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xff 0xfc 0xff 0xc5 0x5d \ 0x2c 0x8 0x3 0x17 0x48 0x91 0xec 0xff \ 0xff 0xfc 0xff 0xfd 0xff 0xfa 0xff 0xfd \ 0xff 0xff 0xff 0xd 0x62 0xc7 0xff 0xff \ 0xfc 0xfd 0xfa 0xff 0xfc 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xff 0xff 0xfd 0xfd 0xff \ 0xfd 0xff 0xff 0xff 0xfa 0xff 0xff 0xff \ 0xfb 0xff 0xfe 0xff 0xfe 0xfe 0xff 0xfd \ 0xfc 0xff 0xf6 0xff 0xff 0xfa 0xff 0xff \ 0xff 0xfe 0xfe 0xff 0xff 0xfe 0xff 0xff \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' ' face13.image = '80 80 1 \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfd 0xff 0xff 0xfb 0xff 0xff 0xfc \ 0xff 0xff 0xfc 0xff 0xfe 0xfd 0xff 0xfd \ 0xfe 0xff 0xfa 0xfe 0xff 0xfc 0xfd 0xff \ 0xff 0xff 0xfe 0xff 0xfc 0xfb 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfb 0xff 0xff 0xff 0xfe 0xfc 0xff 0xff \ 0xfe 0xfc 0xff 0xf8 0xff 0xff 0xf8 0xff \ 0xff 0xfd 0xff 0xfd 0xfe 0xff 0xfd 0xf8 \ 0xff 0xff 0xfe 0xff 0xff 0xff 0xf4 0xfb \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfe 0xff 0xf6 0xfd 0xff 0xff 0xff 0xfe \ 0xfe 0xfe 0xff 0xfc 0xff 0xfe 0xfb 0xfc \ 0xfd 0xfe 0xff 0xff 0xfd 0xff 0xff 0xff \ 0xfe 0xfb 0xff 0xfb 0xf8 0xf6 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xf9 0x7 0x0 0x0 0xf8 0xff 0xff \ 0xff 0xfe 0xfe 0xff 0xfb 0xfd 0xff 0xff \ 0xfd 0xe0 0x84 0x30 0x17 0x0 0xd 0x35 \ 0x82 0xdf 0xff 0xff 0xff 0xfe 0xff 0xfa \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfd 0x0 0x1 0xb 0xff 0xff 0xfa \ 0xff 0xfa 0xff 0xff 0xfe 0xff 0xff 0xf3 \ 0x81 0x8 0x0 0x1 0x1 0x2 0x0 0x2 \ 0x0 0xb 0x87 0xfe 0xff 0xfa 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x0 0x0 0xfd 0xff 0xff \ 0xff 0xfd 0xfe 0xff 0xfe 0xff 0xf9 0x6e \ 0x0 0x3 0x4 0x29 0x6d 0x80 0x71 0x2c \ 0x2 0x1 0x0 0x7d 0xff 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfa 0xff 0x3 0x3 0x2 0xff 0xfe 0xfd \ 0xff 0xff 0xfb 0xff 0xfd 0xfd 0xb5 0x0 \ 0x3 0x0 0xa2 0xff 0xff 0xff 0xff 0xfb \ 0x9f 0xc 0x0 0x0 0xca 0xfe 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfc 0x2 0x0 0x8 0xf9 0xfd 0xff \ 0xff 0xfd 0xff 0xfe 0xff 0xff 0x53 0x0 \ 0x0 0x84 0xfe 0xff 0xfd 0xfb 0xff 0xff \ 0xff 0x7a 0x2 0x0 0x64 0xff 0xfb 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ 0xff 0xff 0xfd 0xff 0xff 0xfc 0x19 0x1 \ 0x0 0xe7 0xfd 0xfe 0xff 0xfc 0xff 0xff \ 0xfd 0xdc 0x0 0x0 0x26 0xff 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ 0xfd 0xff 0xff 0xff 0xfd 0xff 0x7f 0x78 \ 0x79 0xfd 0xff 0xfb 0xff 0xfc 0xfd 0xff \ 0xff 0xf8 0x0 0x5 0x7 0xff 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ 0xff 0xff 0xfe 0xfc 0xfd 0xff 0xf9 0xff \ 0xff 0xff 0xff 0xff 0xfc 0xff 0xff 0xf8 \ 0xff 0xe9 0x0 0x5 0x1b 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xfc 0xf8 0xff 0xfe \ 0xff 0xf9 0xfd 0xff 0xff 0xfb 0xf7 0xff \ 0xff 0xaf 0x2 0x0 0x51 0xfe 0xf9 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ 0xfb 0xfc 0xfe 0xff 0xff 0xff 0xff 0xfe \ 0xfe 0xff 0xff 0xfd 0xff 0xff 0xff 0xfe \ 0xe4 0x25 0x0 0x0 0xc8 0xff 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ 0xff 0xff 0xfc 0xfb 0xfd 0xfd 0xfd 0xff \ 0xfc 0xff 0xff 0xff 0xf9 0xf4 0xd1 0x83 \ 0x13 0x0 0x9 0x6d 0xf9 0xfa 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ 0xfc 0xff 0xff 0xff 0xff 0xfe 0xff 0xfd \ 0xff 0xf6 0x7f 0x3 0x0 0x1 0x4 0x0 \ 0x3 0x1e 0x90 0xfd 0xff 0xff 0xfa 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x0 0x1 0x3 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xfd 0xfb 0xff 0xfd \ 0xfd 0xff 0x89 0x0 0x6 0x0 0x0 0x1 \ 0x2e 0xe1 0xff 0xff 0xfa 0xff 0xfb 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xfb 0xff 0xfa 0xff 0xff \ 0xff 0xfb 0x2 0x4 0x2 0xfb 0xff 0xff \ 0xfe 0xff 0xff 0xfd 0xfe 0xff 0xfb 0xfe \ 0xff 0xfe 0xc3 0x84 0x7e 0x72 0x36 0x0 \ 0x0 0x15 0xc3 0xfe 0xfd 0xff 0xfd 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xff 0xfe 0xfa 0xff 0xff 0xfe 0xff \ 0xff 0xff 0x0 0x0 0x0 0xff 0xff 0xfd \ 0xfe 0xfd 0xff 0xff 0xff 0xff 0xff 0xff \ 0xfb 0xff 0xfd 0xff 0xff 0xfa 0xff 0xb3 \ 0xd 0x0 0xf 0xeb 0xff 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xff 0xff 0xfb 0xff 0xff \ 0xff 0xfa 0x4 0x0 0x6 0xff 0xf6 0xff \ 0xff 0xfc 0xff 0xfe 0xff 0xfa 0xff 0xfa \ 0xff 0xff 0xfe 0xf9 0xff 0xfc 0xff 0xfa \ 0x87 0x0 0x9 0x74 0xff 0xf7 0xff 0xfb \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfb 0xfe 0xf9 0xff 0xfd 0xfc \ 0xf8 0xff 0x0 0x5 0x0 0xff 0xff 0xff \ 0xfe 0xfe 0xff 0xfd 0xfe 0xff 0xff 0xff \ 0xf9 0xff 0xff 0xff 0xfc 0xff 0xfa 0xff \ 0xe4 0x4 0x0 0x27 0xfd 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf9 0xff 0xff 0xff 0xfe 0xff 0xff \ 0xff 0xff 0x0 0x0 0xa 0xfe 0xf9 0xff \ 0xfd 0xfd 0xff 0xfd 0xff 0xff 0x8a 0x8c \ 0x90 0xff 0xfa 0xff 0xfb 0xff 0xff 0xfc \ 0xff 0x0 0x0 0xa 0xff 0xfa 0xfc 0xf9 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfb 0xff 0xff 0xfd 0x2c 0x86 0xdd 0xff \ 0xfd 0xf7 0x0 0x0 0x1 0xfc 0xff 0xfc \ 0xff 0xff 0xfb 0xff 0xff 0xfd 0x15 0x1 \ 0x0 0xe4 0xff 0xfd 0xff 0xff 0xf9 0xfe \ 0xea 0x1 0x6 0x11 0xfd 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xf3 0xff 0x6 0x0 0x7 0x47 \ 0xa7 0xfd 0x4 0x0 0x1 0xff 0xfc 0xfb \ 0xfd 0xff 0xff 0xff 0xfc 0xfe 0x54 0x4 \ 0x4 0x8e 0xfe 0xff 0xf9 0xff 0xff 0xff \ 0xa2 0x6 0x0 0x4a 0xff 0xf5 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfc 0xff 0xff 0x19 0x2 0x0 0x0 \ 0x0 0xc 0x0 0x0 0x5 0xff 0xff 0xff \ 0xff 0xfa 0xfe 0xff 0xff 0xff 0xb9 0x0 \ 0x0 0x9 0xbb 0xfd 0xff 0xff 0xff 0xdb \ 0x1c 0x0 0x4 0x9c 0xfd 0xff 0xff 0xfa \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xff 0xf4 0xb7 0x53 0x3 \ 0x0 0x4 0x0 0x0 0x4 0xff 0xfe 0xff \ 0xff 0xf6 0xff 0xff 0xfd 0xff 0xff 0x6c \ 0x0 0x3 0x0 0x3c 0x78 0x79 0x54 0x6 \ 0x1 0x1 0x3a 0xfc 0xfe 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xfc 0xfd 0xff 0xff 0xf9 0xed \ 0x8f 0x24 0x3 0x0 0x5 0xfa 0xff 0xff \ 0xfd 0xff 0xff 0xfb 0xff 0xfb 0xff 0xf7 \ 0x74 0x0 0x2 0x8 0x0 0x5 0x0 0x4 \ 0x3 0x3d 0xef 0xff 0xff 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xff 0xfe 0xff 0xff 0xfe \ 0xff 0xff 0xc7 0x68 0x16 0xfe 0xff 0xfa \ 0xff 0xff 0xfc 0xff 0xff 0xff 0xf9 0xff \ 0xff 0xcd 0x65 0x24 0x11 0x8 0x24 0x52 \ 0xb2 0xff 0xfc 0xfc 0xfe 0xff 0xf8 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfd 0xfb 0xfd 0xff 0xff 0xff \ 0xfb 0xfe 0xff 0xfb 0xfb 0xff 0xfc 0xff \ 0xff 0xfb 0xff 0xff 0xf4 0xff 0xfd 0xf8 \ 0xfe 0xff 0xfc 0xff 0xfb 0xf6 0xff 0xfb \ 0xff 0xf4 0xff 0xff 0xff 0xf7 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfb 0xff 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xff 0xf9 0xff 0xfd 0xf7 0xff 0xfb \ 0xff 0xff 0xfd 0xfe 0xfd 0xfe 0xff 0xff \ 0xff 0xfc 0xff 0xff 0xff 0xff 0xfc 0xff \ 0xff 0xff 0xf9 0xff 0xff 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfd 0xfc 0xfd 0xff 0xff \ 0xff 0xf7 0xfc 0xff 0xff 0xfb 0xff 0xfd \ 0xfd 0xff 0xfb 0xfe 0xff 0xfe 0xfc 0xfb \ 0xfc 0xff 0xfd 0xfc 0xff 0xff 0xff 0xff \ 0xf7 0xff 0xff 0xf7 0xfc 0xff 0xf7 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfd 0xfe 0xff 0xff 0xff 0xfe 0xfb \ 0xff 0xff 0xff 0xfc 0xfd 0xff 0xff 0xff \ 0xfb 0xff 0xff 0xff 0xfa 0xfd 0xff 0xff \ 0xff 0xfd 0xff 0xff 0xff 0xff 0xf5 0xff \ 0xff 0xff 0xfb 0xff 0xff 0xff 0xfa 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfe 0xfd 0xfd 0xff 0xff \ 0xff 0xff 0xff 0xfe 0xfe 0xff 0xff 0xff \ 0xff 0xfe 0xfb 0xff 0xfe 0xff 0xfb 0xff \ 0xfa 0xff 0xff 0xfe 0xfa 0xff 0xff 0xfa \ 0xfc 0xff 0xff 0xff 0xfe 0xfe 0xff 0xff \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs + ' ' face14.image = '80 80 1 \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfe 0xfe 0xfe 0xff 0xf9 0xff 0xff \ 0xfc 0xff 0xfb 0xff 0xfd 0xfe 0xff 0xff \ ' + ffs + ' \ 0xfe 0xff 0xfc 0xff 0xfa 0xff 0xff 0xfc \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfb 0xff 0xf9 0xff 0xff 0xff 0xfe 0xfb \ 0xff 0xfd 0xfd 0xff 0xff 0xfa 0xff 0xfb \ ' + ffs + ' \ 0xf9 0xff 0xfe 0xff 0xff 0xfb 0xfd 0xfc \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfb 0xff 0xff 0xf3 0xff 0xff 0xff \ 0xfe 0xff 0xff 0xfc 0xfe 0xff 0xf7 0xff \ ' + ffs + ' \ 0xff 0xfa 0xff 0xf7 0xff 0xfe 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfa 0xff 0xfc 0xff 0xfe 0xf6 0xff \ 0xff 0xff 0xf9 0xff 0xff 0xff 0xff 0xfc \ ' + ffs + ' \ 0xfd 0xff 0xff 0xfe 0xfc 0xff 0xfa 0xf8 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xf9 0xff 0xff 0xff 0xff 0xf9 0xff 0xff \ 0xff 0xf9 0xff 0xff 0xf8 0xfa 0xff 0xff \ ' + ffs + ' \ 0xff 0xfe 0xfc 0xff 0xff 0xf6 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfd 0xfc 0xff 0xfb 0xff 0xf9 0xfc \ 0xff 0xff 0xfc 0xff 0xff 0xff 0xf8 0xfe \ ' + ffs + ' \ 0xff 0xf8 0xff 0xfb 0xff 0xff 0xff 0xfc \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfe 0xfd 0xff 0xff 0xff 0xff \ 0xfa 0xfd 0xfa 0xfe 0xff 0xfd 0xff 0xfe \ ' + ffs + ' \ 0xf9 0xff 0xff 0xfc 0xff 0xfd 0xfc 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xff 0xfd 0xfb 0xff 0x0 \ 0x0 0x4 0xff 0xfd 0xff 0xfd 0xfb 0xff \ ' + ffs + ' \ 0xff 0xfc 0xfb 0xff 0xfd 0x0 0x7 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0xff 0xff 0x0 \ 0x0 0x2 0xfd 0xff 0xff 0xfd 0xff 0xff \ 0xfd 0xff 0xf9 0xfe 0xff 0xfd 0xff 0xff \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfc 0xfc 0xff 0xfc 0xfc 0xff 0xff 0x4 \ 0x1 0x7 0xfe 0xff 0xfd 0xff 0xf9 0xff \ 0xff 0xfc 0xff 0xff 0xfe 0xff 0xff 0xfd \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfc 0xff 0xfe 0x5 \ 0x0 0x1 0xf9 0xff 0xfe 0xfd 0xff 0xff \ 0xff 0xfa 0xff 0xff 0xfb 0xfa 0xfc 0xff \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfd 0xfb 0xff 0xfe 0xff 0xf8 0x5 \ 0x0 0x3 0xfc 0xfd 0xff 0xfb 0xff 0xfc \ 0xf8 0xff 0xff 0xf9 0xff 0xff 0xff 0xf6 \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfd 0xff 0xf6 0x82 0x85 0x84 0x4 \ 0x0 0x0 0x88 0x81 0x7f 0x87 0x7d 0x88 \ 0x84 0x84 0x85 0x7e 0x8a 0xf4 0xff 0xff \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xff 0x2 0x3 0x0 0x3 \ 0x2 0x6 0x0 0x5 0x0 0x5 0x1 0x0 \ 0x4 0x1 0x0 0x1 0x4 0xfe 0xfb 0xfc \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfa 0xff 0xfe 0xf3 0x2 0x0 0x8 0x0 \ 0x2 0x0 0x5 0x5 0x0 0x0 0x8 0x0 \ 0x0 0x0 0x6 0x1 0x26 0xff 0xff 0xff \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfb 0xff 0xff 0xfc 0xff 0xf8 0x5 \ 0x0 0x4 0xfe 0xfd 0xff 0xff 0xfa 0xff \ 0xfe 0x39 0x0 0x0 0xc6 0xfa 0xff 0xfe \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xff 0x3 \ 0x0 0x0 0xff 0xff 0xfa 0xff 0xff 0xfe \ 0x8f 0x0 0x0 0x6f 0xfc 0xfe 0xff 0xfe \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xff 0x3 \ 0x9 0x0 0xfa 0xf8 0xff 0xff 0xf9 0xe1 \ 0xd 0x1 0x22 0xee 0xff 0xff 0xff 0xfe \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xff 0x3 \ 0x0 0x0 0xff 0xff 0xfc 0xff 0xff 0x47 \ 0x0 0x1 0xb7 0xfd 0xff 0xfd 0xff 0xfc \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xff 0x3 \ 0x2 0x3 0xfc 0xff 0xfc 0xfe 0xa3 0x0 \ 0x6 0x57 0xfc 0xff 0xff 0xf6 0xff 0xff \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xff 0x3 \ 0x0 0x0 0xfd 0xff 0xff 0xe2 0x19 0x0 \ 0x15 0xe9 0xfd 0xff 0xf6 0xff 0xff 0xfa \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xff 0x3 \ 0x6 0x0 0xff 0xf7 0xfc 0x64 0x0 0x0 \ 0xa7 0xff 0xfe 0xfd 0xff 0xfc 0xf7 0xff \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xff 0x3 \ 0x0 0x2 0xff 0xfa 0xbe 0x0 0x1 0x4e \ 0xff 0xfc 0xfe 0xfa 0xff 0xff 0xff 0xfd \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xff 0x3 \ 0x2 0x0 0xfe 0xf6 0x1e 0x1 0xc 0xe6 \ 0xfc 0xff 0xfb 0xff 0xfc 0xfd 0xfd 0xff \ 0xff 0xfe 0xff 0xff 0xfe 0x4 0x1 0x0 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xff 0xfc 0xff 0xff 0x1 \ 0x2 0x0 0xff 0x72 0x2 0x0 0x96 0xff \ ' + ffs + ' \ 0xff 0xff 0xff 0xfb 0xff 0x0 0x0 0x2 \ 0xfd 0xff 0xfe 0xfc 0xff 0xff 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf9 0xff 0xfd 0xf9 0xfd 0xff 0x7 \ 0x0 0x4 0xc7 0x0 0x0 0x41 0xff 0xfb \ ' + ffs + ' \ 0xff 0xfb 0xff 0xfc 0xff 0x5 0x1 0x0 \ 0xff 0xf9 0xff 0xe7 0x88 0x24 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xf7 0xff 0xff 0xfb 0xfa 0x0 \ 0x1 0x0 0x33 0x5 0x9 0xe0 0xf6 0xff \ ' + ffs + ' \ 0xfb 0xff 0xf4 0xff 0xff 0x2 0x0 0x0 \ 0xf9 0xa2 0x4c 0x4 0x0 0xa 0xfb 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xff 0xfe 0xff 0xf5 0xfe 0xff 0x3 \ 0x0 0x7 0x0 0x2 0x8a 0xff 0xf9 0xff \ ' + ffs + ' \ 0xfe 0xff 0xff 0xf9 0xff 0x0 0x8 0x0 \ 0x10 0x4 0x0 0x6 0x4 0x16 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf8 0xfd 0xff 0xff 0xff 0xf8 0x0 \ 0x2 0x8 0x1 0x31 0xfc 0xfb 0xff 0xff \ ' + ffs + ' \ 0xff 0xf4 0xff 0xff 0xf7 0x5 0x1 0x3 \ 0x2 0x0 0x0 0x54 0xaf 0xfb 0xff 0xf9 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xff 0xff 0xff 0xff 0xf9 0xff 0x6 \ 0x0 0x0 0x4 0xcf 0xfd 0xff 0xff 0xfe \ ' + ffs + ' \ 0xfa 0xff 0xfa 0xff 0xff 0x2 0x0 0x0 \ 0x28 0x8b 0xed 0xfb 0xff 0xfa 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xf9 0xfe 0xfd 0x1 \ 0x3 0x0 0x78 0xff 0xfe 0xff 0xff 0xfb \ ' + ffs + ' \ 0xfd 0xff 0xfc 0xf9 0xfe 0x19 0x65 0xc6 \ 0xfc 0xff 0xff 0xff 0xfe 0xfb 0xff 0xf9 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xfe 0xff 0xff 0xfc 0xff \ 0xfd 0xff 0xff 0xfa 0xff 0xfe 0xf9 0xff \ ' + ffs + ' \ 0xff 0xfc 0xff 0xff 0xfe 0xfb 0xfd 0xff \ 0xff 0xfe 0xfe 0xfc 0xff 0xff 0xfd 0xff \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' ' face20.image = '80 80 1 \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfe 0xfe 0xfe 0xff 0xfa 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfb 0xff 0xfb 0xff \ 0xff 0xff 0xfc 0xff 0xfd 0xff 0xfd 0xff \ 0xfc 0xff 0xff 0xff 0xfb 0xff 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfb 0xff 0xf8 0xff 0xff 0xff 0xfe 0xfb \ ' + ffs + ' \ 0xff 0xf7 0xff 0xfc 0xfe 0xff 0xff 0xfe \ 0xfb 0xff 0xff 0xff 0xfd 0xff 0xff 0xfd \ 0xff 0xfe 0xf9 0xfe 0xfd 0xff 0xfe 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfa 0xff 0xfe 0xf3 0xff 0xff 0xff \ ' + ffs + ' \ 0xfb 0xff 0xfd 0xff 0xff 0xfc 0xff 0xff \ 0xff 0xff 0xfc 0xfc 0xf7 0xfe 0xff 0xff \ 0xff 0xff 0xff 0xff 0xff 0xff 0xfc 0xfb \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf9 0xff 0xfb 0xff 0xfe 0xf6 0xfe \ ' + ffs + ' \ 0xff 0xfe 0xfe 0xfc 0xfd 0xff 0xf8 0xfe \ 0xff 0xfb 0xfc 0xff 0xff 0xff 0xff 0xfd \ 0xff 0xfd 0xfe 0xff 0xfa 0xfe 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xff 0xff 0xff 0xff 0xfa 0xff 0xff \ ' + ffs + ' \ 0xfd 0xf9 0xff 0xff 0xfd 0xfb 0xff 0xfd \ 0xff 0xfe 0xfe 0xfe 0xfe 0xfc 0xfd 0xfd \ 0xff 0xff 0xff 0xff 0xff 0xff 0xfe 0xf8 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xfc 0xff 0xfc 0xff 0xf9 0xfb \ ' + ffs + ' \ 0xff 0xff 0xf8 0xff 0xfe 0xff 0xfa 0xfe \ 0xf8 0xff 0xff 0xfb 0xff 0xff 0xff 0xff \ 0xfb 0xff 0xff 0xfd 0xff 0xfe 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfe 0xfd 0xff 0xff 0xff 0xff \ ' + ffs + ' \ 0xfe 0xfa 0xff 0xfc 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xf9 0xff 0xff 0xfa 0xfe \ 0xff 0xff 0xfa 0xf9 0xff 0xfe 0xf9 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xfe 0xff 0xfd 0xfb 0xff 0x0 \ 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 \ 0x0 0x4 0x2 0x0 0x2 0x0 0xfb 0xff \ 0xff 0xfe 0xff 0xff 0xf1 0x97 0x3d 0x17 \ 0x3 0x15 0x41 0x90 0xee 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xff 0xff 0xfd 0xfc 0xff 0xff 0x0 \ 0x0 0x1 0x0 0x2 0x0 0x0 0x2 0x0 \ 0x0 0x7 0x0 0x0 0x1 0x0 0xff 0xff \ 0xff 0xfc 0xff 0xd1 0x1f 0x0 0x2 0x0 \ 0x2 0x0 0x0 0x4 0x1e 0xc4 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfb 0xfa 0xff 0xff 0xfe 0xf5 0x51 \ 0x0 0x0 0x5f 0x7a 0x86 0x85 0x86 0x81 \ 0x82 0x80 0x85 0x88 0x82 0x86 0xff 0xfd \ 0xf9 0xff 0xd3 0xb 0x0 0x8 0x12 0x62 \ 0x7a 0x61 0x1c 0x0 0x3 0x9 0xda 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfd 0xff 0xff 0xfc 0xfe 0xff 0xf1 \ 0x33 0x7 0x19 0xdc 0xff 0xfb 0xfb 0xff \ 0xff 0xfa 0xff 0xfe 0xf9 0xfc 0xff 0xff \ 0xfd 0xfa 0x4b 0x0 0x0 0x40 0xe6 0xff \ 0xff 0xf9 0xf0 0x46 0x0 0x3 0x43 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfc 0xfc 0xfc 0xf7 0xff \ 0xe7 0x1a 0x2 0x24 0xe5 0xfe 0xfc 0xff \ 0xff 0xff 0xff 0xfc 0xff 0xff 0xfc 0xfc \ 0xff 0xd2 0x0 0x0 0xd 0xf2 0xff 0xfb \ 0xff 0xff 0xfd 0xf3 0xf 0x3 0x5 0xd2 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xfc 0xfd 0xff 0xff 0xfd 0xfd \ 0xff 0xd3 0x14 0x0 0x25 0xec 0xff 0xff \ 0xf8 0xfe 0xfa 0xfb 0xff 0xfb 0xff 0xff \ 0xfe 0x83 0x0 0x1 0x72 0xfd 0xfe 0xfe \ 0xf8 0xff 0xff 0xfd 0x6e 0x0 0x0 0x89 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfc 0xfd 0xf7 0xfd 0xff \ 0xff 0xfb 0xc1 0x0 0xf 0x3e 0xec 0xfc \ 0xff 0xff 0xff 0xff 0xfc 0xff 0xff 0xfe \ 0xfe 0x59 0x0 0x0 0xb7 0xfc 0xfe 0xff \ 0xff 0xff 0xff 0xfb 0xb4 0x6 0x0 0x59 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xfc 0xff 0xff 0xff 0xff 0xff \ 0xff 0xff 0xfd 0xa4 0x0 0x0 0x49 0xfa \ 0xff 0xfc 0xfc 0xff 0xf9 0xff 0xff 0xff \ 0xfd 0x1f 0x7 0x1 0xdf 0xff 0xfd 0xfc \ 0xfa 0xfc 0xff 0xfc 0xdc 0x0 0x1 0x2a \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xfe 0xff 0xfb 0xff 0xfc 0xff \ 0xff 0xff 0xfd 0xff 0x7f 0x1 0x1 0x4f \ 0xfd 0xfe 0xfe 0xff 0xff 0xfc 0xff 0xfc \ 0xff 0x16 0x0 0x8 0xeb 0xff 0xff 0xff \ 0xff 0xfe 0xff 0xff 0xee 0x0 0x0 0x1d \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xff 0xff 0xff 0xff 0xfd 0xfe 0xfe \ 0xff 0xf9 0xff 0xff 0xfe 0x62 0x0 0x0 \ 0x63 0xff 0xfb 0xff 0xff 0xff 0xfc 0xff \ 0xff 0x7 0x0 0x0 0xff 0xff 0xfd 0xff \ 0xff 0xff 0xfe 0xff 0xfb 0x3 0x1 0xc \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xfa 0xfe 0xff 0xff 0xff \ 0xf8 0xff 0xfc 0xff 0xff 0xf7 0x41 0x1 \ 0x0 0x8d 0xfe 0xff 0xfc 0xfd 0xff 0xfa \ 0xfc 0x5 0x0 0x1 0xff 0xff 0xfd 0xff \ 0xfe 0xff 0xff 0xff 0xfe 0x0 0x0 0x6 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfa 0xff 0xfe 0xff 0xfe 0xfd 0xfc \ 0xff 0xff 0xff 0xfc 0xfc 0xff 0xf0 0x27 \ 0x0 0x0 0xb4 0xff 0xfe 0xfe 0xff 0xff \ 0xfd 0x1 0x1 0x3 0xfc 0xff 0xfc 0xff \ 0xfe 0xff 0xfe 0xff 0xff 0x0 0x0 0x2 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfb 0xff 0xfd 0xff 0xfd 0xff 0xff \ 0xfc 0xfe 0xfc 0xfe 0xfb 0xff 0xff 0xd4 \ 0x13 0x0 0x17 0xe3 0xff 0xff 0xfd 0xff \ 0xff 0x0 0x2 0x3 0xfd 0xff 0xfc 0xff \ 0xfe 0xff 0xfc 0xfe 0xff 0x0 0x2 0x2 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfb 0xfc 0xff 0xfb 0xff 0xf7 \ 0xff 0xff 0xff 0xff 0xff 0xf6 0xfb 0xff \ 0x90 0x2 0x2 0x50 0xff 0xff 0xfb 0xff \ 0xff 0x0 0x1 0x2 0xff 0xfe 0xfe 0xff \ 0xfe 0xff 0xfc 0xff 0xff 0x0 0x2 0x4 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xff 0xfe 0xff 0xff 0xfe 0xff 0xff \ 0xfd 0xff 0xf7 0xfe 0xfb 0xff 0xff 0xff \ 0xff 0x3d 0x0 0x6 0xc5 0xfc 0xff 0xfe \ 0xfe 0x3 0x0 0x3 0xff 0xfe 0xff 0xfd \ 0xfe 0xff 0xff 0xff 0xfb 0x3 0x0 0xb \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xfc 0xfc 0xff 0xf3 0xff \ 0xfd 0xff 0xf9 0xff 0xff 0xf9 0xff 0xff \ 0xf6 0xaa 0x0 0x0 0x65 0xff 0xff 0xff \ 0xfc 0x15 0x0 0x2 0xf6 0xfe 0xff 0xfe \ 0xfe 0xff 0xff 0xff 0xee 0x2 0x0 0x1a \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfc 0xff 0xff 0xff 0xff 0xb4 0xb1 \ 0xb7 0xf9 0xff 0xfd 0xff 0xff 0xfd 0xff \ 0xff 0xe2 0x0 0x4 0x1f 0xff 0xff 0xfd \ 0xfe 0x25 0x0 0x0 0xe7 0xfd 0xff 0xff \ 0xff 0xff 0xff 0xfa 0xe2 0x0 0x0 0x29 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xfe 0xff 0xff 0xfd 0x15 0x0 \ 0x1 0xf3 0xfd 0xff 0xf8 0xff 0xff 0xf9 \ 0xfe 0xf5 0x3 0x3 0x7 0xfc 0xff 0xff \ 0xff 0x48 0x7 0x0 0xc0 0xfd 0xff 0xfd \ 0xff 0xfb 0xff 0xf8 0xbc 0x0 0x0 0x55 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfb 0xff 0xfe 0xfd 0xff 0x33 0x9 \ 0x2 0xb9 0xfb 0xff 0xfe 0xff 0xff 0xff \ 0xff 0xd8 0x4 0x0 0x1a 0xff 0xf8 0xff \ 0xff 0x76 0x0 0xa 0x77 0xff 0xff 0xff \ 0xfc 0xff 0xf8 0xff 0x78 0x4 0x2 0x7d \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfb 0xff 0xfc 0xfe 0xfd 0xff 0x8a 0x0 \ 0x0 0x4c 0xff 0xfd 0xff 0xff 0xfb 0xfe \ 0xfe 0x6f 0x0 0x3 0x48 0xff 0xff 0xff \ 0xff 0xd0 0x0 0x0 0x1c 0xf4 0xff 0xf9 \ 0xff 0xff 0xff 0xf1 0x12 0x0 0x0 0xd2 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfc 0xfc 0xff 0xf6 0xf9 0xf2 0x1b \ 0x3 0x0 0x6d 0xf3 0xfb 0xff 0xf7 0xff \ 0x9f 0x0 0x6 0x4 0x9b 0xfb 0xfe 0xfb \ 0xff 0xf9 0x36 0x5 0x0 0x4b 0xea 0xff \ 0xfd 0xfe 0xf4 0x45 0x6 0x1 0x38 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xfa 0xff 0xff 0xfd 0xaf \ 0x5 0x0 0xc 0x1a 0x5d 0x80 0x78 0x2f \ 0x0 0x2 0x0 0x4d 0xff 0xff 0xff 0xff \ 0xff 0xfd 0xd6 0x7 0x1 0x2 0x17 0x5f \ 0x82 0x63 0x13 0x0 0x0 0x9 0xd4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfa 0xff 0xff 0xfb 0xff 0xfc 0xff \ 0xb0 0x19 0x0 0x0 0x4 0x0 0x0 0x0 \ 0x0 0x2 0x57 0xf0 0xfc 0xfb 0xff 0xfb \ 0xfa 0xff 0xf7 0xc1 0x1f 0x0 0x0 0x7 \ 0x0 0x0 0x0 0x6 0x1f 0xc2 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xfa 0xff 0xfd 0xff 0xfc 0xff \ 0xff 0xec 0x91 0x48 0x17 0x3 0x8 0x2c \ 0x5d 0xc5 0xff 0xfc 0xff 0xff 0xff 0xfe \ 0xff 0xff 0xff 0xfe 0xf6 0x8c 0x3e 0x14 \ 0x4 0x15 0x47 0x89 0xf2 0xff 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xfe 0xfe 0xff 0xfe 0xff 0xfb \ 0xff 0xff 0xff 0xfa 0xff 0xff 0xff 0xfd \ 0xff 0xfd 0xfd 0xff 0xff 0xff 0xfe 0xff \ 0xff 0xfd 0xfc 0xfd 0xff 0xfd 0xff 0xfd \ 0xff 0xfd 0xff 0xfb 0xff 0xfe 0xff 0xfd \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' ' face21.image = '80 80 1 \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xff 0xfd 0xf0 0x86 0x48 \ 0x19 0x4 0xa 0x27 0x61 0xbf 0xfc 0xff \ 0xfe 0xff 0xfb 0xff 0xfc 0xfb 0xff 0xfe \ 0xfd 0xff 0xfb 0xff 0xc3 0x67 0xe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfa 0xfe 0xb4 0x16 0x4 0x0 \ 0x2 0x0 0x0 0x6 0x0 0x0 0x5e 0xec \ 0xff 0xfb 0xff 0xfe 0xff 0xff 0xfc 0xfc \ 0xff 0xe1 0x8d 0x28 0x0 0x0 0x2 0xf9 \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfd 0xfe 0xff 0xbe 0x1 0x0 0x0 0x18 \ 0x65 0x75 0x79 0x30 0x0 0x2 0x0 0x51 \ 0xff 0xf9 0xff 0xff 0xff 0xfb 0xff 0xb5 \ 0x51 0xe 0x0 0x3 0x0 0x0 0xb 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xf2 0xb 0x1 0x1 0x72 0xf9 \ 0xfb 0xff 0xfc 0xff 0xa0 0x2 0x0 0x0 \ 0xa4 0xff 0xfe 0xfc 0xff 0xfe 0x1e 0x1 \ 0x0 0x0 0x0 0xd 0x6 0x3 0x0 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfc 0xff 0x82 0x6 0x1 0x45 0xf9 0xff \ 0xff 0xff 0xff 0xff 0xff 0x69 0x0 0x2 \ 0x49 0xf7 0xff 0xf7 0xff 0xff 0x0 0x0 \ 0x2 0x49 0xad 0xfa 0x0 0x1 0x2 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0x3d 0x0 0x1 0xc1 0xff 0xfc \ 0xfe 0xfb 0xfb 0xfb 0xfa 0xd5 0x8 0x0 \ 0x1c 0xfe 0xf9 0xff 0xff 0xfa 0x2d 0x91 \ 0xe8 0xfe 0xff 0xf7 0x6 0x2 0x0 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfb 0xfe 0x8 0x5 0x0 0xf5 0xff 0xfe \ 0xfc 0xff 0xfc 0xff 0xfa 0xfc 0x0 0x2 \ 0x8 0xfe 0xff 0xff 0xf7 0xff 0xff 0xf7 \ 0xff 0xf9 0xff 0xff 0x2 0x0 0x2 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xb5 0xb1 0xb7 0xfe 0xfc 0xff \ 0xff 0xfd 0xfe 0xff 0xff 0xe3 0x0 0x1 \ 0x22 0xff 0xff 0xfc 0xff 0xfe 0xff 0xff \ 0xfe 0xff 0xff 0xfd 0x0 0x4 0x3 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xf9 0xfe 0xff 0xfc 0xa6 0x8 0x0 \ 0x67 0xfc 0xff 0xff 0xfd 0xff 0xff 0xfd \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfc 0xff 0xff 0xfb 0xfe 0x35 0x0 0x3 \ 0xc4 0xff 0xfa 0xfe 0xfe 0xff 0xfe 0xff \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfd 0xfc 0xfe 0xfb 0xa2 0x2 0x0 0x54 \ 0xff 0xff 0xfd 0xff 0xfe 0xff 0xfb 0xff \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfd 0xda 0x6 0x0 0x14 0xed \ 0xff 0xfa 0xff 0xff 0xfd 0xff 0xfe 0xff \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfa 0xff 0xef 0x1f 0x9 0x0 0xb9 0xfe \ 0xff 0xfe 0xfe 0xfb 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xf3 0x3e 0x9 0x0 0x89 0xf9 0xff \ 0xfe 0xff 0xfd 0xfd 0xff 0xfe 0xfd 0xff \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfb 0x6a 0x0 0x1 0x63 0xfe 0xff 0xf9 \ 0xfa 0xff 0xff 0xff 0xff 0xfe 0xf9 0xff \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' \ 0x81 0x0 0x1 0x4d 0xff 0xff 0xfc 0xff \ 0xff 0xfe 0xff 0xfd 0xfa 0xff 0xfb 0xff \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfd 0xff 0xff 0xfc 0xa3 \ 0x0 0x0 0x4a 0xf5 0xff 0xff 0xfd 0xff \ 0xfd 0xff 0xff 0xff 0xfd 0xff 0xff 0xfd \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfc 0xfd 0xff 0xfe 0xfc 0xfb 0xc5 0x2 \ 0x0 0x3c 0xe9 0xff 0xff 0xfb 0xff 0xfb \ 0xff 0xfc 0xff 0xf6 0xfe 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfe 0xfb 0xff 0xd3 0xc 0x0 \ 0x2c 0xf0 0xff 0xff 0xfb 0xff 0xff 0xfe \ 0xfa 0xff 0xff 0xfe 0xff 0xff 0xfb 0xff \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xf9 0xfc 0xfa 0xff 0xe7 0x1c 0x0 0x27 \ 0xe4 0xfc 0xfd 0xff 0xff 0xf8 0xf5 0xff \ 0xfe 0xff 0xf7 0xff 0xff 0xfc 0xff 0xfe \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfa 0xf6 0x2d 0x1 0x1c 0xda \ 0xff 0xff 0xf5 0xff 0xfc 0xff 0xff 0xff \ 0xff 0xf8 0xff 0xff 0xfb 0xfe 0xff 0xff \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfa 0xfc 0xff 0x47 0x8 0x0 0x56 0x82 \ 0x82 0x89 0x86 0x81 0x86 0x7e 0x84 0x7b \ 0x86 0x80 0xff 0xfe 0xff 0xff 0xfd 0xff \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xfb 0x0 0x0 0x0 0x0 0x2 \ 0x0 0x4 0x0 0x0 0x5 0x0 0x2 0x2 \ 0x0 0x4 0xf9 0xfe 0xff 0xff 0xfb 0xff \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0x0 0x0 0x0 0x2 0x0 \ 0x3 0x0 0x5 0x3 0x0 0x1 0x0 0x0 \ 0x2 0x0 0xfd 0xff 0xf8 0xff 0xff 0xfe \ 0xff 0xff 0xff 0xff 0x0 0x0 0x4 0xfe \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs4 + ' \ ' + ffs + ' ' face22.image = '80 80 1 \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfe 0xfd 0xff 0xff 0xfc \ ' + ffs + ' \ 0xff 0xfc 0xff 0xfb 0xff 0xfd 0xff 0xfd \ ' + ffs + ' \ 0xfd 0xff 0xff 0xff 0xfa 0xff 0xfe 0xfc \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xff 0xff 0xff 0xff 0xfa 0xfe 0xfb \ ' + ffs + ' \ 0xff 0xfe 0xfb 0xff 0xf9 0xff 0xff 0xfd \ ' + ffs + ' \ 0xff 0xfa 0xff 0xfe 0xf9 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf9 0xff 0xf7 0xff 0xff 0xfd 0xff \ ' + ffs + ' \ 0xfb 0xff 0xff 0xfd 0xff 0xfd 0xfa 0xff \ ' + ffs + ' \ 0xfd 0xff 0xf8 0xff 0xff 0xfd 0xf9 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xff 0xff 0xff 0xf9 0xff 0xf9 0xf9 \ ' + ffs + ' \ 0xff 0xfa 0xf8 0xff 0xfc 0xff 0xff 0xfa \ ' + ffs + ' \ 0xfc 0xff 0xff 0xff 0xf4 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfa 0xff 0xff 0xf9 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfc 0xff 0xff \ ' + ffs + ' \ 0xff 0xf8 0xfd 0xfe 0xfe 0xff 0xf7 0xfc \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf9 0xff 0xfc 0xff 0xff 0xff 0xfd \ ' + ffs + ' \ 0xfc 0xfd 0xfd 0xfd 0xff 0xff 0xff 0xff \ ' + ffs + ' \ 0xfb 0xff 0xff 0xfe 0xff 0xfa 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xf9 0xff 0xff 0xfc 0xff 0xfc 0xfd 0xff \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfe 0xff 0xff 0xfd \ ' + ffs + ' \ 0xfe 0xff 0xff 0xff 0xf8 0xff 0xfd 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfb 0xfd 0xff 0xff 0x0 0x7 0x0 \ 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 \ 0x1 0x0 0x1 0x0 0xff 0xfd 0xff 0xfd \ 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 \ 0x0 0x0 0x0 0x0 0x2 0x3 0x0 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xfd 0xff 0xff 0x0 0x3 0x0 \ 0x0 0x0 0x5 0x0 0x1 0x0 0x1 0x1 \ 0x0 0x2 0x0 0x0 0xff 0xff 0xfd 0xff \ 0x0 0x0 0x4 0x0 0x0 0x3 0x0 0x0 \ 0x0 0x1 0x0 0x4 0x0 0x0 0x0 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfd 0xff 0xfb 0xf8 0x4c 0x0 0x4 \ 0x5b 0x87 0x80 0x84 0x81 0x85 0x87 0x81 \ 0x84 0x80 0x83 0x87 0xfc 0xff 0xff 0xff \ 0x4d 0x6 0x0 0x5c 0x83 0x7b 0x84 0x87 \ 0x85 0x81 0x7f 0x83 0x85 0x82 0x83 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xf9 0xff 0xff 0xf6 0x2a 0x0 \ 0x17 0xde 0xfe 0xff 0xff 0xf8 0xff 0xfb \ 0xff 0xfc 0xff 0xff 0xfe 0xfe 0xff 0xfa \ 0xf5 0x2e 0x5 0x16 0xdd 0xff 0xff 0xfd \ 0xfc 0xff 0xfe 0xfa 0xff 0xff 0xfe 0xfc \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xff 0xfe 0xff 0xf8 0xff 0xea 0x22 \ 0x7 0x22 0xe6 0xfc 0xff 0xff 0xfe 0xff \ 0xfc 0xfc 0xff 0xff 0xfd 0xfe 0xff 0xff \ 0xff 0xe6 0x20 0x0 0x27 0xe5 0xfe 0xff \ 0xfc 0xff 0xfa 0xff 0xfe 0xfd 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfa 0xff 0xff 0xfd 0xfd 0xff 0xd1 \ 0xa 0x0 0x2f 0xec 0xff 0xff 0xfa 0xff \ 0xff 0xff 0xff 0xfa 0xff 0xff 0xfe 0xff \ 0xff 0xff 0xda 0x8 0x5 0x2a 0xec 0xff \ 0xff 0xfc 0xfb 0xff 0xfe 0xff 0xff 0xfa \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xfe 0xff 0xfa 0xfd 0xff 0xfa 0xff \ 0xbe 0xf 0x0 0x3a 0xf2 0xff 0xff 0xfc \ 0xfe 0xff 0xff 0xfe 0xff 0xff 0xff 0xff \ 0xfe 0xf7 0xff 0xc2 0x0 0x0 0x3c 0xf2 \ 0xfd 0xfa 0xff 0xff 0xf9 0xfc 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfd 0xfc 0xff 0xff \ 0xfc 0x9d 0x9 0x0 0x41 0xf8 0xfa 0xff \ 0xfe 0xff 0xff 0xff 0xfc 0xfe 0xff 0xff \ 0xff 0xff 0xff 0xf7 0xa6 0x4 0x0 0x45 \ 0xf4 0xff 0xf7 0xfc 0xff 0xff 0xfa 0xfb \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf8 0xfe 0xfd 0xff 0xff 0xfd 0xff \ 0xff 0xff 0x7d 0x0 0x2 0x52 0xfe 0xfe \ 0xff 0xff 0xfe 0xfc 0xff 0xff 0xfd 0xff \ 0xfd 0xfd 0xfe 0xff 0xff 0x7b 0x3 0x0 \ 0x50 0xf9 0xff 0xff 0xfc 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xfa 0xff 0xff 0xfc 0xfe 0xff \ 0xff 0xff 0xff 0x63 0x0 0x0 0x62 0xff \ 0xfe 0xff 0xfe 0xff 0xfc 0xff 0xff 0xfd \ 0xff 0xff 0xfa 0xff 0xff 0xfb 0x5f 0x0 \ 0x0 0x65 0xfe 0xff 0xff 0xff 0xfa 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfc 0xfc 0xff 0xff 0xff 0xfd \ 0xfd 0xff 0xf5 0xfb 0x40 0x0 0x6 0x86 \ 0xfd 0xff 0xff 0xfb 0xff 0xf8 0xff 0xff \ 0xfc 0xfe 0xfe 0xff 0xfa 0xff 0xf8 0x44 \ 0x1 0x0 0x8a 0xff 0xff 0xfa 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfb 0xff 0xff 0xff 0xfd 0xfa 0xff 0xfd \ 0xfe 0xff 0xff 0xf8 0xf1 0x2a 0x0 0x0 \ 0xb8 0xfe 0xfb 0xff 0xff 0xff 0xfe 0xfe \ 0xff 0xfc 0xff 0xfa 0xff 0xff 0xff 0xee \ 0x2a 0x5 0x0 0xb2 0xff 0xfd 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xfe 0xf8 0xff 0xfc 0xff 0xfd 0xff \ 0xff 0xff 0xfa 0xff 0xfd 0xd6 0x8 0x0 \ 0x19 0xe8 0xff 0xfe 0xfb 0xff 0xff 0xf9 \ 0xf9 0xfe 0xff 0xff 0xf3 0xff 0xfe 0xfa \ 0xcd 0x11 0x0 0x15 0xec 0xff 0xf9 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfd 0xff 0xff 0xff \ 0xff 0xfa 0xff 0xff 0xfe 0xfb 0xa0 0x1 \ 0x0 0x52 0xff 0xff 0xff 0xff 0xf0 0xff \ 0xff 0xff 0xf6 0xff 0xff 0xf8 0xff 0xff \ 0xff 0x94 0x5 0x0 0x56 0xf8 0xfb 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xfa 0xff 0xfa 0xff 0xff 0xfe 0xf8 \ 0xff 0xfd 0xff 0xf9 0xfe 0xff 0xfd 0x37 \ 0x9 0x3 0xc3 0xff 0xfa 0xfc 0xff 0xfe \ 0xfe 0xfc 0xff 0xfd 0xff 0xfc 0xfe 0xfb \ 0xfe 0xff 0x37 0x0 0x0 0xd3 0xff 0xfa \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xff 0xfd 0xff 0xf9 0xff \ 0xff 0xff 0xfe 0xff 0xff 0xff 0xf7 0xad \ 0x0 0x0 0x68 0xff 0xff 0xfc 0xfe 0xff \ 0xff 0xfa 0xfd 0xff 0xfe 0xff 0xff 0xfc \ 0xff 0xff 0xa4 0x5 0x0 0x5c 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xff 0xfb 0xff 0xb7 0xaf 0xb7 0xfe \ 0xff 0xff 0xf9 0xff 0xfa 0xff 0xff 0xde \ 0x2 0x1 0x27 0xfd 0xfe 0xff 0xff 0xb2 \ 0xb0 0xb9 0xfd 0xff 0xff 0xfe 0xfb 0xff \ 0xff 0xff 0xe1 0x0 0x3 0x22 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfb 0xfd 0xff 0xff 0xf 0x0 0x4 0xf1 \ 0xff 0xff 0xfe 0xff 0xfb 0xff 0xf8 0xfe \ 0x1 0x0 0xa 0xff 0xff 0xfc 0xfc 0x15 \ 0x0 0x5 0xef 0xfe 0xff 0xff 0xff 0xfe \ 0xfe 0xff 0xf8 0x3 0x0 0xe 0xfb 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfa 0xfd 0xff 0x37 0x0 0x4 0xb9 \ 0xfc 0xff 0xfc 0xf5 0xff 0xff 0xfe 0xd3 \ 0x1 0x0 0x10 0xfd 0xfc 0xff 0xff 0x31 \ 0x1 0x0 0xbd 0xfc 0xff 0xfe 0xfe 0xff \ 0xff 0xff 0xd1 0x1 0x0 0x19 0xfa 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xf9 0xff 0x8b 0x0 0x3 0x44 \ 0xff 0xff 0xff 0xff 0xfb 0xf9 0xfd 0x6e \ 0x0 0x5 0x4b 0xff 0xfc 0xff 0xff 0x8b \ 0x0 0x0 0x4a 0xff 0xf8 0xfe 0xff 0xfc \ 0xfd 0xfb 0x74 0x0 0x3 0x47 0xff 0xfb \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xf8 0xf2 0x1c 0x0 0x2 \ 0x6e 0xfa 0xfc 0xff 0xfb 0xff 0x9d 0x3 \ 0x1 0x3 0x9d 0xff 0xff 0xf8 0xfd 0xf0 \ 0x11 0x6 0x0 0x6b 0xff 0xff 0xff 0xff \ 0xff 0x9c 0x0 0x1 0x0 0xa4 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xfd 0xfd 0xff 0xfd 0xac 0x6 0x5 \ 0x4 0x12 0x61 0x7d 0x7a 0x31 0x0 0x5 \ 0x5 0x40 0xff 0xfa 0xfd 0xff 0xff 0xff \ 0xb4 0x4 0x0 0x0 0x1a 0x58 0x83 0x70 \ 0x2e 0x5 0x1 0x0 0x49 0xff 0xf8 0xfb \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0xff 0xb9 0x5 \ 0x0 0x1 0x0 0x0 0x0 0x0 0x2 0x0 \ 0x55 0xfa 0xfd 0xff 0xff 0xff 0xf8 0xfe \ 0xff 0xb1 0x17 0x4 0x0 0x8 0x0 0x0 \ 0x2 0x0 0x2 0x5d 0xf5 0xfa 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf9 0xff 0xfe 0xff 0xf9 0xfe 0xfb \ 0x8e 0x3b 0x23 0x4 0x9 0x2d 0x5c 0xc2 \ 0xff 0xff 0xfe 0xf8 0xff 0xff 0xfe 0xff \ 0xfb 0xff 0xec 0x8b 0x42 0x16 0xd 0x7 \ 0x2a 0x68 0xbb 0xfc 0xfe 0xff 0xff 0xfa \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xfb 0xff 0xfc 0xff 0xfb 0xfc \ 0xfd 0xff 0xfd 0xff 0xff 0xfd 0xff 0xfe \ 0xfc 0xfe 0xff 0xff 0xfe 0xff 0xfd 0xfc \ 0xff 0xfd 0xff 0xff 0xfe 0xff 0xfa 0xff \ 0xfe 0xfc 0xfe 0xff 0xfe 0xff 0xfe 0xff \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' ' face23.image = '80 80 1 \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfe 0xfd 0xff 0xff 0xfc \ ' + ffs + ' \ 0xff 0xfc 0xff 0xfb 0xff 0xfd 0xff 0xfd \ 0xff 0xfd 0xfc 0xff 0xff 0xfe 0xff 0xff \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xff 0xff 0xff 0xff 0xfa 0xfe 0xfb \ ' + ffs + ' \ 0xff 0xfe 0xfb 0xff 0xf9 0xff 0xff 0xfd \ 0xff 0xfe 0xfd 0xff 0xff 0xff 0xfd 0xf9 \ 0xfd 0xfd 0xfc 0xfe 0xff 0xff 0xff 0xf9 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf9 0xff 0xf7 0xff 0xff 0xfd 0xff \ ' + ffs + ' \ 0xfb 0xff 0xff 0xfd 0xff 0xfd 0xfa 0xff \ 0xfe 0xff 0xff 0xfd 0xfb 0xfe 0xff 0xff \ 0xff 0xff 0xff 0xfe 0xfa 0xfc 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xff 0xff 0xff 0xf9 0xff 0xf9 0xf9 \ ' + ffs + ' \ 0xff 0xfa 0xf8 0xff 0xfc 0xff 0xff 0xfa \ 0xff 0xfe 0xfd 0xfe 0xff 0xff 0xfb 0xf7 \ 0xfb 0xfc 0xfe 0xff 0xff 0xff 0xfe 0xfc \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfa 0xff 0xff 0xf9 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfc 0xff 0xff \ 0xfe 0xfc 0xfd 0xff 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xff 0xfc 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf9 0xff 0xfc 0xff 0xff 0xff 0xfd \ ' + ffs + ' \ 0xfc 0xfd 0xfd 0xfd 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xfd 0xfb 0xfd 0xff \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xf9 0xff 0xff 0xfc 0xff 0xfc 0xfd 0xff \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfe 0xff 0xff 0xfd \ 0xfc 0xff 0xff 0xfd 0xfd 0xff 0xff 0xfb \ 0xfd 0xff 0xff 0xfc 0xfd 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfb 0xfd 0xff 0xff 0x0 0x7 0x0 \ 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 \ 0x1 0x0 0x1 0x0 0xff 0xfd 0xff 0xfd \ 0xff 0xff 0xd9 0x86 0x35 0xf 0xa 0xe \ 0x35 0x85 0xdd 0xff 0xff 0xfc 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xfd 0xff 0xff 0x0 0x3 0x0 \ 0x0 0x0 0x5 0x0 0x1 0x0 0x1 0x1 \ 0x0 0x8 0x0 0x0 0xff 0xfc 0xfd 0xff \ 0xfe 0x7e 0x6 0x3 0x0 0x1 0x2 0x0 \ 0x0 0x1 0x9 0x8c 0xff 0xfe 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfd 0xff 0xfb 0xf8 0x4c 0x0 0x4 \ 0x5b 0x87 0x80 0x84 0x81 0x85 0x87 0x81 \ 0x85 0x7e 0x88 0x83 0xfb 0xff 0xff 0xf7 \ 0x6a 0x0 0x2 0x0 0x27 0x70 0x80 0x6c \ 0x34 0x0 0x8 0x0 0x7a 0xfd 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xf9 0xff 0xff 0xf6 0x2a 0x0 \ 0x17 0xde 0xfe 0xff 0xff 0xf8 0xff 0xfb \ 0xff 0xfc 0xff 0xf8 0xff 0xfe 0xfd 0xbc \ 0x0 0x4 0x8 0xa4 0xff 0xfc 0xff 0xfa \ 0xff 0xa1 0x0 0x3 0x4 0xce 0xfa 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xff 0xfe 0xff 0xf8 0xff 0xea 0x22 \ 0x7 0x22 0xe6 0xfc 0xff 0xff 0xfe 0xff \ 0xfa 0xff 0xff 0xff 0xff 0xfd 0xff 0x4d \ 0x5 0x0 0x7e 0xfe 0xfc 0xff 0xfd 0xff \ 0xfb 0xfe 0x84 0x0 0x3 0x64 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfa 0xff 0xff 0xfd 0xfd 0xff 0xd1 \ 0xa 0x0 0x2f 0xec 0xff 0xff 0xfa 0xff \ 0xff 0xff 0xfe 0xfe 0xff 0xff 0xff 0x12 \ 0x0 0x4 0xe8 0xfe 0xff 0xfe 0xff 0xfc \ 0xff 0xfc 0xd4 0x1 0x2 0x22 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xfe 0xff 0xfa 0xfd 0xff 0xfa 0xff \ 0xbe 0xf 0x0 0x3a 0xf2 0xff 0xff 0xfc \ 0xff 0xfb 0xff 0xff 0xff 0xfd 0xff 0x85 \ 0x7b 0x7d 0xf8 0xfc 0xff 0xff 0xff 0xfe \ 0xf8 0xff 0xfa 0x2 0x1 0xc 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfd 0xfc 0xff 0xff \ 0xfc 0x9d 0x9 0x0 0x41 0xf8 0xfa 0xff \ 0xfe 0xff 0xff 0xff 0xff 0xfb 0xfb 0xfe \ 0xf8 0xff 0xfa 0xff 0xf9 0xf9 0xff 0xff \ 0xff 0xf6 0xed 0x0 0x0 0x22 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf8 0xfe 0xfd 0xff 0xff 0xfd 0xff \ 0xff 0xff 0x7d 0x0 0x2 0x52 0xfe 0xfe \ 0xff 0xfe 0xff 0xfb 0xfe 0xff 0xfe 0xff \ 0xff 0xfa 0xff 0xff 0xfe 0xff 0xfc 0xff \ 0xfb 0xff 0xae 0x0 0x6 0x51 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xfa 0xff 0xff 0xfc 0xfe 0xff \ 0xff 0xff 0xff 0x63 0x0 0x0 0x62 0xff \ 0xff 0xfc 0xff 0xfe 0xfa 0xff 0xff 0xff \ 0xff 0xfe 0xff 0xfb 0xfb 0xff 0xfd 0xff \ 0xff 0xe8 0x24 0x2 0x0 0xc0 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfc 0xfc 0xff 0xff 0xff 0xfd \ 0xfd 0xff 0xf5 0xfb 0x40 0x0 0x6 0x86 \ 0xff 0xf8 0xff 0xf8 0xff 0xff 0xfa 0xff \ 0xff 0xf8 0xfe 0xff 0xff 0xff 0xf5 0xd0 \ 0x81 0x11 0x0 0x2 0x67 0xff 0xfb 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfb 0xff 0xff 0xff 0xfd 0xfa 0xff 0xfd \ 0xfe 0xff 0xff 0xf8 0xf1 0x2a 0x0 0x0 \ 0xaa 0xff 0xfd 0xff 0xfd 0xff 0xff 0xfc \ 0xff 0xff 0xff 0x80 0x0 0x0 0x0 0x0 \ 0x0 0x5 0x1b 0x97 0xff 0xff 0xf8 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xfe 0xf8 0xff 0xfc 0xff 0xfd 0xff \ 0xff 0xff 0xfa 0xff 0xfd 0xd6 0x8 0x0 \ 0x21 0xe6 0xff 0xfb 0xff 0xff 0xfd 0xff \ 0xfe 0xf9 0xff 0x85 0x3 0x1 0x2 0x6 \ 0x3 0x2b 0xe1 0xff 0xfe 0xfd 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfd 0xff 0xff 0xff \ 0xff 0xfa 0xff 0xff 0xfe 0xfb 0xa0 0x1 \ 0x0 0x4f 0xff 0xff 0xfc 0xfe 0xff 0xf8 \ 0xfc 0xff 0xfa 0xbb 0x85 0x83 0x70 0x32 \ 0x0 0x0 0x17 0xc1 0xff 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xfa 0xff 0xfa 0xff 0xff 0xfe 0xf8 \ 0xff 0xfd 0xff 0xf9 0xfe 0xff 0xfd 0x37 \ 0x2 0x0 0xc8 0xfc 0xff 0xfd 0xfd 0xff \ 0xff 0xff 0xff 0xff 0xff 0xfc 0xff 0xff \ 0xb2 0x7 0x0 0x14 0xe2 0xff 0xf7 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xff 0xfd 0xff 0xf9 0xff \ 0xff 0xff 0xfe 0xff 0xff 0xff 0xf7 0xad \ 0x4 0x0 0x68 0xff 0xfa 0xfc 0xff 0xff \ 0xff 0xfa 0xff 0xff 0xff 0xff 0xfc 0xff \ 0xfd 0x88 0x4 0x0 0x7d 0xff 0xff 0xf9 \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xff 0xfb 0xff 0xb7 0xaf 0xb7 0xfe \ 0xff 0xff 0xf9 0xff 0xfa 0xff 0xff 0xde \ 0x0 0x6 0x21 0xff 0xff 0xff 0xfd 0xff \ 0xff 0xff 0xfc 0xff 0xfe 0xf9 0xff 0xff \ 0xff 0xde 0x1 0x5 0x22 0xfb 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfb 0xfd 0xff 0xff 0xf 0x0 0x4 0xf1 \ 0xff 0xff 0xfe 0xff 0xfb 0xff 0xf8 0xfe \ 0x0 0x0 0x9 0xff 0xfa 0xff 0xfe 0x8e \ 0x8e 0x8c 0xfb 0xfd 0xff 0xf8 0xfc 0xff \ 0xff 0xfb 0x0 0x2 0x6 0xfe 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfa 0xfd 0xff 0x37 0x0 0x4 0xb9 \ 0xfc 0xff 0xfc 0xf5 0xff 0xff 0xfe 0xd3 \ 0x0 0x0 0x1a 0xff 0xff 0xfb 0xff 0x1b \ 0x0 0x0 0xee 0xff 0xf8 0xff 0xff 0xfd \ 0xfc 0xf0 0x0 0x3 0x13 0xff 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xf9 0xff 0x8b 0x0 0x3 0x44 \ 0xff 0xff 0xff 0xff 0xfb 0xf9 0xfd 0x6e \ 0x0 0x0 0x45 0xfe 0xfe 0xff 0xf7 0x4d \ 0x7 0x3 0x88 0xfe 0xfd 0xfe 0xff 0xf7 \ 0xfd 0xa7 0x0 0x3 0x4a 0xff 0xfc 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xf8 0xf2 0x1c 0x0 0x2 \ 0x6e 0xfa 0xfc 0xff 0xfb 0xff 0x9d 0x3 \ 0x1 0x0 0xa9 0xfa 0xff 0xff 0xff 0xc0 \ 0x0 0x2 0x9 0xb8 0xff 0xfe 0xfe 0xff \ 0xdc 0x1f 0x0 0x0 0xa1 0xfe 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xfd 0xfd 0xff 0xfd 0xac 0x6 0x5 \ 0x4 0x12 0x61 0x7d 0x7a 0x31 0x0 0x5 \ 0x1 0x4c 0xfb 0xff 0xff 0xfd 0xfa 0xfe \ 0x70 0x0 0x4 0x0 0x35 0x79 0x7c 0x4d \ 0x3 0x6 0x2 0x3f 0xf6 0xff 0xfc 0xfa \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0xff 0xb9 0x5 \ 0x0 0x1 0x0 0x0 0x0 0x0 0x2 0x0 \ 0x55 0xf0 0xff 0xff 0xf7 0xff 0xff 0xfa \ 0xfb 0x72 0x0 0x6 0x0 0x4 0x0 0x4 \ 0x3 0x0 0x42 0xe9 0xfd 0xff 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf9 0xff 0xfe 0xff 0xf9 0xfe 0xfb \ 0x8e 0x3b 0x23 0x4 0x9 0x2d 0x5c 0xc2 \ 0xff 0xf9 0xff 0xfd 0xff 0xff 0xf7 0xff \ 0xff 0xfd 0xd2 0x65 0x26 0xc 0xc 0x1c \ 0x57 0xb4 0xf8 0xff 0xff 0xfd 0xff 0xfb \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xfb 0xff 0xfc 0xff 0xfb 0xfc \ 0xfd 0xff 0xfd 0xff 0xff 0xfd 0xff 0xfe \ 0xfa 0xff 0xfa 0xff 0xfc 0xfd 0xff 0xfe \ 0xfd 0xff 0xff 0xfe 0xff 0xff 0xfa 0xff \ 0xfd 0xfb 0xff 0xfa 0xff 0xff 0xf9 0xff \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' ' face24.image = '80 80 1 \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfe 0xfd 0xff 0xff 0xfc \ ' + ffs + ' \ 0xff 0xfc 0xff 0xfb 0xff 0xfd 0xff 0xfd \ ' + ffs + ' \ 0xfc 0xfd 0xff 0xfb 0xff 0xfe 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xff 0xff 0xff 0xff 0xfa 0xfe 0xfb \ ' + ffs + ' \ 0xff 0xfe 0xfb 0xff 0xf9 0xff 0xff 0xfd \ ' + ffs + ' \ 0xff 0xfd 0xfd 0xfb 0xfa 0xff 0xfb 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf9 0xff 0xf7 0xff 0xff 0xfd 0xff \ ' + ffs + ' \ 0xfb 0xff 0xff 0xfd 0xff 0xfd 0xfa 0xff \ ' + ffs + ' \ 0xfd 0xfd 0xff 0xff 0xff 0xf7 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xff 0xff 0xff 0xf9 0xff 0xf9 0xf9 \ ' + ffs + ' \ 0xff 0xfa 0xf8 0xff 0xfc 0xff 0xff 0xfa \ ' + ffs + ' \ 0xfd 0xff 0xfe 0xfc 0xf9 0xff 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfa 0xff 0xff 0xf9 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xff 0xfc 0xff 0xff \ ' + ffs + ' \ 0xff 0xf8 0xff 0xfe 0xff 0xff 0xfa 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf9 0xff 0xfc 0xff 0xff 0xff 0xfd \ ' + ffs + ' \ 0xfc 0xfd 0xfd 0xfd 0xff 0xff 0xff 0xff \ ' + ffs + ' \ 0xfd 0xff 0xfe 0xff 0xfe 0xfc 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xf9 0xff 0xff 0xfc 0xff 0xfc 0xfd 0xff \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfe 0xff 0xff 0xfd \ ' + ffs + ' \ 0xff 0xfd 0xff 0xf9 0xff 0xff 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfb 0xfd 0xff 0xff 0x0 0x7 0x0 \ 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 \ 0x1 0x0 0x1 0x0 0xff 0xfd 0xff 0xfd \ ' + ffs + ' \ 0xff 0x0 0x4 0x4 0xfc 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xfd 0xff 0xff 0x0 0x3 0x0 \ 0x0 0x0 0x5 0x0 0x1 0x0 0x1 0x1 \ 0x0 0x0 0x0 0x3 0xff 0xfe 0xfd 0xff \ 0xfd 0xff 0xff 0xff 0xff 0xfb 0xff 0xff \ 0xfd 0x0 0x0 0x0 0xff 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfd 0xff 0xfb 0xf8 0x4c 0x0 0x4 \ 0x5b 0x87 0x80 0x84 0x81 0x85 0x87 0x81 \ 0x82 0x7f 0x88 0x85 0xf6 0xff 0xff 0xfc \ 0xff 0xfc 0xff 0xff 0xfc 0xff 0xfb 0xfd \ 0xff 0x3 0x3 0x5 0xff 0xff 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xf9 0xff 0xff 0xf6 0x2a 0x0 \ 0x17 0xde 0xfe 0xff 0xff 0xf8 0xff 0xfb \ 0xff 0xff 0xff 0xfe 0xff 0xfc 0xff 0xfd \ 0xfe 0xff 0xff 0xff 0xfc 0xfd 0xff 0xfe \ 0xfa 0x0 0x2 0x0 0xff 0xfc 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xff 0xfe 0xff 0xf8 0xff 0xea 0x22 \ 0x7 0x22 0xe6 0xfc 0xff 0xff 0xfe 0xff \ 0xff 0xff 0xf8 0xff 0xfd 0xfe 0xff 0xff \ 0xff 0xfb 0xff 0xfb 0xff 0xff 0xff 0xfc \ 0xff 0x1 0x6 0x0 0xff 0xfc 0xff 0xfc \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfa 0xff 0xff 0xfd 0xfd 0xff 0xd1 \ 0xa 0x0 0x2f 0xec 0xff 0xff 0xfa 0xff \ 0xff 0xfe 0xff 0xff 0xfb 0xff 0x84 0x80 \ 0x83 0x7c 0x8b 0x7e 0x82 0x86 0x78 0x8c \ 0x83 0x0 0x0 0x9 0x7a 0x83 0x87 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xfe 0xff 0xfa 0xfd 0xff 0xfa 0xff \ 0xbe 0xf 0x0 0x3a 0xf2 0xff 0xff 0xfc \ 0xfc 0xf9 0xff 0xfe 0xff 0xff 0x0 0x3 \ 0x1 0x5 0x0 0x3 0x3 0x4 0x0 0x0 \ 0x1 0x1 0x1 0x0 0xa 0x1 0x0 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfd 0xfc 0xff 0xff \ 0xfc 0x9d 0x9 0x0 0x41 0xf8 0xfa 0xff \ 0xff 0xff 0xfe 0xf8 0xff 0xff 0x2e 0x0 \ 0x1 0x0 0x3 0x0 0x0 0x0 0x9 0x0 \ 0x0 0x3 0x0 0x3 0x0 0x1 0x0 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf8 0xfe 0xfd 0xff 0xff 0xfd 0xff \ 0xff 0xff 0x7d 0x0 0x2 0x52 0xfe 0xfe \ 0xfe 0xff 0xff 0xff 0xff 0xfd 0xc0 0x4 \ 0x0 0x38 0xfa 0xff 0xff 0xff 0xf7 0xff \ 0xff 0x0 0x0 0x2 0xfe 0xff 0xff 0xfc \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xfa 0xff 0xff 0xfc 0xfe 0xff \ 0xff 0xff 0xff 0x63 0x0 0x0 0x62 0xff \ 0xff 0xff 0xf9 0xff 0xfb 0xff 0xfd 0x69 \ 0x0 0x0 0x90 0xfc 0xfd 0xff 0xff 0xfd \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfc 0xfc 0xff 0xff 0xff 0xfd \ 0xfd 0xff 0xf5 0xfb 0x40 0x0 0x6 0x86 \ 0xff 0xfa 0xff 0xfa 0xff 0xfc 0xff 0xf8 \ 0x22 0x0 0x7 0xe4 0xff 0xfd 0xf9 0xff \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfb 0xff 0xff 0xff 0xfd 0xfa 0xff 0xfd \ 0xfe 0xff 0xff 0xf8 0xf1 0x2a 0x0 0x0 \ 0xb5 0xff 0xff 0xff 0xfa 0xff 0xff 0xf6 \ 0xb1 0x3 0x3 0x44 0xfd 0xf8 0xff 0xfb \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xfe 0xf8 0xff 0xfc 0xff 0xfd 0xff \ 0xff 0xff 0xfa 0xff 0xfd 0xd6 0x8 0x0 \ 0x11 0xec 0xff 0xfb 0xff 0xff 0xf9 0xff \ 0xff 0x60 0x0 0x5 0x9e 0xff 0xfb 0xfc \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfd 0xff 0xff 0xff \ 0xff 0xfa 0xff 0xff 0xfe 0xfb 0xa0 0x1 \ 0x5 0x5b 0xf8 0xff 0xfe 0xff 0xff 0xf7 \ 0xfc 0xee 0x1a 0x0 0x10 0xea 0xfc 0xff \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfa 0xfa 0xff 0xfa 0xff 0xff 0xfe 0xf8 \ 0xff 0xfd 0xff 0xf9 0xfe 0xff 0xfd 0x37 \ 0x2 0x0 0xcb 0xff 0xfd 0xff 0xff 0xfe \ 0xff 0xfe 0xa8 0x3 0x2 0x5c 0xfe 0xff \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xff 0xfd 0xff 0xf9 0xff \ 0xff 0xff 0xfe 0xff 0xff 0xff 0xf7 0xad \ 0x2 0x0 0x6f 0xfb 0xfb 0xff 0xfb 0xff \ 0xfd 0xff 0xf8 0x52 0x0 0x0 0xb9 0xfb \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xff 0xfb 0xff 0xb7 0xaf 0xb7 0xfe \ 0xff 0xff 0xf9 0xff 0xfa 0xff 0xff 0xde \ 0x0 0x2 0x22 0xfd 0xff 0xff 0xfd 0xff \ 0xfe 0xff 0xff 0xdd 0x11 0x3 0x17 0xf9 \ 0xff 0x0 0x1 0x2 0xff 0xff 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfb 0xfd 0xff 0xff 0xf 0x0 0x4 0xf1 \ 0xff 0xff 0xfe 0xff 0xfb 0xff 0xf8 0xfe \ 0x1 0x0 0x10 0xf9 0xfc 0xff 0xff 0xff \ 0xfc 0xff 0xfb 0xfc 0x9e 0x0 0x0 0x70 \ 0xff 0x3 0x0 0x2 0xff 0xff 0xfc 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfa 0xfd 0xff 0x37 0x0 0x4 0xb9 \ 0xfc 0xff 0xfc 0xf5 0xff 0xff 0xfe 0xd3 \ 0x0 0x0 0x14 0xfa 0xff 0xff 0xfb 0xff \ 0xff 0xf5 0xff 0xff 0xfa 0x41 0x0 0x4 \ 0xc5 0x0 0x7 0x0 0xff 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xf9 0xff 0x8b 0x0 0x3 0x44 \ 0xff 0xff 0xff 0xff 0xfb 0xf9 0xfd 0x6e \ 0x0 0x6 0x45 0xff 0xf9 0xff 0xff 0xff \ 0xfb 0xff 0xff 0xff 0xff 0xd6 0x5 0x4 \ 0x32 0x6 0x0 0x5 0xfa 0xfc 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xf8 0xf2 0x1c 0x0 0x2 \ 0x6e 0xfa 0xfc 0xff 0xfb 0xff 0x9d 0x3 \ 0x2 0x0 0xa3 0xfd 0xff 0xfa 0xff 0xfe \ 0xff 0xfb 0xff 0xfb 0xff 0xff 0x89 0x0 \ 0x0 0x0 0x2 0x7 0xff 0xff 0xfa 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xfd 0xfd 0xff 0xfd 0xac 0x6 0x5 \ 0x4 0x12 0x61 0x7d 0x7a 0x31 0x0 0x5 \ 0x0 0x46 0xff 0xfd 0xfd 0xff 0xfd 0xff \ 0xff 0xfa 0xfd 0xff 0xff 0xf8 0xfc 0x36 \ 0x3 0x0 0x4 0x2 0xf4 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0xff 0xb9 0x5 \ 0x0 0x1 0x0 0x0 0x0 0x0 0x2 0x0 \ 0x58 0xf7 0xff 0xfe 0xff 0xf9 0xff 0xff \ 0xfb 0xff 0xff 0xf7 0xff 0xfa 0xff 0xcb \ 0x3 0x0 0x0 0x2 0xff 0xf8 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xf9 0xff 0xfe 0xff 0xf9 0xfe 0xfb \ 0x8e 0x3b 0x23 0x4 0x9 0x2d 0x5c 0xc2 \ 0xff 0xfb 0xff 0xff 0xfe 0xff 0xff 0xf9 \ 0xfd 0xff 0xf7 0xff 0xff 0xff 0xfd 0xfe \ 0x74 0xb 0x0 0x0 0xff 0xff 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xfb 0xff 0xfc 0xff 0xfb 0xfc \ 0xfd 0xff 0xfd 0xff 0xff 0xfd 0xff 0xfe \ 0xff 0xfe 0xff 0xfa 0xff 0xff 0xf9 0xff \ 0xff 0xfb 0xff 0xfe 0xff 0xfe 0xff 0xff \ 0xff 0xfc 0xff 0xff 0xfe 0xfd 0xff 0xfc \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' ' face30.image = '80 80 1 \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfb 0xff 0xff 0xff 0xfe 0xff 0xff 0xff \ 0xfe 0xff 0xfd 0xfd 0xfd 0xfe 0xff 0xfc \ ' + ffs + ' \ 0xfc 0xfc 0xff 0xff 0xff 0xff 0xfc 0xff \ 0xfd 0xff 0xff 0xff 0xfd 0xfe 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfd 0xfd 0xfd 0xfe 0xfe \ 0xff 0xff 0xfc 0xff 0xff 0xfd 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xfe 0xfb 0xfd 0xff 0xfe 0xfb \ 0xff 0xfb 0xfb 0xff 0xff 0xff 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xfe 0xff 0xff 0xff 0xff 0xff \ 0xfa 0xfe 0xfd 0xff 0xff 0xfc 0xff 0xfe \ ' + ffs + ' \ 0xf9 0xff 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xfd 0xfb 0xfb 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xff 0xff 0xff 0xff 0xff \ 0xff 0xff 0xff 0xff 0xff 0xfe 0xff 0xff \ ' + ffs + ' \ 0xff 0xff 0xfc 0xff 0xff 0xfe 0xff 0xf9 \ 0xfa 0xfe 0xff 0xfd 0xff 0xff 0xff 0xfa \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xfe 0xfc 0xfc 0xfe \ 0xfd 0xf8 0xfb 0xff 0xff 0xff 0xfe 0xff \ ' + ffs + ' \ 0xff 0xff 0xfd 0xff 0xff 0xfe 0xff 0xff \ 0xff 0xff 0xff 0xff 0xfe 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xfd 0xfd 0xff 0xff 0xff \ 0xff 0xff 0xff 0xfe 0xfc 0xff 0xfd 0xfa \ ' + ffs + ' \ 0xff 0xfb 0xff 0xff 0xff 0xff 0xfa 0xfe \ 0xff 0xfd 0xfe 0xff 0xff 0xfd 0xfe 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xfc 0xff 0xff 0xff 0xf9 \ 0xfe 0xfc 0xff 0xff 0xfd 0xfe 0xfd 0xff \ ' + ffs + ' \ 0xff 0xfb 0xff 0xfa 0xfb 0xff 0xfe 0xff \ 0xff 0xff 0xff 0xfe 0xfc 0xfe 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xfc 0xff 0xff 0xf6 0xe8 \ 0x7d 0x3a 0xe 0x6 0x11 0x35 0x83 0xde \ ' + ffs + ' \ 0xff 0xff 0xf3 0x98 0x3e 0x17 0x2 0x14 \ 0x3c 0x94 0xeb 0xff 0xff 0xfe 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xff 0xfc 0xfe 0xff 0x7d 0x7 \ 0x0 0x0 0x6 0x0 0x5 0x0 0x0 0x6 \ 0x89 0xff 0xff 0xff 0xfc 0xff 0xfa 0xff \ 0xff 0xcf 0x1c 0x0 0x2 0x0 0x1 0x1 \ 0x1 0x0 0x1d 0xcf 0xfc 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfd 0xfc 0xff 0xfe 0x64 0x0 0x2 \ 0x2 0x30 0x69 0x82 0x67 0x27 0xd 0x0 \ 0x1 0x7c 0xfa 0xfe 0xff 0xff 0xff 0xfb \ 0xdf 0x7 0x0 0x0 0x16 0x64 0x77 0x63 \ 0x17 0x0 0x0 0x6 0xdc 0xfe 0xff 0xfb \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xff 0xff 0xff 0xb2 0x7 0x0 0x3 \ 0xa6 0xfd 0xff 0xff 0xff 0xff 0xa0 0x1 \ 0x0 0x0 0xcd 0xff 0xfb 0xfc 0xfd 0xff \ 0x38 0x2 0x6 0x3f 0xea 0xf9 0xff 0xfb \ 0xf0 0x44 0x4 0x1 0x3d 0xff 0xf9 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xfb 0xff 0x4d 0x0 0x9 0x7d \ 0xff 0xf8 0xff 0xfb 0xff 0xfd 0xfd 0x84 \ 0x5 0x0 0x68 0xfb 0xff 0xfc 0xff 0xd1 \ 0x5 0x0 0x11 0xeb 0xff 0xfe 0xff 0xff \ 0xfb 0xf4 0xe 0x0 0x3 0xda 0xf8 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xfe 0xff 0x19 0x5 0x0 0xec \ 0xfe 0xff 0xff 0xff 0xff 0xff 0xfc 0xd7 \ 0x0 0x0 0x1f 0xff 0xfb 0xff 0xff 0x7d \ 0x1 0x2 0x74 0xfb 0xff 0xff 0xf8 0xff \ 0xff 0xff 0x6e 0x4 0x0 0x85 0xff 0xfa \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfe 0xff 0xfb 0x7a 0x80 0x7a 0xf7 \ 0xfd 0xfc 0xff 0xfd 0xff 0xfc 0xff 0xf7 \ 0x4 0x3 0xa 0xfd 0xff 0xff 0xf0 0x59 \ 0x0 0x0 0xb3 0xff 0xff 0xfd 0xff 0xfd \ 0xfe 0xff 0xb3 0x0 0x0 0x51 0xff 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfd 0xff 0xfa 0xf8 0xff 0xfd 0xff 0xff \ 0xff 0xff 0xf6 0xff 0xff 0xff 0xf8 0xf0 \ 0x0 0x2 0x1f 0xff 0xfd 0xfc 0xff 0x27 \ 0x0 0x2 0xdf 0xfd 0xfd 0xff 0xfa 0xff \ 0xff 0xfe 0xdc 0x2 0x5 0x32 0xfa 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfd 0xff 0xff 0xfc 0xff 0xfe 0xfd \ 0xff 0xf9 0xff 0xfe 0xfd 0xff 0xfd 0xad \ 0x0 0x2 0x4e 0xff 0xfc 0xfd 0xff 0x13 \ 0x2 0x0 0xf9 0xfd 0xff 0xff 0xfa 0xff \ 0xfe 0xff 0xef 0x0 0x0 0x1d 0xfb 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfc 0xff 0xfd 0xff 0xff 0xfb 0xe6 0x25 \ 0x0 0x5 0xc2 0xfc 0xff 0xff 0xf7 0xd \ 0x0 0x0 0xff 0xfe 0xff 0xfe 0xfc 0xff \ 0xff 0xfe 0xfb 0x0 0x4 0xb 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfd 0xfb 0xf8 0xd3 0x85 0x19 0x0 \ 0x0 0x65 0xff 0xff 0xf7 0xfb 0xff 0x0 \ 0x2 0x0 0xff 0xfe 0xff 0xff 0xfe 0xff \ 0xfe 0xff 0xfe 0x1 0x0 0x6 0xfd 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0x86 0x0 0x7 0x0 0x0 0x0 0x0 0x1f \ 0x99 0xff 0xff 0xff 0xff 0xff 0xff 0x0 \ 0x2 0x3 0xff 0xfe 0xfe 0xff 0xff 0xfe \ 0xfd 0xff 0xff 0x1 0x0 0x3 0xfc 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0x84 0x0 0x1 0x2 0x5 0x3 0x2b 0xe3 \ 0xfe 0xff 0xff 0xfd 0xff 0xfc 0xfb 0x2 \ 0x0 0x3 0xff 0xff 0xfc 0xff 0xff 0xfe \ 0xff 0xff 0xff 0x0 0x2 0x4 0xfe 0xfd \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xbb 0x8e 0x7b 0x71 0x31 0x0 0x0 0x12 \ 0xc7 0xff 0xff 0xfb 0xfe 0xff 0xfc 0x0 \ 0x0 0x5 0xfe 0xff 0xfd 0xff 0xff 0xfe \ 0xff 0xfe 0xff 0x0 0x4 0x4 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xf4 0xff 0xff 0xff 0xaf 0x11 0x0 \ 0xf 0xe8 0xfb 0xff 0xff 0xfd 0xfd 0xb \ 0x0 0x6 0xfb 0xff 0xfd 0xff 0xff 0xfe \ 0xff 0xff 0xfd 0x1 0x1 0x9 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xfc 0xff 0xff 0xf8 0xfc 0xff 0x83 0x0 \ 0x0 0x7d 0xff 0xf6 0xfb 0xff 0xff 0xf \ 0x0 0x2 0xf3 0xff 0xfd 0xff 0xff 0xff \ 0xff 0xff 0xee 0x4 0x0 0x18 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ ' + ffs + ' \ 0xff 0xfc 0xfc 0xff 0xff 0xf8 0xeb 0x0 \ 0x0 0x24 0xfc 0xff 0xfd 0xff 0xfc 0x24 \ 0x0 0x0 0xea 0xfd 0xfc 0xff 0xff 0xff \ 0xff 0xff 0xdd 0x5 0x0 0x28 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfd 0xff 0xfd 0x8c 0x8a 0x8b 0xff \ 0xff 0xff 0xfb 0xff 0xfe 0xfe 0xff 0x4 \ 0x0 0xa 0xff 0xfb 0xff 0xfd 0xfd 0x4d \ 0x0 0x1 0xbc 0xff 0xfc 0xff 0xff 0xff \ 0xff 0xff 0xba 0x0 0x0 0x55 0xff 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xff 0xff 0xff 0x14 0x6 0x0 0xe1 \ 0xfb 0xff 0xff 0xfe 0xfe 0xff 0xe6 0x0 \ 0x0 0xf 0xff 0xfc 0xfd 0xff 0xff 0x75 \ 0x2 0x0 0x80 0xff 0xff 0xfd 0xff 0xfd \ 0xff 0xf9 0x78 0x0 0x3 0x7a 0xfc 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xf8 0xfe 0x5a 0x0 0x0 0x96 \ 0xff 0xfe 0xfd 0xfd 0xff 0xfd 0xa9 0x0 \ 0x0 0x4d 0xff 0xfe 0xff 0xff 0xfa 0xc9 \ 0x0 0x7 0x17 0xf2 0xfc 0xfc 0xff 0xff \ 0xff 0xee 0x1a 0x0 0x0 0xd0 0xff 0xfc \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfb 0xff 0xfc 0xbc 0x7 0x0 0x8 \ 0xbb 0xfb 0xff 0xfd 0xff 0xd8 0x16 0x4 \ 0x4 0x99 0xf3 0xff 0xfa 0xfa 0xff 0xff \ 0x35 0x0 0x5 0x47 0xf9 0xff 0xff 0xfa \ 0xee 0x4b 0x6 0x0 0x33 0xfc 0xfd 0xfe \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfc 0xff 0xfd 0xff 0xfb 0x6d 0x1 0x2 \ 0x0 0x3d 0x79 0x77 0x56 0x9 0x0 0x0 \ 0x35 0xfa 0xff 0xff 0xfe 0xff 0xfe 0xfe \ 0xcf 0xc 0x3 0x0 0xe 0x65 0x7f 0x60 \ 0x13 0x0 0x0 0xe 0xd6 0xff 0xff 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfd 0xfc 0xff 0xfe 0xfb 0x74 0x0 \ 0x0 0x0 0x0 0x0 0x0 0x0 0x3 0x45 \ 0xed 0xff 0xf4 0xfe 0xff 0xfd 0xfe 0xff \ 0xff 0xc7 0x14 0x2 0x7 0x1 0x0 0x5 \ 0x1 0x6 0x1c 0xc2 0xff 0xff 0xf7 0xff \ ' + ffs4 + ' \ ' + ffs + ' \ 0xff 0xfc 0xff 0xff 0xfb 0xff 0xfa 0xd6 \ 0x64 0x26 0xf 0x9 0x19 0x56 0xb1 0xff \ 0xfc 0xff 0xff 0xfb 0xff 0xff 0xfc 0xff \ 0xff 0xff 0xf7 0x8f 0x3a 0x13 0x3 0x12 \ 0x3d 0x91 0xec 0xff 0xff 0xf9 0xff 0xfb \ ' + ffs4 + ' \ ' + ffs + ' \ 0xfe 0xff 0xfc 0xff 0xfe 0xff 0xfa 0xfe \ 0xff 0xfa 0xff 0xfd 0xff 0xfd 0xff 0xfc \ 0xff 0xf8 0xff 0xfe 0xfc 0xff 0xfe 0xff \ 0xff 0xff 0xf9 0xfe 0xff 0xff 0xff 0xfe \ 0xfd 0xff 0xff 0xfc 0xfb 0xff 0xff 0xff \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs64 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs16 + ' \ ' + ffs + ' \ ' + ffs + ' \ ' + ffs + ' ' dist = p04.distanceToLineSegment(p04p00, p04p00p03).Length / 5.0 dx = DVU.scale(p04.sub(p03).normalize(), dist) dy = DVU.scale(p01.sub(p01p00p02).normalize(), dist) v0 = p04p00p03.add(Base.Vector(0.0, 0.0, 0.01)).sub(DVU.scale(dy, 3.0)) mkarrow(v0, dx, dy, "arrow00p") dist = p01.distanceToLineSegment(p01p00, p01p00p02).Length / 5.0 dx = DVU.scale(p01.sub(p02).normalize(), dist) dy = DVU.scale(p04.sub(p04p00p03).normalize(), dist) v0 = p01p00p02.add(Base.Vector(0.0, 0.0, 0.01)).sub(DVU.scale(dy, 3.0)) mkarrow(v0, dx, dy, "arrow00m") dist = p10.distanceToLineSegment(p10p23, p10p23p00).Length / 5.0 dx = DVU.scale(p10.sub(p00).normalize(), dist) dy = DVU.scale(p11.sub(p11p01p23).normalize(), dist) v0 = p10p00.add(DVU.scale(p10, 0.01)).add(dy).add(dy).add(dx) mkarrow(v0, dx, dy, "arrow10p") dist = p11.distanceToLineSegment(p11p23, p11p23p01).Length / 5.0 dx = DVU.scale(p11.sub(p01).normalize(), dist) dy = DVU.scale(p10.sub(p10p00p23).normalize(), dist) v0 = p11p01.add(DVU.scale(p11, 0.01)).add(dy).add(dy).add(dx) mkarrow(v0, dx, dy, "arrow10m") dist = p11.distanceToLineSegment(p11p24, p11p24p01).Length / 5.0 dx = DVU.scale(p11.sub(p01).normalize(), dist) dy = DVU.scale(p12.sub(p12p02p24).normalize(), dist) v0 = p11p01.add(DVU.scale(p11, 0.01)).add(dy).add(dy).add(dx) mkarrow(v0, dx, dy, "arrow11p") dist = p12.distanceToLineSegment(p12p24, p12p24p02).Length / 5.0 dx = DVU.scale(p12.sub(p02).normalize(), dist) dy = DVU.scale(p11.sub(p11p01p24).normalize(), dist) v0 = p12p02.add(DVU.scale(p12, 0.01)).add(dy).add(dy).add(dx) mkarrow(v0, dx, dy, "arrow11m") fs = "arrow12p" dist = p12.distanceToLineSegment(p12p20, p12p20p02).Length / 5.0 dx = DVU.scale(p12.sub(p02).normalize(), dist) dy = DVU.scale(p13.sub(p13p03p20).normalize(), dist) v0 = p12p02.add(DVU.scale(p12, 0.01)).add(dy).add(dy).add(dx) mkarrow(v0, dx, dy, "arrow12p") dist = p13.distanceToLineSegment(p13p20, p13p20p03).Length / 5.0 dx = DVU.scale(p13.sub(p03).normalize(), dist) dy = DVU.scale(p12.sub(p12p02p20).normalize(), dist) v0 = p13p03.add(DVU.scale(p13, 0.01)).add(dy).add(dy).add(dx) mkarrow(v0, dx, dy, "arrow12m") dist = p13.distanceToLineSegment(p13p21, p13p21p03).Length / 5.0 dx = DVU.scale(p13.sub(p03).normalize(), dist) dy = DVU.scale(p14.sub(p14p04p21).normalize(), dist) v0 = p13p03.add(DVU.scale(p13, 0.01)).add(dy).add(dy).add(dx) mkarrow(v0, dx, dy, "arrow13p") dist = p14.distanceToLineSegment(p14p21, p14p21p04).Length / 5.0 dx = DVU.scale(p14.sub(p04).normalize(), dist) dy = DVU.scale(p13.sub(p13p03p21).normalize(), dist) v0 = p14p04.add(DVU.scale(p14, 0.01)).add(dy).add(dy).add(dx) mkarrow(v0, dx, dy, "arrow13m") dist = p14.distanceToLineSegment(p14p22, p14p22p04).Length / 5.0 dx = DVU.scale(p14.sub(p04).normalize(), dist) dy = DVU.scale(p10.sub(p10p00p22).normalize(), dist) v0 = p14p04.add(DVU.scale(p14, 0.01)).add(dy).add(dy).add(dx) mkarrow(v0, dx, dy, "arrow14p") dist = p10.distanceToLineSegment(p10p22, p10p22p00).Length / 5.0 dx = DVU.scale(p10.sub(p00).normalize(), dist) dy = DVU.scale(p14.sub(p14p04p22).normalize(), dist) v0 = p10p00.add(DVU.scale(p10, 0.01)).add(dy).add(dy).add(dx) mkarrow(v0, dx, dy, "arrow14m") dist = (p04.distanceToLineSegment( p04p00, p04p00p03).Length * _get("sf")) / -5.0 dx = DVU.scale(p04.sub(p03).normalize(), dist) dy = DVU.scale(p01.sub(p01p00p02).normalize(), dist) v0 = DVU.scale(Base.Vector( - p01p00p02.x, p01p00p02.y, p01p00p02.z), _get("sf")) v0 = v0.add(Base.Vector( _get("dd") * c0, _get("dd") * s0, 0.01).sub(DVU.scale(dy, 3.0))) mkarrow(v0, dx, dy, "arrow20p") dist = (p04.distanceToLineSegment( p04p00, p04p00p03).Length * _get("sf")) / -5.0 dx = DVU.scale(p01.sub(p02).normalize(), dist) dy = DVU.scale(p04.sub(p04p00p03).normalize(), dist) v0 = DVU.scale(Base.Vector( - p04p00p03.x, p04p00p03.y, p04p00p03.z), _get("sf")) v0 = v0.add(Base.Vector( _get("dd") * c0, _get("dd") * s0, 0.01).sub(DVU.scale(dy, 3.0))) mkarrow(v0, dx, dy, "arrow20m") dist = (p04.distanceToLineSegment( p04p00, p04p00p03).Length * _get("sf")) / -5.0 dx = DVU.scale(p04.sub(p03).normalize(), dist) dy = DVU.scale(p01.sub(p01p00p02).normalize(), dist) v0 = DVU.scale(Base.Vector( - p01p00p02.x, p01p00p02.y, p01p00p02.z), _get("sf")) v0 = v0.add(Base.Vector( _get("dd") * c1, _get("dd") * s1, 0.01).sub(DVU.scale(dy, 3.0))) mkarrow(v0, dx, dy, "arrow21p") dist = (p04.distanceToLineSegment( p04p00, p04p00p03).Length * _get("sf")) / -5.0 dx = DVU.scale(p01.sub(p02).normalize(), dist) dy = DVU.scale(p04.sub(p04p00p03).normalize(), dist) v0 = DVU.scale(Base.Vector( - p04p00p03.x, p04p00p03.y, p04p00p03.z), _get("sf")) v0 = v0.add(Base.Vector( _get("dd") * c1, _get("dd") * s1, 0.01).sub(DVU.scale(dy, 3.0))) mkarrow(v0, dx, dy, "arrow21m") dist = (p04.distanceToLineSegment( p04p00, p04p00p03).Length * _get("sf")) / -5.0 dx = DVU.scale(p04.sub(p03).normalize(), dist) dy = DVU.scale(p01.sub(p01p00p02).normalize(), dist) v0 = DVU.scale(Base.Vector( - p01p00p02.x, p01p00p02.y, p01p00p02.z), _get("sf")) v0 = v0.add(Base.Vector( _get("dd") * c2, _get("dd") * s2, 0.01).sub(DVU.scale(dy, 3.0))) mkarrow(v0, dx, dy, "arrow22p") dist = (p04.distanceToLineSegment( p04p00, p04p00p03).Length * _get("sf")) / -5.0 dx = DVU.scale(p01.sub(p02).normalize(), dist) dy = DVU.scale(p04.sub(p04p00p03).normalize(), dist) v0 = DVU.scale(Base.Vector( - p04p00p03.x, p04p00p03.y, p04p00p03.z), _get("sf")) v0 = v0.add(Base.Vector( _get("dd") * c2, _get("dd") * s2, 0.01).sub(DVU.scale(dy, 3.0))) mkarrow(v0, dx, dy, "arrow22m") dist = (p04.distanceToLineSegment( p04p00, p04p00p03).Length * _get("sf")) / -5.0 dx = DVU.scale(p04.sub(p03).normalize(), dist) dy = DVU.scale(p01.sub(p01p00p02).normalize(), dist) v0 = DVU.scale(Base.Vector( - p01p00p02.x, p01p00p02.y, p01p00p02.z), _get("sf")) v0 = v0.add(Base.Vector( _get("dd") * c3, _get("dd") * s3, 0.01).sub(DVU.scale(dy, 3.0))) mkarrow(v0, dx, dy, "arrow23p") dist = (p04.distanceToLineSegment( p04p00, p04p00p03).Length * _get("sf")) / -5.0 dx = DVU.scale(p01.sub(p02).normalize(), dist) dy = DVU.scale(p04.sub(p04p00p03).normalize(), dist) v0 = DVU.scale(Base.Vector( - p04p00p03.x, p04p00p03.y, p04p00p03.z), _get("sf")) v0 = v0.add(Base.Vector( _get("dd") * c3, _get("dd") * s3, 0.01).sub(DVU.scale(dy, 3.0))) mkarrow(v0, dx, dy, "arrow23m") dist = (p04.distanceToLineSegment( p04p00, p04p00p03).Length * _get("sf")) / -5.0 dx = DVU.scale(p04.sub(p03).normalize(), dist) dy = DVU.scale(p01.sub(p01p00p02).normalize(), dist) v0 = DVU.scale(Base.Vector( - p01p00p02.x, p01p00p02.y, p01p00p02.z), _get("sf")) v0 = v0.add(Base.Vector( _get("dd") * c4, _get("dd") * s4, 0.01).sub(DVU.scale(dy, 3.0))) mkarrow(v0, dx, dy, "arrow24p") dist = (p04.distanceToLineSegment( p04p00, p04p00p03).Length * _get("sf")) / -5.0 dx = DVU.scale(p01.sub(p02).normalize(), dist) dy = DVU.scale(p04.sub(p04p00p03).normalize(), dist) v0 = DVU.scale(Base.Vector( - p04p00p03.x, p04p00p03.y, p04p00p03.z), _get("sf")) v0 = v0.add(Base.Vector( _get("dd") * c4, _get("dd") * s4, 0.01).sub(DVU.scale(dy, 3.0))) mkarrow(v0, dx, dy, "arrow24m") dist = _get("sf") * p12.distanceToLineSegment( p12p20, p12p20p02).Length / 5.0 dx = DVU.scale(p13.sub(p03).normalize(), dist) dx = Base.Vector(- dx.x, dx.y, dx.z) dy = DVU.scale(p13.sub(p13p03p20).normalize(), dist) dy = Base.Vector(- dy.x, - dy.y, dy.z) v0 = Base.Vector( _get("dd") * c0 - p12p02.x * _get("sf"), _get("dd") * s0 - p12p02.y * _get("sf"), p12p02.z * _get("sf") * 1.01).add(dy).add(dy).add(dx) mkarrow(v0, dx, dy, "arrow30p") ex = Base.Vector(dx.x * c1 - dx.y * s1, dx.x * s1 + dx.y * c1, dx.z) ey = Base.Vector(dy.x * c1 - dy.y * s1, dy.x * s1 + dy.y * c1, dy.z) v0 = Base.Vector( _get("dd") * c1 - p13p03.x * _get("sf"), _get("dd") * s1 - p13p03.y * _get("sf"), p13p03.z * _get("sf") * 1.01).add(ey).add(ey).add(ex) mkarrow(v0, ex, ey, "arrow30q") ex = Base.Vector(dx.x * c2 - dx.y * s2, dx.x * s2 + dx.y * c2, dx.z) ey = Base.Vector(dy.x * c2 - dy.y * s2, dy.x * s2 + dy.y * c2, dy.z) v0 = Base.Vector( _get("dd") * c2 - p14p04.x * _get("sf"), _get("dd") * s2 - p14p04.y * _get("sf"), p14p04.z * _get("sf") * 1.01).add(ey).add(ey).add(ex) mkarrow(v0, ex, ey, "arrow30r") ex = Base.Vector(dx.x * c3 - dx.y * s3, dx.x * s3 + dx.y * c2, dx.z) ey = Base.Vector(dy.x * c3 - dy.y * s3, dy.x * s3 + dy.y * c2, dy.z) v0 = Base.Vector( _get("dd") * c3 - p10p00.x * _get("sf"), _get("dd") * s3 - p10p00.y * _get("sf"), p10p00.z * _get("sf") * 1.01).add(ey).add(ey).add(ex) mkarrow(v0, ex, ey, "arrow30s") ex = Base.Vector(dx.x * c4 - dx.y * s4, dx.x * s4 + dx.y * c4, dx.z) ey = Base.Vector(dy.x * c4 - dy.y * s4, dy.x * s4 + dy.y * c4, dy.z) v0 = Base.Vector( _get("dd") * c4 - p11p01.x * _get("sf"), _get("dd") * s4 - p11p01.y * _get("sf"), p11p01.z * _get("sf") * 1.01).add(ey).add(ey).add(ex) mkarrow(v0, ex, ey, "arrow30t") dist = _get("sf") * p12.distanceToLineSegment( p12p20, p12p20p02).Length / 5.0 dx = DVU.scale(p12.sub(p02).normalize(), dist) dx = Base.Vector(- dx.x, dx.y, dx.z) dy = DVU.scale(p13.sub(p13p03p20).normalize(), dist) dy = Base.Vector(- dy.x, dy.y, dy.z) v0 = Base.Vector( _get("dd") * c0 - p13p03.x * _get("sf"), _get("dd") * s0 - p13p03.y * _get("sf"), p13p03.z * _get("sf") * 1.01).add(dy).add(dy).add(dx) mkarrow(v0, dx, dy, "arrow30m") ex = Base.Vector(dx.x * c1 - dx.y * s1, dx.x * s1 + dx.y * c1, dx.z) ey = Base.Vector(dy.x * c1 - dy.y * s1, dy.x * s1 + dy.y * c1, dy.z) v0 = Base.Vector( _get("dd") * c1 - p14p04.x * _get("sf"), _get("dd") * s1 - p14p04.y * _get("sf"), p14p04.z * _get("sf") * 1.01).add(ey).add(ey).add(ex) mkarrow(v0, ex, ey, "arrow30l") ex = Base.Vector(dx.x * c2 - dx.y * s2, dx.x * s2 + dx.y * c2, dx.z) ey = Base.Vector(dy.x * c2 - dy.y * s2, dy.x * s2 + dy.y * c2, dy.z) v0 = Base.Vector( _get("dd") * c2 - p10p00.x * _get("sf"), _get("dd") * s2 - p10p00.y * _get("sf"), p10p00.z * _get("sf") * 1.01).add(ey).add(ey).add(ex) mkarrow(v0, ex, ey, "arrow30k") ex = Base.Vector(dx.x * c3 - dx.y * s3, dx.x * s3 + dx.y * c3, dx.z) ey = Base.Vector(dy.x * c3 - dy.y * s3, dy.x * s3 + dy.y * c3, dy.z) v0 = Base.Vector( _get("dd") * c3 - p11p01.x * _get("sf"), _get("dd") * s3 - p11p01.y * _get("sf"), p11p01.z * _get("sf") * 1.01).add(ey).add(ey).add(ex) mkarrow(v0, ex, ey, "arrow30j") ex = Base.Vector(dx.x * c4 - dx.y * s4, dx.x * s4 + dx.y * c4, dx.z) ey = Base.Vector(dy.x * c4 - dy.y * s4, dy.x * s4 + dy.y * c4, dy.z) v0 = Base.Vector( _get("dd") * c4 - p12p02.x * _get("sf"), _get("dd") * s4 - p12p02.y * _get("sf"), p12p02.z * _get("sf") * 1.01).add(ey).add(ey).add(ex) mkarrow(v0, ex, ey, "arrow30i") vv = Base.Vector(0.0, 0.0, 0.1) dx = DVU.scale(p03.sub(p23).normalize(), 0.2) dy = DVU.scale(p00.sub(p01).normalize(), 0.2) v0 = DVU.scale(p00.add(p01), 0.5).add(vv) mkarrowx(v0, dx, dy, "arrow00x", "00 and 10") dx = DVU.scale(p04.sub(p24).normalize(), 0.2) dy = DVU.scale(p01.sub(p02).normalize(), 0.2) v0 = DVU.scale(p01.add(p02), 0.5).add(vv) mkarrowx(v0, dx, dy, "arrow01x", "00 and 11") dx = DVU.scale(p00.sub(p20).normalize(), 0.2) dy = DVU.scale(p02.sub(p03).normalize(), 0.2) v0 = DVU.scale(p02.add(p03), 0.5).add(vv) mkarrowx(v0, dx, dy, "arrow02x", "00 and 12") dx = DVU.scale(p01.sub(p21).normalize(), 0.2) dy = DVU.scale(p03.sub(p04).normalize(), 0.2) v0 = DVU.scale(p03.add(p04), 0.5).add(vv) mkarrowx(v0, dx, dy, "arrow03x", "00 and 13") dx = DVU.scale(p02.sub(p22).normalize(), 0.2) dy = DVU.scale(p04.sub(p00).normalize(), 0.2) v0 = DVU.scale(p04.add(p00), 0.5).add(vv) mkarrowx(v0, dx, dy, "arrow04x", "00 and 14") dx = DVU.scale(p10.sub(p12).normalize(), 0.2) dy = DVU.scale(p01.sub(p11).normalize(), 0.2) v0 = DVU.scale(p01.add(p11), 0.5).add(vv) mkarrowx(v0, dx, dy, "arrow10x", "10 and 11") dx = DVU.scale(p11.sub(p13).normalize(), 0.2) dy = DVU.scale(p02.sub(p12).normalize(), 0.2) v0 = DVU.scale(p02.add(p12), 0.5).add(vv) mkarrowx(v0, dx, dy, "arrow11x", "11 and 12") dx = DVU.scale(p12.sub(p14).normalize(), 0.2) dy = DVU.scale(p03.sub(p13).normalize(), 0.2) v0 = DVU.scale(p03.add(p13), 0.5).add(vv) mkarrowx(v0, dx, dy, "arrow12x", "12 and 13") dx = DVU.scale(p13.sub(p10).normalize(), 0.2) dy = DVU.scale(p04.sub(p14).normalize(), 0.2) v0 = DVU.scale(p04.add(p14), 0.5).add(vv) mkarrowx(v0, dx, dy, "arrow13x", "13 and 14") dx = DVU.scale(p14.sub(p11).normalize(), 0.2) dy = DVU.scale(p00.sub(p10).normalize(), 0.2) v0 = DVU.scale(p00.add(p10), 0.5).add(vv) mkarrowx(v0, dx, dy, "arrow14x", "14 and 10") dx = DVU.scale(p12.sub(p22).normalize(), 0.2) dy = DVU.scale(p03.sub(p01).normalize(), 0.2) v0 = DVU.scale(p00.add(p04), 0.5 * _get("sf")).add(vv) v0 = Base.Vector(_get("dd") * c0, _get("dd") * s0, 0.0).add( Base.Vector(- v0.x, - v0.y, v0.z)) mkarrowx(v0, dx, dy, "arrow20x", "20 and 10") dx = DVU.scale(p13.sub(p23).normalize(), 0.2) dy = DVU.scale(p04.sub(p02).normalize(), 0.2) v0 = DVU.scale(p01.add(p00), 0.5 * _get("sf")).add(vv) v0 = Base.Vector(_get("dd") * c0, _get("dd") * s0, 0.0).add( Base.Vector(- v0.x, - v0.y, v0.z)) mkarrowx(v0, dx, dy, "arrow22y", "12 and 22") dx = DVU.scale(p13.sub(p23).normalize(), 0.2) dy = DVU.scale(p04.sub(p02).normalize(), 0.2) v0 = DVU.scale(p01.add(p00), 0.5 * _get("sf")).add(vv) v0 = Base.Vector(_get("dd") * c1, _get("dd") * s1, 0.0).add( Base.Vector(- v0.x, - v0.y, v0.z)) mkarrowx(v0, dx, dy, "arrow21x", "21 and 11") dx = DVU.scale(p14.sub(p24).normalize(), 0.2) dy = DVU.scale(p00.sub(p03).normalize(), 0.2) v0 = DVU.scale(p02.add(p01), 0.5 * _get("sf")).add(vv) v0 = Base.Vector(_get("dd") * c1, _get("dd") * s1, 0.0).add( Base.Vector(- v0.x, - v0.y, v0.z)) mkarrowx(v0, dx, dy, "arrow23y", "21 and 11") dx = DVU.scale(p14.sub(p24).normalize(), 0.2) dy = DVU.scale(p00.sub(p03).normalize(), 0.2) v0 = DVU.scale(p02.add(p01), 0.5 * _get("sf")).add(vv) v0 = Base.Vector(_get("dd") * c2, _get("dd") * s2, 0.0).add( Base.Vector(- v0.x, - v0.y, v0.z)) mkarrowx(v0, dx, dy, "arrow22x", "22 and 12") dx = DVU.scale(p10.sub(p20).normalize(), 0.2) dy = DVU.scale(p01.sub(p04).normalize(), 0.2) v0 = DVU.scale(p03.add(p02), 0.5 * _get("sf")).add(vv) v0 = Base.Vector(_get("dd") * c2, _get("dd") * s2, 0.0).add( Base.Vector(- v0.x, - v0.y, v0.z)) mkarrowx(v0, dx, dy, "arrow24y", "22 and 12") dx = DVU.scale(p10.sub(p20).normalize(), 0.2) dy = DVU.scale(p01.sub(p04).normalize(), 0.2) v0 = DVU.scale(p03.add(p02), 0.5 * _get("sf")).add(vv) v0 = Base.Vector(_get("dd") * c3, _get("dd") * s3, 0.0).add( Base.Vector(- v0.x, - v0.y, v0.z)) mkarrowx(v0, dx, dy, "arrow23x", "23 and 13") dx = DVU.scale(p11.sub(p21).normalize(), 0.2) dy = DVU.scale(p02.sub(p00).normalize(), 0.2) v0 = DVU.scale(p04.add(p03), 0.5 * _get("sf")).add(vv) v0 = Base.Vector(_get("dd") * c3, _get("dd") * s3, 0.0).add( Base.Vector(- v0.x, - v0.y, v0.z)) mkarrowx(v0, dx, dy, "arrow20y", "23 and 13") dx = DVU.scale(p11.sub(p21).normalize(), 0.2) dy = DVU.scale(p02.sub(p00).normalize(), 0.2) v0 = DVU.scale(p04.add(p03), 0.5 * _get("sf")).add(vv) v0 = Base.Vector(_get("dd") * c4, _get("dd") * s4, 0.0).add( Base.Vector(- v0.x, - v0.y, v0.z)) mkarrowx(v0, dx, dy, "arrow24x", "24 and 14") dx = DVU.scale(p12.sub(p22).normalize(), 0.2) dy = DVU.scale(p03.sub(p01).normalize(), 0.2) v0 = DVU.scale(p00.add(p04), 0.5 * _get("sf")).add(vv) v0 = Base.Vector(_get("dd") * c4, _get("dd") * s4, 0.0).add( Base.Vector(- v0.x, - v0.y, v0.z)) mkarrowx(v0, dx, dy, "arrow21y", "24 and 14") def rota(name, steps = None): """This function rotates the Megaminx by +72 degrees about the normal to \ face 'name'.\ """ d = FreeCAD.Megaminx_Dictionary key = App.ActiveDocument.Name + "$" + name if steps == None: steps = _get("slowness") if key in d: d[key].rota(steps) else: print(name + " is not a face") def rotm(name, steps = None): """This function rotates face 'name' by -72 degrees.""" d = FreeCAD.Megaminx_Dictionary key = App.ActiveDocument.Name + "$" + name if steps == None: steps = _get("slowness") if key in d: d[key].rotm(steps) else: print(name + " is not a face") def rotp(name, steps = None): """This function rotates face 'name' by +72 degrees.""" d = FreeCAD.Megaminx_Dictionary key = App.ActiveDocument.Name + "$" + name if steps == None: steps = _get("slowness") if key in d: d[key].rotp(steps) else: print(name + " is not a face") def roth(name, steps = None): """This function rotates the history by +72 degrees about the \ normal to face 'name'.\ """ d = FreeCAD.Megaminx_Dictionary key = App.ActiveDocument.Name + "$" + name if key in d: d[key].roth(steps) else: print(name + " is not a face") def reflect(key): """ Replace the history by a reflected one. This replaces the history by the equivalent of reflecting the Megaminx in a plane through the centre of the Megaminx and the edge between two faces, executing the history, and then reflecting the Megaminx back again. This is the function invoked by clicking on the green double headed arrow shown across the two faces. dict is a dictionary specific to the two faces. Reflecting the history can be useful to align it with a real Megaminx before doing step_history(), or to compose more complex macros out of simple ones.\ """ history = _get("history") nh = history[:] reset() hs = _get("historyslowness") d = _get("reflect") if key in d: d = d[key] while len(nh) > 0: s = nh.pop(0) sl = len(s) - 1 f = "" rot = "" steps = "" if sl >= 13 and s[0:3] == "rot" and s[4] == "(" \ and (s[5] == '"' or s[5] == "'") \ and s[5] == s[12] and s.endswith(")"): f = s[6:12] rot = s[0:4] if s[13] == ",": steps = s[14:sl].strip() if steps == "": steps = "0" if rot in ["rota", "rotm", "rotp"] and f in d \ and steps.isnumeric(): fn = d[f] if rot == "rotp": fn._rotm(hs) history.append("rotm('" + fn.name + "', " + steps + ")") elif rot == "rotm": fn._rotp(hs) history.append("rotp('" + fn.name + "', " + steps + ")") elif rot == "rota": opp = fn.opposite opp._rota(hs) history.append("rota('" + opp.name + "', " + steps + ")") else: print("Invalid history entry '" + s + "'") updateMenu() else: print("Bad argument '" + key + "' to reflect()") class StepWindow(QtGui.QDialog): """ This class creates the dialog box shown on each step by step_history(). """ def __init__(self): super(StepWindow, self).__init__() # Lay out the interactive elements mw = Gui.getMainWindow() cw = mw.centralWidget() view3DWidget = findView(cw) if view3DWidget != None: self.setParent(view3DWidget) geom = view3DWidget.geometry() else: self.setParent(cws) geom = cw.geometry() self.setAutoFillBackground(True) margin = 10 height = margin self.label_1 = QtGui.QLabel(self) self.label_1.setObjectName("label_1") font = self.label_1.font() r2 = QtGui.QFontMetrics(font).boundingRect("Doing face00.rotp(steps)") height = height + r2.height() + margin self.OKbutton = QtGui.QPushButton(self) self.OKbutton.setText("OK") self.OKbutton.clicked.connect(self.accept) self.OKbutton.setDefault(True) font = self.OKbutton.font() r3 =QtGui.QFontMetrics(font).boundingRect(" OK ") self.Quitbutton = QtGui.QPushButton(self) self.Quitbutton.setText("Stop") self.Quitbutton.clicked.connect(self.reject) font = self.Quitbutton.font() r4 =QtGui.QFontMetrics(font).boundingRect(" Stop ") # window title width allowing space for some tool buttons width = r2.width() if width < 3 * margin + r3.width() + r4.width(): width = 3 * margin + r3.width() + r4.width() if width > geom.width(): width = geom.width() height = r3.height() if height < r4.height(): height = r4.height() height = height + r2.height() + 4 * margin xpos = geom.left() + (geom.width() - width) / 2 self.setGeometry(geom.right() - width, 0, width, height) ypos = margin self.label_1.setGeometry(QtCore.QRect( (width - r2.width()) / 2, ypos, r2.width(), r2.height())) ypos = ypos + r2.height() + margin self.OKbutton.setGeometry(QtCore.QRect( margin, ypos, r3.width(), r3.height() + margin)) xpos = width - r4.width() - margin self.Quitbutton.setGeometry(QtCore.QRect( xpos, ypos, r4.width(), r4.height() + margin)) self.setFocusPolicy(QtCore.Qt.StrongFocus) self.setFocus() def step_history(): """ Step through the history. It steps through the history, displaying a dialog box at the top right of the window showing what rotation it is about to do. If the user clicks on OK or types a return, the rotation is done and it moves on to the next step: if the user clicks on Stop or types an escape, step_history() quits without doing anything more. This can be used if you want to play the history onto a real Megaminx. """ history = _get("history") nh = history[:] reset() Gui.updateGui() stepping = True while len(nh) > 0 and stepping == True: s = nh.pop(0) sl = len(s) - 1 f = "" rot = "" steps = "" if sl >= 13 and s[0:3] == "rot" and s[4] == "(" \ and (s[5] == '"' or s[5] == "'") \ and s[5] == s[12] and s.endswith(")"): f = s[6:12] rot = s[0:4] if s[13] == ",": steps = s[14:sl].strip() if steps == "": steps = "0" d = FreeCAD.Megaminx_Dictionary key = App.ActiveDocument.Name + "$" + f if rot in ["rota", "rotm", "rotp"] and key in d \ and steps.isnumeric(): fn = d[key] w = StepWindow() w.setWindowModality(QtCore.Qt.WindowModal) w.label_1.setText("Doing " + s) w.label_1.setAlignment(QtCore.Qt.AlignCenter) stepping = w.exec() if stepping: if rot == "rota": fn._rota(int(steps)) history.append("rota('" + fn.name + "', " + steps + ")") elif rot == "rotm": fn._rotm(int(steps)) history.append("rotm('" + fn.name + "', " + steps + ")") elif rot == "rotp": fn._rotp(int(steps)) history.append("rotp('" + fn.name + "', " + steps + ")") else: print("Invalid history entry '" + s + "'") updateMenu() # Randomise the model by doing 120 random face rotations def randomise(): """ Randomise the model. This gives you a puzzle that you can solve.\ """ global echo QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor)) saveecho = _get("echo") _set("echo", False) reset() keys = ["face00", "face10", "face11", "face12", "face13", "face14", "face20", "face21", "face22", "face23", "face24", "face30"] random.seed() for x in range(120): n = random.randrange(0, 24) fn = _get(keys[int(n / 2)]) if n % 2 == 0: fn.rotp(0) else: fn.rotm(0) _set("echo", saveecho) updateMenu() QtGui.QApplication.restoreOverrideCursor() def findView(widget): """ Find the View3DInventor. This is an internal function used to to find the View3DInventor of a widget.\ """ if widget.metaObject().className().__str__() == "Gui::View3DInventor": return widget else: result = None for child in widget.children(): v = findView(child) if v != None: result = v return result class ViewObserver: """ This class catches mouse actions. Mouse clicks are checked to see if they are clicks on the rotation or reflection arrows. Mouse motion is checked to see if the mouse is now over a rotation or reflection arrow: if so we show the tooltip.\ """ def __init__(self): """ Create the callback.\ """ self.view = FreeCADGui.ActiveDocument.ActiveView self.callback = self.view.addEventCallbackPivy( SoMouseButtonEvent.getClassTypeId(), self.mouseclicked) self.callback = self.view.addEventCallbackPivy( SoLocation2Event.getClassTypeId(), self.mousemoved) self.currenTip = "" self.timer = QtCore.QTimer() self.timer.timeout.connect(self.timeout) self.point = QtCore.QPoint() def timeout(self): """ Internal function called every second when the mouse is over an arrow. It redisplays the tooltip preventing Qt's own timer from removing it before you have had time to read it all.\ """ if self.currenTip == "": self.timer.stop() else: QtGui.QToolTip.showText(self.point, self.currenTip) def removeTip(self): """ Internal function called when the mouse is moved and no longer over an arrow. It removes the tootip and stops our timer.\ """ self.timer.stop() QtGui.QToolTip.hideText() self.currenTip = "" def mouseclicked(self, event_cb): """ Internal function called when the user clicks in the document window. Clicks on arrows are caught here, and anything else is passed up.\ """ self.removeTip() event = event_cb.getEvent() pos = event.getPosition().getValue() obInfo = self.view.getObjectInfo((int(pos[0]),int(pos[1]))) if obInfo != None: obname = obInfo["Object"] if len(obname) == 8 and obname[:5] == "arrow": if event.isButtonPressEvent( event, SoMouseButtonEvent.BUTTON1): s = obname[7:8] if s == "y": obname = obname[0:7] + "x" if obname in _get("reflect"): reflect(obname) event_cb.setHandled() elif s in "pqrst": d = FreeCAD.Megaminx_Dictionary f = _get("face" + obname[5:7]) if event.wasShiftDown(): getattr(f, "rota")() event_cb.setHandled() elif event.wasCtrlDown(): getattr(f, "roth")() event_cb.setHandled() else: getattr(f, "rotp")() event_cb.setHandled() elif s in "ijklm": d = FreeCAD.Megaminx_Dictionary f = _get("face" + obname[5:7]) if event.wasShiftDown(): getattr(f.opposite, "rota")() event_cb.setHandled() elif event.wasCtrlDown(): getattr(f.opposite, "roth")() event_cb.setHandled() else: getattr(f, "rotm")() event_cb.setHandled() def mousemoved(self, event_cb): """ Internal function called when the user moves the mouse within the document window. If the mouse is now over an object with a tooltip, we display the tooltip.\ """ event = event_cb.getEvent() pos = event.getPosition().getValue() x0 = int(pos[0]) y0 = int(pos[1]) obInfo = self.view.getObjectInfo((x0, y0)) if obInfo != None: d = FreeCAD.Megaminx_Dictionary key = App.ActiveDocument.Name + "$" + "tooltip" + obInfo["Object"] if key in d: mw = Gui.getMainWindow() view3DWidget = findView(mw.centralWidget()) if view3DWidget != None: geom = view3DWidget.geometry() y1 = geom.height() - y0 self.point = view3DWidget.mapToGlobal( QtCore.QPoint(x0, y1)) self.currenTip = d[key] QtGui.QToolTip.showText(self.point, self.currenTip) self.timer.start(1000) else: self.removeTip() else: self.removeTip() def fixLightModel(): """ This internal function disables the default Phong shading. This prevents the face colours appearing to change during rotations.\ """ v = Gui.ActiveDocument.ActiveView.getViewer() sceneGraph = v.getSoEventManager().getSceneGraph() if str(sceneGraph.getChild(0).getName()) != "LightModel": lm=coin.SoLightModel() lm.model.setValue(0) lm.setName("LightModel") sceneGraph.insertChild(lm,0) def MultiViews(parent, child, i): """ This internal function creates multiple views of an object. It gets applied to all the facets of the Megaminx but not to the arrows.\ """ sf = _get("sf") dd = _get("dd") theta = _get("face00").normal.getAngle(_get("face20").normal) newchild = coin.SoMultipleCopy() newchild.addChild(child) views = coin.SoMFMatrix() views.setNum(6) mat = coin.SbMatrix() mat.makeIdentity() views.set1Value(0, mat) mat = coin.SbMatrix() mat.setTransform( coin.SbVec3f(dd * c1, dd * s1, 0.0), coin.SbRotation(coin.SbVec3f(c0 - c2, s0 - s2, 0.0), theta), coin.SbVec3f(sf, sf, sf)) views.set1Value(1, mat) mat = coin.SbMatrix() mat.setTransform( coin.SbVec3f(dd * c0, dd * s0, 0.0), coin.SbRotation(coin.SbVec3f(c4 - c1, s4 - s1, 0.0), theta), coin.SbVec3f(sf, sf, sf)) views.set1Value(2, mat) mat = coin.SbMatrix() mat.setTransform( coin.SbVec3f(dd * c4, dd * s4, 0.0), coin.SbRotation(coin.SbVec3f(c3 - c0, s3 - s0, 0.0), theta), coin.SbVec3f(sf, sf, sf)) views.set1Value(3, mat) mat = coin.SbMatrix() mat.setTransform( coin.SbVec3f(dd * c3, dd * s3, 0.0), coin.SbRotation(coin.SbVec3f(c2 - c4, s2 - s4, 0.0), theta), coin.SbVec3f(sf, sf, sf)) views.set1Value(4, mat) mat = coin.SbMatrix() mat.setTransform( coin.SbVec3f(dd * c2, dd * s2, 0.0), coin.SbRotation(coin.SbVec3f(c1 - c3, s1 - s3, 0.0), theta), coin.SbVec3f(sf, sf, sf)) views.set1Value(5, mat) newchild.matrix = views parent.replaceChild(i, newchild) def adjustView(): """ This fixes up our special view. We arrange multiple views from different directions of all the parts of the Megaminx, but not the arrows. This enables a user to see all of the faces. Also we set the camera position by hand because FreeCAD's fit view function does not work well with multiple views.\ """ Gui.activeDocument().activeView().viewTop() camera = FreeCADGui.ActiveDocument.ActiveView.getCameraNode() camera.position.setValue(0.2, 0.0, 5.00) camera.scaleHeight(4.3) sg = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph() if sg.getNumChildren() != 0: for i in range(sg.getNumChildren()): child = sg.getChild(i) type = child.getTypeId().getName().__str__() if child.getTypeId().getName().__str__() == 'Separator': name = child.getName().__str__()[:5] if name != "arrow": MultiViews(sg, child, i) if child.getTypeId().getName().__str__() == 'MultipleCopy': if child.getNumChildren() != 0: name = child.getChild(0).getName().__str__() if App.ActiveDocument.getObject(name) == None: child.removeAllChildren() def createMenu(): """ Create the Megaminx menu if needed and add it to the menu bar.\ """ menu = None d = FreeCAD.Megaminx_Dictionary for key in d: if key.endswith("menu"): menu = d[key] _set("menu", menu) break if menu == None: MegaminxMenu = Gui.getMainWindow().menuBar().addMenu("Megamin&x") _set("menu", MegaminxMenu) actionHelp = QtGui.QAction("Show &help", MegaminxMenu) actionHelp.setStatusTip("Display some help text") actionHelp.connect( actionHelp, QtCore.SIGNAL("triggered()"), help_window) MegaminxMenu.addAction(actionHelp) resetAction = QtGui.QAction("&Reset", MegaminxMenu) resetAction.setStatusTip( "Reset the Megaminx to its initial state and clear the history") resetAction.connect(resetAction, QtCore.SIGNAL("triggered()"), reset) MegaminxMenu.addAction(resetAction) undoAction = QtGui.QAction("&Undo", MegaminxMenu) undoAction.setStatusTip( "Undo the last rotation and remove it from the history") undoAction.connect(undoAction, QtCore.SIGNAL("triggered()"), undo) MegaminxMenu.addAction(undoAction) copyAction = QtGui.QAction("&Copy history", MegaminxMenu) copyAction.setStatusTip( "Copy the history to the clipboard") copyAction.connect( copyAction, QtCore.SIGNAL("triggered()"), copy_history) MegaminxMenu.addAction(copyAction) stepAction = QtGui.QAction("ste&P history", MegaminxMenu) stepAction.setStatusTip( "Step through the history showing a dialog box at each step") stepAction.connect( stepAction, QtCore.SIGNAL("triggered()"), step_history) MegaminxMenu.addAction(stepAction) actionUndoHistory = QtGui.QAction("Undo history", MegaminxMenu) actionUndoHistory.setStatusTip( "Replace the history by a new one which reverses it") actionUndoHistory.connect( actionUndoHistory, QtCore.SIGNAL("triggered()"), undo_history) MegaminxMenu.addAction(actionUndoHistory) action = QtGui.QAction("Randomise", MegaminxMenu) action.setStatusTip( "Randomise the Megaminx giving you a puzzle to solve") action.connect(action, QtCore.SIGNAL("triggered()"), randomise) MegaminxMenu.addAction(action) actionEcho = QtGui.QAction("&Echo", MegaminxMenu) actionEcho.setCheckable(True) actionEcho.setChecked(_get("echo")) actionEcho.setStatusTip( "If checked, rotations are echoed to the Report View") actionEcho.connect(actionEcho, QtCore.SIGNAL("triggered()"), _set_echo) MegaminxMenu.addAction(actionEcho) def updateMenu(): """ This updates the menu. Menu items which act on the history are enabled only if the history is not empty and disabled otherwise.\ """ enabled = len(_get("history")) > 0 d = FreeCAD.Megaminx_Dictionary for key in d: if key.endswith("menu"): menu = d[key] for action in menu.actions(): if action.iconText() == "Reset": action.setEnabled(enabled) elif action.iconText() == "Undo": action.setEnabled(enabled) elif action.iconText() == "Copy history": action.setEnabled(enabled) elif action.iconText() == "steP history": action.setEnabled(enabled) elif action.iconText() == "Undo history": action.setEnabled(enabled) break # Now we've defined all these functions, execute them. _set("history", []) make_faces() reset() setTextures() ViewObserver() adjustView() createMenu() updateMenu() fixLightModel() Gui.updateGui() QtGui.QApplication.restoreOverrideCursor()