diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py
index eb9cf9259..a6e12cf7f 100644
--- a/src/Mod/Draft/Draft.py
+++ b/src/Mod/Draft/Draft.py
@@ -96,11 +96,11 @@ def getParamType(param):
"snapRange","gridEvery","linewidth","UiMode","modconstrain","modsnap",
"modalt"]:
return "int"
- elif param in ["constructiongroupname","textfont","patternFile","template"]:
+ elif param in ["constructiongroupname","textfont","patternFile","template","maxSnapEdges"]:
return "string"
elif param in ["textheight","tolerance","gridSpacing"]:
return "float"
- elif param in ["selectBaseObjects","alwaysSnap","grid","fillmode","saveonexit"]:
+ elif param in ["selectBaseObjects","alwaysSnap","grid","fillmode","saveonexit","maxSnap"]:
return "bool"
elif param in ["color","constructioncolor","snapcolor"]:
return "unsigned"
diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py
index 693dded1b..931636cb5 100644
--- a/src/Mod/Draft/DraftGui.py
+++ b/src/Mod/Draft/DraftGui.py
@@ -43,9 +43,14 @@ def getMainWindow():
# widget than the mainwindow is active (e.g. a dialog) the wrong widget is
# returned
toplevel = QtGui.qApp.topLevelWidgets()
+ wins = []
for i in toplevel:
if i.metaObject().className() == "Gui::MainWindow":
- return i
+ wins.append(i)
+ if wins:
+ for w in wins:
+ if w.findChildren(QtGui.QWidget,"QtGLArea"):
+ return w
raise Exception("No main window found")
class todo:
@@ -69,7 +74,7 @@ class todo:
else:
f()
except:
- wrn = "[Draft.todo.tasks] Unexpected error:", sys.exc_info()[0]
+ wrn = "[Draft.todo.tasks] Unexpected error:", sys.exc_info()[0], "in ", f, "(", arg, ")"
FreeCAD.Console.PrintWarning (wrn)
todo.itinerary = []
if todo.commitlist:
@@ -81,7 +86,7 @@ class todo:
func()
FreeCAD.ActiveDocument.commitTransaction()
except:
- wrn = "[Draft.todo.commit] Unexpected error:", sys.exc_info()[0]
+ wrn = "[Draft.todo.commit] Unexpected error:", sys.exc_info()[0], "in ", f, "(", arg, ")"
FreeCAD.Console.PrintWarning (wrn)
todo.commitlist = []
@@ -182,8 +187,7 @@ class DraftToolBar:
self.mw = getMainWindow()
self.mw.addDockWidget(QtCore.Qt.TopDockWidgetArea,self.draftWidget)
self.draftWidget.setVisible(False)
- self.draftWidget.toggleViewAction().setVisible(False)
- self.mw = getMainWindow()
+ self.draftWidget.toggleViewAction().setVisible(False)
self.baseWidget.setObjectName("draftToolbar")
self.layout = QtGui.QHBoxLayout(self.baseWidget)
self.layout.setObjectName("layout")
@@ -973,7 +977,7 @@ class DraftToolBar:
if on:
if not self.crossedViews:
mw = getMainWindow()
- self.crossedViews = mw.findChildren(QtGui.QFrame,"SoQtWidgetName")
+ self.crossedViews = mw.findChildren(QtGui.QWidget,"QtGLArea")
for w in self.crossedViews:
w.setCursor(QtCore.Qt.CrossCursor)
else:
diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py
index 008d6ca48..c0d70f5b3 100644
--- a/src/Mod/Draft/DraftSnap.py
+++ b/src/Mod/Draft/DraftSnap.py
@@ -25,10 +25,496 @@ __title__="FreeCAD Draft Snap tools"
__author__ = "Yorik van Havre"
__url__ = "http://free-cad.sourceforge.net"
-import FreeCAD, FreeCADGui, math, Draft, DraftTrackers, Part
+
+import FreeCAD, FreeCADGui, math, Draft, DraftGui, DraftTrackers, Part, SketcherGui
+from DraftGui import todo
from draftlibs import fcvec,fcgeo
from FreeCAD import Vector
from pivy import coin
+from PyQt4 import QtCore,QtGui
+
+class Snapper:
+ """The Snapper objects contains all the functionality used by draft
+ and arch module to manage object snapping. It is responsible for
+ finding snap points and displaying snap markers. Usually You
+ only need to invoke it's snap() function, all the rest is taken
+ care of."""
+
+ def __init__(self):
+ self.lastObj = [None,None]
+ self.views = []
+ self.maxEdges = 0
+ self.radius = 0
+ if Draft.getParam("maxSnap"):
+ self.maxEdges = Draft.getParam("maxSnapEdges")
+
+ # we still have no 3D view when the draft module initializes
+ self.tracker = None
+ self.extLine = None
+ self.grid = None
+ self.constraintAxis = None
+
+ # the snapmarker has "dot","circle" and "square" available styles
+ self.mk = {'passive':'circle',
+ 'extension':'circle',
+ 'parallel':'circle',
+ 'grid':'circle',
+ 'endpoint':'dot',
+ 'midpoint':'square',
+ 'perpendicular':'square',
+ 'angle':'square',
+ 'center':'dot',
+ 'ortho':'square',
+ 'intersection':'circle'}
+ self.cursors = {'passive':None,
+ 'extension':':/icons/Constraint_Parallel.svg',
+ 'parallel':':/icons/Constraint_Parallel.svg',
+ 'grid':':/icons/Constraint_PointOnPoint.svg',
+ 'endpoint':':/icons/Constraint_PointOnPoint.svg',
+ 'midpoint':':/icons/Constraint_PointOnObject.svg',
+ 'perpendicular':':/icons/Constraint_PointToObject.svg',
+ 'angle':':/icons/Constraint_ExternalAngle.svg',
+ 'center':':/icons/Constraint_Concentric.svg',
+ 'ortho':':/icons/Constraint_Perpendicular.svg',
+ 'intersection':':/icons/Constraint_Tangent.svg'}
+
+ def constrain(self,point,basepoint=None,axis=None):
+ '''constrain(point,basepoint=None,axis=None: Returns a
+ constrained point. Axis can be "x","y" or "z" or a custom vector. If None,
+ the closest working plane axis will be picked.
+ Basepoint is the base point used to figure out from where the point
+ must be constrained. If no basepoint is given, the current point is
+ used as basepoint.'''
+
+ point = Vector(point)
+ dvec = point.sub(basepoint)
+
+ # setting constraint axis
+ if isinstance(axis,FreeCAD.Vector):
+ self.constraintAxis = axis
+ elif axis == "x":
+ self.constraintAxis = FreeCAD.DraftWorkingPlane.u
+ elif axis == "y":
+ self.constraintAxis = FreeCAD.DraftWorkingPlane.v
+ elif axis == "z":
+ self.constraintAxis = FreeCAD.DraftWorkingPlane.axis
+ else:
+ self.constraintAxis = None
+
+ # setting basepoint
+ if not basepoint:
+ pass
+
+ affinity = FreeCAD.DraftWorkingPlane.getClosestAxis(dvec)
+ if (not self.constraintAxis) or mobile:
+ if affinity == "x":
+ dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.u)
+ point = last.add(dv)
+ if sym:
+ l = dv.Length
+ if dv.getAngle(FreeCAD.DraftWorkingPlane.u) > 1:
+ l = -l
+ point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l)))
+ target.constrain = 0 #x direction
+ target.ui.xValue.setEnabled(True)
+ target.ui.yValue.setEnabled(False)
+ target.ui.zValue.setEnabled(False)
+ target.ui.xValue.setFocus()
+ elif affinity == "y":
+ dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.v)
+ point = last.add(dv)
+ if sym:
+ l = dv.Length
+ if dv.getAngle(FreeCAD.DraftWorkingPlane.v) > 1:
+ l = -l
+ point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l)))
+ target.constrain = 1 #y direction
+ target.ui.xValue.setEnabled(False)
+ target.ui.yValue.setEnabled(True)
+ target.ui.zValue.setEnabled(False)
+ target.ui.yValue.setFocus()
+ elif affinity == "z":
+ dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.axis)
+ point = last.add(dv)
+ if sym:
+ l = dv.Length
+ if dv.getAngle(FreeCAD.DraftWorkingPlane.axis) > 1:
+ l = -l
+ point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l)))
+ target.constrain = 2 #z direction
+ target.ui.xValue.setEnabled(False)
+ target.ui.yValue.setEnabled(False)
+ target.ui.zValue.setEnabled(True)
+ target.ui.zValue.setFocus()
+ else: target.constrain = 3
+ elif (target.constrain == 0):
+ dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.u)
+ point = last.add(dv)
+ if sym:
+ l = dv.Length
+ if dv.getAngle(FreeCAD.DraftWorkingPlane.u) > 1:
+ l = -l
+ point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l)))
+ elif (target.constrain == 1):
+ dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.v)
+ point = last.add(dv)
+ if sym:
+ l = dv.Length
+ if dv.getAngle(FreeCAD.DraftWorkingPlane.u) > 1:
+ l = -l
+ point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l)))
+ elif (target.constrain == 2):
+ dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.axis)
+ point = last.add(dv)
+ if sym:
+ l = dv.Length
+ if dv.getAngle(FreeCAD.DraftWorkingPlane.u) > 1:
+ l = -l
+ point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l)))
+ return point
+
+ def snap(self,screenpos,lastpoint=None,active=True,constrain=None):
+ """snap(screenpos,lastpoint=None,active=True,constrain=None): returns a snapped
+ point from the given (x,y) screenpos (the position of the mouse cursor), active is to
+ activate active point snapping or not (passive), lastpoint is an optional
+ other point used to draw an imaginary segment and get additional snap locations. Constrain can
+ be set to 0 (horizontal) or 1 (vertical), for more additional snap locations."""
+
+ # type conversion if needed
+ if not isinstance(screenpos,tuple):
+ screenpos = tuple(screenpos)
+
+ # setup trackers if needed
+ if not self.tracker:
+ self.tracker = DraftTrackers.snapTracker()
+ if not self.extLine:
+ self.extLine = DraftTrackers.lineTracker(dotted=True)
+ if (not self.grid) and Draft.getParam("grid"):
+ self.grid = DraftTrackers.gridTracker()
+
+ # getting current snap Radius
+ if not self.radius:
+ self.radius = self.getScreenDist(Draft.getParam("snapRange"),screenpos)
+
+ # set the grid
+ if Draft.getParam("grid"):
+ self.grid.set()
+
+ # checking if alwaySnap setting is on
+ oldActive = False
+ if Draft.getParam("alwaysSnap"):
+ oldActive = active
+ active = True
+
+ self.setCursor('passive')
+ self.tracker.off()
+
+ point = FreeCADGui.ActiveDocument.ActiveView.getPoint(screenpos[0],screenpos[1])
+
+ # checking if parallel to one of the edges of the last objects
+ point = self.snapToExtensions(point,lastpoint)
+
+ # check if we snapped to something
+ info = FreeCADGui.ActiveDocument.ActiveView.getObjectInfo((screenpos[0],screenpos[1]))
+
+ if not info:
+
+ # nothing has been snapped, check fro grid snap
+ point = self.snapToGrid(point)
+ return point
+
+ else:
+
+ # we have an object to snap to
+ snaps = []
+
+ obj = FreeCAD.ActiveDocument.getObject(info['Object'])
+ if not obj:
+ return point
+
+ if hasattr(obj.ViewObject,"Selectable"):
+ if not obj.ViewObject.Selectable:
+ return point
+
+ if not active:
+
+ # passive snapping
+ snaps = [snapToVertex(info)]
+
+ else:
+
+ # active snapping
+ comp = info['Component']
+ if obj.isDerivedFrom("Part::Feature"):
+ if (not self.maxEdges) or (len(obj.Edges) <= self.maxEdges):
+ if "Edge" in comp:
+ # we are snapping to an edge
+ edge = obj.Shape.Edges[int(comp[4:])-1]
+ snaps.extend(self.snapToEndpoints(edge))
+ snaps.extend(self.snapToMidpoint(edge))
+ snaps.extend(self.snapToPerpendicular(edge,lastpoint))
+ snaps.extend(self.snapToOrtho(edge,lastpoint,constrain))
+ snaps.extend(self.snapToIntersection(edge))
+
+ if isinstance (edge.Curve,Part.Circle):
+ # the edge is an arc, we have extra options
+ snaps.extend(self.snapToAngles(edge))
+ snaps.extend(self.snapToCenter(edge))
+
+ elif "Vertex" in comp:
+ # directly snapped to a vertex
+ snaps.append(self.snapToVertex(info,active=True))
+ elif comp == '':
+ # workaround for the new view provider
+ snaps.append(self.snapToVertex(info,active=True))
+ else:
+ # all other cases (face, etc...) default to passive snap
+ snapArray = [self.snapToVertex(info)]
+
+ elif Draft.getType(obj) == "Dimension":
+ # for dimensions we snap to their 3 points
+ for pt in [obj.Start,obj.End,obj.Dimline]:
+ snaps.append([pt,'endpoint',pt])
+
+ elif Draft.getType(obj) == "Mesh":
+ # for meshes we only snap to vertices
+ snaps.extend(self.snapToEndpoints(obj.Mesh))
+
+ # updating last objects list
+ if not self.lastObj[0]:
+ self.lastObj[0] = obj.Name
+ self.lastObj[1] = obj.Name
+ if (self.lastObj[1] != obj.Name):
+ self.lastObj[0] = lastObj[1]
+ self.lastObj[1] = obj.Name
+
+ # calculating the nearest snap point
+ shortest = 1000000000000000000
+ origin = Vector(info['x'],info['y'],info['z'])
+ winner = [Vector(0,0,0),None,Vector(0,0,0)]
+ for snap in snaps:
+ # if snap[0] == None: print "debug: Snapper: 'i[0]' is 'None'"
+ delta = snap[0].sub(origin)
+ if delta.Length < shortest:
+ shortest = delta.Length
+ winner = snap
+ if self.radius != 0:
+ dv = point.sub(winner[2])
+ if (not oldActive) and (dv.Length > self.radius):
+ winner = snapToVertex(info)
+
+ # setting the cursors
+ self.tracker.setCoords(winner[2])
+ self.tracker.setMarker(self.mk[winner[1]])
+ self.tracker.on()
+ self.setCursor(winner[1])
+
+ # return the final point
+ return winner[2]
+
+ def snapToExtensions(self,point,last):
+ "returns a point snapped to extension or parallel line to last object, if any"
+ for o in [self.lastObj[1],self.lastObj[0]]:
+ if o:
+ ob = FreeCAD.ActiveDocument.getObject(o)
+ if ob:
+ edges = ob.Shape.Edges
+ if (not self.maxEdges) or (len(edges) <= self.maxEdges):
+ for e in edges:
+ if isinstance(e.Curve,Part.Line):
+ np = self.getPerpendicular(e,point)
+ if (np.sub(point)).Length < self.radius:
+ self.tracker.setCoords(np)
+ self.tracker.setMarker(self.mk['extension'])
+ self.tracker.on()
+ self.extLine.p1(e.Vertexes[0].Point)
+ self.extLine.p2(np)
+ self.extLine.on()
+ self.setCursor('extension')
+ return np
+ else:
+ if last:
+ de = Part.Line(last,last.add(fcgeo.vec(e))).toShape()
+ np = self.getPerpendicular(de,point)
+ if (np.sub(point)).Length < self.radius:
+ self.tracker.setCoords(np)
+ self.tracker.setMarker(self.mk['parallel'])
+ self.tracker.on()
+ self.setCursor('extension')
+ return np
+ return point
+
+ def snapToGrid(self,point):
+ "returns a grid snap point if available"
+ if self.grid:
+ np = self.grid.getClosestNode(point)
+ if np:
+ if self.radius != 0:
+ dv = point.sub(np)
+ if dv.Length <= self.radius:
+ self.tracker.setCoords(np)
+ self.tracker.setMarker(self.mk['grid'])
+ self.tracker.on()
+ self.setCursor('grid')
+ return np
+ return point
+
+ def snapToEndpoints(self,shape):
+ "returns a list of enpoints snap locations"
+ snaps = []
+ if hasattr(shape,"Vertexes"):
+ for v in shape.Vertexes:
+ snaps.append([v.Point,'endpoint',v.Point])
+ elif hasattr(shape,"Point"):
+ snaps.append([shape.Point,'endpoint',shape.Point])
+ elif hasattr(shape,"Points"):
+ for v in shape.Points:
+ snaps.append([v.Vector,'endpoint',v.Vector])
+ return snaps
+
+ def snapToMidpoint(self,shape):
+ "returns a list of midpoints snap locations"
+ snaps = []
+ if isinstance(shape,Part.Edge):
+ mp = fcgeo.findMidpoint(shape)
+ if mp:
+ snaps.append([mp,'midpoint',mp])
+ return snaps
+
+ def snapToPerpendicular(self,shape,last):
+ "returns a list of perpendicular snap locations"
+ snaps = []
+ if last:
+ if isinstance(shape,Part.Edge):
+ if isinstance(shape.Curve,Part.Line):
+ np = self.getPerpendicular(shape,last)
+ elif isinstance(shape.Curve,Part.Circle):
+ dv = last.sub(shape.Curve.Center)
+ dv = fcvec.scaleTo(dv,shape.Curve.Radius)
+ np = (shape.Curve.Center).add(dv)
+ snaps.append([np,'perpendicular',np])
+ return snaps
+
+ def snapToOrtho(self,shape,last,constrain):
+ "returns a list of ortho snap locations"
+ snaps = []
+ if constrain != None:
+ if isinstance(shape,Part.Edge):
+ if last:
+ if isinstance(shape.Curve,Part.Line):
+ p1 = shape.Vertexes[0].Point
+ p2 = shape.Vertexes[-1].Point
+ if (constrain == 0):
+ if ((last.y > p1.y) and (last.y < p2.y) or (last.y > p2.y) and (last.y < p1.y)):
+ pc = (last.y-p1.y)/(p2.y-p1.y)
+ cp = (Vector(p1.x+pc*(p2.x-p1.x),p1.y+pc*(p2.y-p1.y),p1.z+pc*(p2.z-p1.z)))
+ snaps.append([cp,'ortho',cp])
+ elif (constrain == 1):
+ if ((last.x > p1.x) and (last.x < p2.x) or (last.x > p2.x) and (last.x < p1.x)):
+ pc = (last.x-p1.x)/(p2.x-p1.x)
+ cp = (Vector(p1.x+pc*(p2.x-p1.x),p1.y+pc*(p2.y-p1.y),p1.z+pc*(p2.z-p1.z)))
+ snaps.append([cp,'ortho',cp])
+ return snaps
+
+ def snapToAngles(self,shape):
+ "returns a list of angle snap locations"
+ snaps = []
+ rad = shape.Curve.Radius
+ pos = shape.Curve.Center
+ for i in [0,30,45,60,90,120,135,150,180,210,225,240,270,300,315,330]:
+ ang = math.radians(i)
+ cur = Vector(math.sin(ang)*rad+pos.x,math.cos(ang)*rad+pos.y,pos.z)
+ snaps.append([cur,'angle',cur])
+ return snaps
+
+ def snapToCenter(self,shape):
+ "returns a list of center snap locations"
+ snaps = []
+ rad = shape.Curve.Radius
+ pos = shape.Curve.Center
+ for i in [15,37.5,52.5,75,105,127.5,142.5,165,195,217.5,232.5,255,285,307.5,322.5,345]:
+ ang = math.radians(i)
+ cur = Vector(math.sin(ang)*rad+pos.x,math.cos(ang)*rad+pos.y,pos.z)
+ snaps.append([cur,'center',pos])
+ return snaps
+
+ def snapToIntersection(self,shape):
+ "returns a list of intersection snap locations"
+ snaps = []
+ # get the stored objects to calculate intersections
+ intedges = []
+ if self.lastObj[0]:
+ obj = FreeCAD.ActiveDocument.getObject(self.lastObj[0])
+ if obj:
+ if obj.isDerivedFrom("Part::Feature"):
+ if (not self.maxEdges) or (len(obj.Shape.Edges) <= self.maxEdges):
+ for e in obj.Shape.Edges:
+ # get the intersection points
+ pt = fcgeo.findIntersection(e,shape)
+ if pt:
+ for p in pt:
+ snaps.append([p,'intersection',p])
+ return snaps
+
+ def snapToVertex(self,info,active=False):
+ p = Vector(info['x'],info['y'],info['z'])
+ if active:
+ return [p,'endpoint',p]
+ else:
+ return [p,'passive',p]
+
+ def getScreenDist(self,dist,cursor):
+ "returns a distance in 3D space from a screen pixels distance"
+ print cursor
+ p1 = FreeCADGui.ActiveDocument.ActiveView.getPoint(cursor)
+ p2 = FreeCADGui.ActiveDocument.ActiveView.getPoint((cursor[0]+dist,cursor[1]))
+ return (p2.sub(p1)).Length
+
+ def getPerpendicular(self,edge,pt):
+ "returns a point on an edge, perpendicular to the given point"
+ dv = pt.sub(edge.Vertexes[0].Point)
+ nv = fcvec.project(dv,fcgeo.vec(edge))
+ np = (edge.Vertexes[0].Point).add(nv)
+ return np
+
+ def setCursor(self,mode=None):
+ if not mode:
+ for v in self.views:
+ v.unsetCursor()
+ self.views = []
+ else:
+ if not self.views:
+ mw = DraftGui.getMainWindow()
+ self.views = mw.findChildren(QtGui.QWidget,"QtGLArea")
+ baseicon = QtGui.QPixmap(":/icons/Draft_Cursor.svg")
+ newicon = QtGui.QPixmap(32,24)
+ newicon.fill(QtCore.Qt.transparent)
+ qp = QtGui.QPainter()
+ qp.begin(newicon)
+ qp.drawPixmap(0,0,baseicon)
+ if not (mode == 'passive'):
+ tp = QtGui.QPixmap(self.cursors[mode]).scaledToWidth(16)
+ qp.drawPixmap(QtCore.QPoint(16, 8), tp);
+ qp.end()
+ cur = QtGui.QCursor(newicon,8,8)
+ for v in self.views:
+ v.setCursor(cur)
+
+ def off(self):
+ "finishes snapping"
+ if self.tracker:
+ self.tracker.off()
+ if self.extLine:
+ self.extLine.off()
+ if self.grid:
+ self.grid.off()
+ self.radius = 0
+ self.setCursor()
+
+ def constrainOff(self):
+ pass
+
+# deprecated ##################################################################
# last snapped objects, for quick intersection calculation
lastObj = [0,0]
@@ -336,3 +822,6 @@ def constrainPoint (target,pt,mobile=False,sym=False):
l = -l
point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l)))
return point
+
+if not hasattr(FreeCADGui,"Snapper"):
+ FreeCADGui.Snapper = Snapper()
diff --git a/src/Mod/Draft/Draft_rc.py b/src/Mod/Draft/Draft_rc.py
index 3a16cdea4..bd6c5bcfe 100644
--- a/src/Mod/Draft/Draft_rc.py
+++ b/src/Mod/Draft/Draft_rc.py
@@ -2,7 +2,7 @@
# Resource object code
#
-# Created: Sat Dec 10 14:06:42 2011
+# Created: Thu Dec 15 14:01:48 2011
# by: The Resource Compiler for PyQt (Qt v4.7.3)
#
# WARNING! All changes made in this file will be lost!
@@ -23925,224 +23925,241 @@ qt_resource_data = "\
\xb7\x25\xeb\xdd\x8e\x31\xb6\xe8\x99\x62\xcc\xa4\x77\x7d\x63\x8a\
\x0d\xe6\xeb\x35\x41\xa4\x89\x01\x69\xa2\xc5\xe3\x8c\x11\x13\x03\
\xfa\xda\x75\x62\xda\xde\xf9\x1f\xf8\xa7\x2a\x7c\
-\x00\x00\x0d\x74\
+\x00\x00\x0e\x86\
\x00\
-\x00\x80\x2b\x78\x9c\xed\x1d\x6b\x73\xda\xb8\xf6\x7b\x7e\x85\x26\
-\x1f\x3a\xb9\x33\xd9\x00\x69\x92\xbe\x08\x3b\x6d\xfa\x9c\xe9\xee\
-\x76\x4b\xda\xbd\x7b\xbf\xec\x08\x5b\x80\x6e\x6d\xcb\x95\x44\x80\
-\x9d\xfb\xe3\xef\x39\x92\x8c\x8d\x31\x10\x30\x60\xb2\xa5\xd3\x99\
-\x60\x49\x3e\x3a\x3a\x3a\x2f\x1d\x1d\xc9\xcd\x9f\x47\x61\x40\xee\
-\x98\x54\x5c\x44\xd7\xc7\x8d\xb3\xfa\x31\x61\x91\x27\x7c\x1e\xf5\
-\xae\x8f\xbf\xdc\xbe\xfd\xe9\xe9\xf1\xcf\xad\xa3\xe6\x80\xa7\x8d\
-\x2e\xa0\x51\xeb\x88\x34\xbd\x80\x2a\xd5\x7a\x37\xe0\xcf\x9f\xbf\
-\xe6\x34\x10\x3d\xf8\x1b\xf4\xda\x4c\x6b\x78\x59\xbd\x96\xb4\xab\
-\x9b\x35\xdb\x08\x5a\x0f\xb9\xdf\x63\x9a\x98\xe7\xeb\xe3\xdf\xff\
-\x30\x8f\xc7\x24\xa2\x21\xbb\x3e\x5e\x08\x04\x3b\x23\xcd\x58\x8a\
-\x98\x49\x3d\x76\x6f\xf4\x98\x08\x99\x96\x63\x53\x49\x9a\x92\x79\
-\xda\xfc\x22\xcd\x51\xab\xde\xac\x8d\xdc\xc3\x18\x1f\xc6\xee\x01\
-\x50\xd0\xfd\xd6\xe5\x33\x28\xb2\x3f\x6d\x71\x9f\xf1\x5e\x5f\xb7\
-\xae\xce\x9f\x35\x6b\xee\xb7\x81\x59\x4b\x80\x36\x6b\x49\xe7\x45\
-\x98\x0c\x79\xe4\x8b\xe1\x2d\xd7\x01\x73\xc8\x28\x2d\x01\xf9\xd6\
-\x3b\x16\x31\x49\x03\xa2\xdc\x60\x9a\x35\x57\x31\x0b\x32\xa0\x63\
-\x31\x48\x89\xf3\xf5\x95\x18\x7d\x34\x45\x0e\x62\xae\x4b\x15\x53\
-\x0f\x00\x1d\xbb\x01\x44\x83\xb0\xc3\x64\xeb\xaa\x59\x73\xbf\x2c\
-\xfa\xd9\x1e\x66\x40\x84\x54\xf6\x78\x94\x83\xf0\x6c\x21\x04\xae\
-\x59\x98\x52\x32\x3b\x99\xef\xa4\x18\xc4\x80\x73\x32\x9d\xbd\xe4\
-\xd9\x36\x9f\xe9\x5c\xa7\xc4\x2a\xa0\x97\x99\x74\xd2\x2e\xa0\xda\
-\x2c\x52\x0b\x69\xe7\x7a\x03\xc6\xd5\xdc\xa3\x81\x2d\xfd\xeb\x3c\
-\xed\x38\x1d\x51\x01\xa0\xf7\x33\x80\xfa\x42\xf2\xbf\x45\xa4\x27\
-\xa0\x1a\xcf\x26\xb0\xf2\xd0\x66\x89\xf4\x91\x76\x58\x90\x80\x0a\
-\xf0\x61\xfa\xfd\x02\x32\xb1\x91\x9e\x6a\x30\x21\x95\x25\x11\x8f\
-\x34\x93\x5d\xea\x31\x12\x0a\x9f\xe5\x08\x55\x4c\x2d\x5b\x68\x31\
-\xcb\xa0\x5e\x9b\xc6\x7d\xc9\x50\x8c\xb4\x7e\x92\xac\x7b\x23\xc2\
-\x8e\xc8\xce\x3b\x56\xc4\x50\xe1\x61\x45\x47\x8c\xfe\xba\x58\x3c\
-\x40\x21\x82\x5b\x1e\x17\x8f\xf1\xb6\xcf\x15\x81\xff\xba\xcf\xc8\
-\x97\x0f\x66\x88\x30\x62\x32\xec\x73\xaf\x6f\x0a\x2d\x11\xa0\x7c\
-\x10\x30\x32\xe4\x41\x40\x86\x42\x7e\x7b\x4e\x6e\x01\x6a\x87\x4a\
-\xfb\x86\x29\x8f\x03\x24\x12\x0d\x12\xde\x4a\x24\x12\xe1\x51\x78\
-\x8a\xa9\xa4\x9a\x11\x6d\x5f\x3c\xc5\x3e\x00\xa4\xa6\xea\xdb\x34\
-\x9c\x81\x62\xa6\xe7\xb7\x92\xb1\x9b\x97\xaf\xc9\x2d\xb4\xb8\xe3\
-\x6c\x48\xd4\x58\x01\xc5\x48\x57\x48\xd3\x0b\xd7\x0a\xdb\x4a\x3b\
-\x43\xd4\xd3\xa0\x37\xef\x3d\x3d\x33\x54\x42\x82\xbe\x89\x50\xd7\
-\x11\xa5\x7d\xc0\xfd\xfa\xb8\x9e\x23\x99\xe7\x60\x7f\xe1\xbf\x18\
-\x4e\xf0\xca\xf4\xf5\x89\xea\xfe\xf2\xae\xa0\xa3\x5a\xa2\xe3\xef\
-\xdd\x5b\x8e\xaf\xee\xc3\xf2\x29\x3f\xd8\xd9\x29\xa2\xe3\xbc\xee\
-\x6a\xf9\xfe\xca\x21\xe0\x66\xbb\x0c\x06\x4b\x65\xaf\x59\xb3\x6a\
-\x68\xa2\xa3\xa6\xaa\x4b\x6b\xac\xf3\x72\x0a\xeb\x7c\x5d\x7d\xc5\
-\xba\x74\x10\x00\x68\x11\x88\xc2\x19\xdc\xba\xa2\x82\x7e\x5f\x0d\
-\xb4\x16\x51\x81\xae\x82\xba\x8e\xad\x5b\x5b\x59\xa1\x56\xf0\xb3\
-\x83\x34\xba\x20\x02\xd5\x20\x3a\xff\x05\x37\x22\x6f\xc6\x16\xf1\
-\x4c\xae\x5f\x03\x2e\x2f\x84\x58\x96\xe3\x52\xc9\x7c\x74\x76\xf0\
-\xcf\x74\x45\x0f\xb4\x55\x84\x55\xf6\xc7\x74\x65\x27\x18\x30\xac\
-\x33\x7f\xa7\x19\x7a\xa6\x93\x8d\xab\x2b\xc7\x0e\xfb\xa9\xad\x4a\
-\x73\x5f\x91\x00\x2d\xb1\x87\x73\x05\xa8\x1d\xd1\x78\xdf\xa5\x67\
-\x99\x76\x58\x5d\x7e\x14\x8e\x5a\x8d\xc1\x97\x08\x0e\x02\x34\x85\
-\xbe\xa3\x05\x12\xe8\xc7\x13\xa2\x75\xbd\xe6\x1b\x11\xc1\xaf\x81\
-\x71\xc7\xf6\x5e\x98\x1e\x6f\xc6\x73\x9e\x15\x2a\x67\x90\x48\x87\
-\x41\x5b\xe2\x4b\x3a\x8c\x9c\xc3\xcb\x91\x2a\x19\x12\xa1\xe3\x7b\
-\xb6\x1b\xb9\xbb\xb8\x98\x2f\x78\x8d\xf3\xcb\x05\xa2\x77\x7e\x79\
-\x59\x99\xf5\x4a\x69\xf5\xe3\x09\xe1\x12\xfe\x5c\xea\x0a\x06\x1c\
-\xbc\x23\x8c\xc2\x54\x20\x83\xed\x98\x47\x45\xcb\x56\x05\xe5\x9d\
-\x34\x6c\x51\x3c\xb2\xfb\x9a\xb1\xc9\x00\x37\xe7\x0a\xde\x51\xe0\
-\xf3\x5c\xcf\x2e\x60\x73\x3e\x15\xba\x59\x09\xea\x0a\x2c\x9f\x99\
-\xb4\x07\xca\xea\x5b\x5e\x5f\x3d\x2e\xb9\xbe\xaa\x97\x32\x6d\x94\
-\x1b\xa5\xbd\x97\x91\xa0\xcb\x32\xf6\x8c\x91\xc9\x00\xd1\x68\xc1\
-\x18\x79\x97\x33\x49\xbe\xb1\xf1\x4e\xe2\x2a\xd0\xa1\x97\x20\xb0\
-\xaf\xac\x5f\x2e\xb8\xa1\xfa\x1c\x3b\xab\x2a\xb6\xe2\x69\x19\x54\
-\xd7\x3b\x0d\x4a\x0d\x7d\x2b\xf6\xf5\xbc\x51\x66\xa9\xb8\xaf\x5a\
-\xe0\xaa\x9c\x16\x50\x6e\x6c\x1b\x90\x7e\x6f\x20\x25\x8b\xf4\x87\
-\xc8\x67\xa3\x62\x93\xda\xd8\x89\x49\x85\xd1\xe0\xa8\x0e\x5a\xc5\
-\x96\x1e\xb4\x4a\x5a\xb0\x0d\xad\xb2\x6e\x04\xf7\x65\xa0\xf7\x56\
-\xa9\x3c\x29\xa7\x54\xa8\x1d\xda\x4e\x74\xca\x6e\xdc\x74\x18\x8d\
-\x61\xbe\x83\x4a\x39\xa8\x94\x7d\xda\x7d\x6a\xd4\xcb\x2d\x8f\x1a\
-\xe5\x96\x47\x2e\xac\x65\xb2\x13\xcc\x2b\x15\x68\xb3\x8f\xb0\x82\
-\x7e\xe3\x73\x3d\xa3\xcd\x70\x69\xcd\xa0\xa2\x4c\x14\xbd\x28\xf0\
-\x97\x8e\xd6\xc4\x21\xa6\x02\x7c\x49\x12\xcd\xfa\x1a\xef\x7e\x24\
-\xdf\xc9\x1a\x2d\x3b\x32\x33\x68\x3b\xc3\xfb\xa9\x03\xab\x96\xc4\
-\x8b\xfb\x0b\x62\x6a\x88\xfb\xcc\xfb\x56\x68\x88\xb1\xa2\x54\xdc\
-\xcc\x40\x00\xb6\x45\xf6\xed\x12\xc0\x90\x0c\x69\xa4\x89\x16\x93\
-\x94\x0b\x13\x60\xad\x65\x62\x6a\x52\x84\xa6\xc2\x25\x6d\x10\xaa\
-\x12\x96\xdf\x06\x37\xb7\xe9\x1d\xe0\x60\xcd\xbb\x8b\xa5\xd3\xc8\
-\xcf\xc4\xf8\xa8\x27\x85\x52\x44\x31\x85\x49\x72\x25\x62\x7c\xab\
-\xec\xfe\x00\x52\x22\x62\x23\xbe\xb7\xa6\xbe\x6a\x36\x7f\xb2\x0d\
-\x36\x2f\x13\xca\xfa\xd0\x75\x5c\xae\x88\x01\xc7\xfc\x53\x60\xa7\
-\x78\x9c\x49\x32\xea\x30\x70\x42\x63\x9d\x70\x14\x78\xb9\x21\xb0\
-\xda\x29\x11\xc0\xed\x72\xc8\x15\x4b\x8a\x94\x6d\x4f\x83\x21\x1d\
-\x03\xe7\x69\x2a\x31\x25\x8c\x44\xe2\xa7\x09\xc4\x6d\x88\xc2\xbb\
-\x40\x74\x68\x40\x36\xd0\x87\xa3\x40\xae\x9b\x0e\xd0\xaf\x05\x8a\
-\x1c\x00\x9b\x9f\xdb\xb5\x19\xf1\x38\xdc\xe3\x8c\xa9\xaa\xe5\xa7\
-\xf1\x74\x2b\x02\x54\x62\x6f\xf3\x57\x21\x43\x1a\x04\xe3\x53\x02\
-\x84\x64\xd2\xb0\x21\x86\x84\xdd\xde\xca\xa9\x33\x16\x31\x67\x8a\
-\x20\x72\x8a\x05\x50\xce\xfc\x33\x92\x88\x9e\x88\x8d\xef\x93\x95\
-\x40\x7c\xa7\x43\x41\xb2\x92\xbd\xd1\x44\x10\x93\xb7\x41\xae\x94\
-\x66\xd4\x2f\xb1\x1b\xba\xc0\xb6\x98\x4e\xa6\x11\x98\x1a\xdc\x6e\
-\x8c\x89\xc1\xe2\x15\x20\xf1\x5b\xb2\x4d\x75\x90\x89\x22\x99\xb8\
-\xdc\x8a\x48\x3c\xdd\xac\x4d\x31\x2e\x54\xd6\x3a\x60\xe0\x14\xdc\
-\x29\x70\x16\x94\xce\xc8\x8b\xdb\xf9\xc7\x2c\x00\x28\x35\x42\x12\
-\x09\x9d\x79\xbf\x63\x83\xae\xb1\x79\x27\x0a\xc6\xf0\x02\x8b\x08\
-\xa0\x0e\x7e\x0e\x14\xdd\xdc\x7e\xfe\xb8\x15\xa1\x78\x39\x8d\x77\
-\x82\xee\x89\xcf\x15\xed\x04\x69\x24\x18\x03\x36\xff\x7a\xc8\x26\
-\xc8\x4e\x50\x7b\x8f\x43\xc0\x6b\x2c\x7e\xf1\x80\x02\xe8\xaf\xbc\
-\x04\xb5\x4d\xf1\x92\x15\x2e\xb4\x06\x27\x9b\xa2\x92\xce\x8d\x81\
-\x45\x83\xb0\xf5\xbb\x7e\xfe\xfc\xfd\x04\x62\xb3\x66\x0a\x57\x26\
-\x98\xe2\x7f\xb3\xf7\x3c\xd2\xf3\x09\x86\x2d\x72\x41\x18\x7b\x68\
-\xe4\x62\xfa\xf8\xc8\xa4\xd6\x1d\x1d\x39\xaf\x4f\x9d\x22\x49\xd1\
-\xca\x03\x9c\x43\x6b\x4b\xba\xb5\x03\x0d\x85\x61\x93\x92\x01\x52\
-\x49\x7d\x3e\x50\x93\x8c\x3c\xa3\x0b\x40\x26\x55\xcc\x3c\x0e\x9e\
-\x60\x2c\x80\x90\xea\x0c\x4f\x6c\x60\x71\xdd\xe6\x3b\x08\x02\xa2\
-\xaa\x69\xe4\x31\x72\xc2\xa3\x2e\x8f\x00\xef\x12\x82\xba\x64\xbf\
-\x4b\xd2\xa8\x57\x45\x38\x67\x49\x26\xc9\x12\x56\x57\x83\x6e\x97\
-\xe7\x23\xc5\x6e\x0c\xf1\x68\x37\x66\x1f\xa8\xf7\xd9\x12\xef\x81\
-\x6a\x9f\x2d\x9b\xfb\xed\x78\xc0\x25\xf6\x41\x8b\xcc\xfd\x94\xdf\
-\x0a\x12\xca\x6c\x40\xa4\x0b\x8f\xe0\xbc\xa6\xa1\x91\x33\xf2\x5b\
-\xb2\x8a\x34\x5e\xef\x38\xff\xc6\x90\x03\x96\x72\x95\xd0\xe8\x0a\
-\x92\xfa\x16\xfb\x9a\xa4\x1f\x8e\xcb\xc7\x6b\x56\xe0\x73\x24\xc5\
-\x61\xa5\x37\x9f\xcd\xcb\x9e\x64\x2b\x7b\x32\x04\x8f\x6e\xa1\x5d\
-\x89\x03\x1a\xed\xe7\x51\xb6\xc5\x23\x5c\x81\x15\x1d\xdb\xff\xf1\
-\x69\x5f\x79\xb1\xdc\x1e\xd5\xaf\xa2\x78\x02\x77\xb3\x43\xf6\xef\
-\x3f\xc9\xc9\xad\x88\x0b\x3d\x8d\x1d\x61\xf0\x1f\x72\xf2\x56\x82\
-\x6c\x55\x88\xc3\x9f\x80\x43\x9b\xfb\xc5\x0e\xd7\x83\xd9\x2d\xdc\
-\x4e\xf4\xb6\xc4\xfe\x1a\x98\xde\x89\xc9\xa5\xa4\x27\xb9\x3f\x65\
-\x3f\xcd\xd2\xd8\x2d\xa5\xb7\x61\x3f\xbf\x28\x66\x3a\x7d\xc8\xcb\
-\x5d\x8b\xff\x7e\xea\xbd\xad\x64\xdc\x34\x96\xec\x16\xcc\x8f\xb3\
-\x23\x7b\xb9\x93\xfe\x15\x18\xc4\xd7\x62\xd0\x09\xd8\xbc\xf5\x8d\
-\x6f\x6a\x93\x55\x4e\xa9\xb3\x2a\x2c\x19\x24\xe9\x30\x3d\x64\x20\
-\x42\x8c\x7a\x7d\x2b\x5d\xb8\xbf\xb6\xd9\x74\x79\x8b\x78\xab\x71\
-\x56\x9f\xfe\xd7\xac\xb9\x9a\x6d\x33\x7f\x3b\x99\xd1\x1f\x49\x06\
-\x96\x2c\x77\xe6\xca\xc0\x2f\x98\xd1\x8e\x4c\xa0\x08\xbb\x63\x2b\
-\x24\x2a\xec\x6e\x85\x5f\xe2\x86\x03\x1c\x9d\x1d\x5c\x12\x6a\xb5\
-\xa7\xb1\x60\x79\x07\x5a\x5a\x9e\x91\x36\x46\x58\xba\x63\x02\x4b\
-\x36\x46\xfa\x62\x48\x42\x1a\x8d\x89\xfa\x3e\xa0\x92\xa9\x89\xb8\
-\x84\x09\x98\x12\x81\xd8\x05\x27\x4b\x1a\xf5\x9d\xe4\xac\xa1\x6c\
-\xbc\xb1\x73\xfc\x40\x25\x63\xdb\xee\x50\xc9\xb3\x25\x4b\x76\x18\
-\xe6\xca\xe0\x07\xbc\xc3\x22\xc2\x38\x9f\x04\x6e\xc4\xec\x06\x12\
-\x80\x30\x16\x66\xc1\x55\x2c\x8b\x8b\xed\x50\x48\x47\x3c\x1c\x84\
-\x6d\xfe\x77\x9e\xd3\xe7\xc6\x7a\xaf\x16\xc7\x7a\x1b\x57\x4f\x9e\
-\x3c\x39\x6f\x5c\x96\x89\xf8\xae\x6e\x2e\xad\x30\x12\xd1\x25\x3e\
-\x4c\x48\x48\x03\x73\x8f\x09\x4f\xa6\xc9\x13\x42\xfa\x3c\xa2\x9a\
-\xe1\x5e\x27\x93\x26\x92\xae\xc8\x09\x46\x65\xd9\xe8\x8c\x3c\x26\
-\xd7\xa4\x0e\xe6\xaf\x51\x22\x1a\xbb\x40\x5d\x5c\xed\x44\x5b\x4c\
-\x78\xf1\xc1\x6a\x8b\x55\x37\x4d\x16\xdb\x99\xc3\xa6\xc9\xc6\x37\
-\x4d\xd6\xd5\x97\xaf\x79\xc8\x22\x93\x04\xf6\x00\x34\xe6\xe2\xc5\
-\x89\xd3\x98\xc5\x82\xfe\x74\x7d\x41\xaf\xfc\x1c\xab\xcf\xc3\x4f\
-\x0f\x5e\x83\x6c\xdb\xdf\x58\x21\xd1\xa1\x48\x80\x96\x6c\x3a\xce\
-\x95\x9f\x5b\x11\x80\xd1\x8a\xbc\x2a\xa2\xc0\x2b\x2c\x7a\x7f\x00\
-\x57\x23\x4d\x26\x37\x02\x8b\xb9\xb8\x3e\xee\xdb\x74\x07\x91\x67\
-\x9d\x0a\xdd\xa7\xda\xa4\xe8\x52\xa2\x93\x69\x3b\x3b\xfa\x8a\xad\
-\x71\x51\xa3\xfb\xc4\xe7\xdd\x2e\xac\x5e\xa0\x1c\x17\x2c\x01\xac\
-\x61\xcc\xe6\x95\x05\x98\x2c\x7b\xb4\x64\x54\xdb\x8d\x2a\x05\x88\
-\x95\x58\xc7\x2c\xd8\x51\xad\xad\x63\xf0\xa2\x1e\xb0\x83\x66\x79\
-\x12\xb9\x58\x01\xb8\x51\x8d\x0d\x45\x11\x16\xc4\x2a\xa0\x97\xcb\
-\xdd\xc7\x2a\x74\x2a\x86\x07\xfd\x58\xa4\x1f\xaf\xca\xa9\xc7\x75\
-\x43\x22\xc9\x86\x19\xb6\x20\x56\x17\xec\xb7\xa2\x5c\x12\x70\xff\
-\x27\xa8\xca\x64\x4e\x6c\x7f\x26\xff\x05\xa7\x47\x99\x33\x02\xfe\
-\xc4\x1f\xdc\x4a\x24\xb3\x7e\x76\x5e\x41\x24\x13\x87\x97\x30\xdf\
-\x41\x3d\x14\xba\x4f\x25\xaf\x5a\x5c\x77\xdb\x60\x4a\x3f\x74\x01\
-\xa3\x6d\x6a\x87\xc5\x4b\xd6\xc5\xe1\x98\xc3\x92\xb5\xcc\x92\xf5\
-\xfe\x07\x0a\x37\x7b\x9c\x10\x39\x2a\x3d\x4d\x98\x5e\xa9\x5b\xa4\
-\xef\xce\x8e\x3e\x00\xbe\x34\x42\x17\x8f\x66\xde\x54\x03\xaf\x8f\
-\xbe\xde\xa3\xef\x03\xa1\x5f\xbc\x94\x9c\x06\xf6\x27\xee\xaa\x26\
-\x1d\x29\x3d\x0e\xf2\x4d\x15\x8d\x54\xd2\xd2\x95\x30\xc9\xbb\xf6\
-\xe7\x11\xe0\x63\x7f\x85\x22\x12\x49\x33\x44\x92\x74\x69\xc8\x83\
-\x71\x51\xbf\xa7\xef\x59\x70\xc7\xf0\x7a\xe8\xd3\x14\xb8\x7d\xc9\
-\xa0\x6a\x7c\x58\x6a\x91\x39\x2a\x78\xff\xf9\x2b\x11\xf8\xf6\x79\
-\x2b\x59\xd0\xd8\xc7\xfa\x80\x69\xc0\x7b\x11\xcc\xc6\x0c\x74\x10\
-\x72\x94\xaf\x97\x58\xff\x19\x79\xf8\x7f\x93\xc7\x5b\x49\x39\xb0\
-\x4e\x2f\x2d\xf9\x7a\xc3\x30\xb6\x08\x68\x30\xbd\x3a\x0e\x2b\x1a\
-\x15\xab\xb1\x0e\x26\xa5\xd0\xa4\x34\xca\x99\x94\xc6\xba\x57\xca\
-\xa4\x36\x25\x8c\x03\xbc\x29\x5b\xf5\x19\xab\xd0\xb0\x2c\x19\xc8\
-\xc1\xb2\x6c\xc4\xb2\xbc\xe5\x01\xbb\xe9\x0b\x01\x3a\x76\xc6\xb8\
-\x74\xa1\xce\xb3\x75\xcb\xfc\x7b\x1e\xad\xea\xdf\x3f\xae\x2f\x26\
-\x50\x29\xfa\xac\xbe\xdf\xe2\xe7\xb9\xdf\x1d\x4b\x36\xe9\x3e\x1e\
-\x86\x2e\x30\x79\x81\x9a\x2b\xfe\x5c\xf6\xcf\x8a\x02\x52\x4e\x69\
-\x5a\xac\x0e\x4a\x73\x8e\xd2\x5c\xe1\xa8\x7b\x81\xd2\x2c\xbf\x09\
-\xf0\x88\x86\xf1\x0b\xf2\x91\x51\x1f\x14\x1a\x95\x52\x0c\xad\x3b\
-\xb1\x8f\x49\xae\x1b\x4b\x71\xe5\xa1\xbd\xb6\x79\x5f\xb9\xb2\x5c\
-\x7a\xe5\x6b\xa1\xc9\x65\x75\xd9\x9d\xd8\xfd\x93\x6a\xbb\x7f\x56\
-\x5d\xf7\x37\x5c\x7a\xb0\x32\xa8\x90\xfe\x0e\x83\x0a\xa7\xc0\x61\
-\x50\xe1\x2c\xb4\x41\xb5\xf4\xab\x9c\x04\x8b\x40\x85\x73\x60\x11\
-\xa8\x70\x0a\x5e\x51\xef\x9b\xaa\x7a\x1a\x52\x24\x2a\x9c\x8a\x14\
-\x89\x52\xd3\x51\xb9\xab\x52\x72\x4b\xa1\xb1\x24\x17\x71\xae\xb7\
-\xf2\x95\xd9\x2f\x64\x65\x62\x37\x36\x7e\x98\x59\x49\xed\xa3\xbb\
-\xb2\xa9\x4b\xf2\x33\xc3\xc4\xb4\x2a\x13\xef\x4a\x28\xe1\x22\x5b\
-\xc6\xd9\xd7\x7d\x58\xf0\x64\x89\x44\x25\x23\xc9\xe7\xc5\xce\x48\
-\xb2\x4c\x06\xa8\x01\xeb\xea\x53\xf7\xad\x2a\xd7\xc9\x87\xf6\x6f\
-\x78\x49\x4b\xe4\x53\x59\xe6\x1e\x89\xd5\xbc\xb0\xa9\x09\xfc\x27\
-\xba\x62\x1f\x81\xd0\xe4\x24\x4b\xdb\x0a\x8f\xdd\x7c\x9e\xb7\x1b\
-\xf7\x40\x34\x50\x49\xf5\xb3\xee\x27\x01\x5e\x06\x26\x75\x11\x56\
-\xd6\xed\xaf\xef\x08\x30\x1a\x3e\x82\x0c\x09\x6f\xeb\x9a\x67\x49\
-\x9c\x69\xf1\x7d\x83\x87\x38\xd3\x4e\xe3\x4c\x4b\xb2\x7b\x1f\x74\
-\x9c\xe9\x3d\x66\xf8\xe3\xa5\x2b\xb8\x5d\xa2\x5c\xda\x3f\x05\x53\
-\x83\xdf\x20\x15\x72\x8c\xf7\x36\x6a\x77\xfb\x3d\x0a\x09\xd2\x45\
-\x65\x0b\x1f\x05\xfa\x45\x6c\x25\xe7\x51\x4f\xbf\xc0\xa0\x15\x5e\
-\xb9\x90\x66\xe9\x24\xfb\x30\xbe\xcf\x7c\x8c\x60\xa1\x49\x4a\x54\
-\xa6\xdb\xc3\x81\x66\x60\xae\x1c\x94\xdd\x5c\x61\xe7\x3a\x43\x16\
-\xd8\x57\xfb\x54\x4e\x27\x4f\x57\x4e\xc1\x4a\xdb\x65\x1a\x65\x5a\
-\x38\xfd\x3d\xd9\x10\xb3\x07\x87\xae\x8f\xaf\x8e\x89\xfd\x7a\xeb\
-\xf5\x71\xa3\x71\x8c\x69\x4d\xcd\x98\x8f\x42\x1a\x27\x79\x59\xad\
-\xef\x9f\xcc\xf3\x5b\x29\xc2\x5f\xc0\x59\x69\x8b\x81\xc4\x3c\x9e\
-\x5c\x2b\xfc\x84\xef\x40\x69\x11\xda\x1e\x95\xc1\x24\x5b\x62\xb1\
-\xcc\x7c\xe6\x37\x23\xa9\xe9\x97\x7d\x51\xdd\x8d\x34\x8b\x7c\xd5\
-\x72\x5f\xf5\x05\x55\xe7\x0a\x8e\xac\x34\x61\xe8\x0b\x21\xd4\x10\
-\x80\xfd\xcc\xef\x59\x1f\x85\xcb\x54\x18\x02\xe4\xfb\x5d\x8c\x48\
-\xe6\x23\x4a\xc5\x88\x7c\x1a\xa8\x7e\x52\x3f\x0f\x19\x8b\xac\x2a\
-\x87\x49\x4e\x81\x15\x62\x33\x4b\xbb\x79\x28\x21\xb4\x8d\xa1\xe5\
-\xb2\x73\x8a\x09\x34\xa9\xdc\x09\x2a\xcb\xe6\x6b\x76\x52\x77\x83\
-\x96\x3b\x2c\x5c\x4c\xa2\xb4\x76\x47\x34\xb2\xab\x9d\x39\xc8\x4c\
-\x6a\x77\x82\x4c\x92\x55\x50\x8c\x4c\x5a\xbb\x13\x64\xa6\x92\xcd\
-\x8a\x31\xca\x35\x29\x8f\xd6\x74\x81\xf9\x82\xb9\x64\xca\x28\x52\
-\x65\x54\x2e\xd8\xde\x88\xd9\x34\x58\x3b\x8a\xc9\xb3\xed\x55\x01\
-\x02\x00\xbb\xe0\xfc\x39\x6e\xa4\x47\x7e\xf2\x91\x6d\xc5\x7b\x11\
-\x0d\x5a\x5e\x80\x67\xfe\xfc\x13\x3c\x80\x8d\x2b\x18\x5b\x6a\x5a\
-\x80\x0b\xc0\xf8\x5d\x16\x56\xee\xf4\xad\xf9\x52\xb9\x6d\x62\x41\
-\x06\x42\xb7\xc0\x0c\xbe\x89\xf0\xaa\xb4\x14\x26\x16\x5b\x8a\xe0\
-\x85\x4d\xce\x22\xe1\x6f\xa2\xc7\x31\xba\x9a\x66\x78\x53\xdb\x1e\
-\xcd\x51\xeb\xe9\xe5\xe4\x73\xea\xf8\x3d\xf5\xc7\xe7\x99\x2f\xaa\
-\xd7\xf0\xed\x59\x40\x3e\xc3\x4b\xe6\x8c\x63\x9c\x87\xf6\xb8\xfe\
-\x34\x07\xae\x51\x04\xce\xfe\x54\x6e\x6a\xa6\x48\xbb\x53\x4a\x4f\
-\x4e\x79\x6e\x97\xc6\x57\x8d\xfb\x10\xe5\xbe\x34\xbe\xac\x5f\xe5\
-\xc0\x5d\xac\x46\xe3\xec\x23\xd4\x37\x6b\x03\xde\x3a\xfa\x3f\xd0\
-\x8d\x77\x9a\
+\x00\x94\xbb\x78\x9c\xed\x1d\xfd\x73\xda\xb8\xf2\xf7\xfc\x15\x9a\
+\xfc\xd0\xe9\x9b\xc9\x85\x90\xe6\xa3\x69\x09\x37\xfd\x6e\x67\x7a\
+\x77\xbd\x92\xf6\xde\xbd\x5f\x6e\x84\x2d\x40\xaf\xc6\xa2\x92\x08\
+\xe1\xe6\xfd\xf1\x6f\x57\x92\xc1\x36\xc6\x04\x04\x98\x5c\xe9\x74\
+\x26\x58\xb2\x57\xab\xd5\x7e\x69\x77\x2d\x37\x7e\xbe\xeb\x47\xe4\
+\x96\x49\xc5\x45\x7c\x7d\x58\x3f\x3e\x39\x24\x2c\x0e\x44\xc8\xe3\
+\xee\xf5\xe1\x97\x9b\xb7\x3f\x3d\x3d\xfc\xb9\x79\xd0\x18\xf2\xe9\
+\x4d\x67\x70\x53\xf3\x80\x34\x82\x88\x2a\xd5\x7c\x37\xe4\xcf\x9e\
+\xbd\xe6\x34\x12\x5d\xf8\x1b\x75\x5b\x4c\x6b\x78\x58\xbd\x96\xb4\
+\xa3\x1b\x35\x7b\x13\xdc\x3d\xe2\x61\x97\x69\x62\xae\xaf\x0f\x7f\
+\xff\xc3\x5c\x1e\x92\x98\xf6\xd9\xf5\x61\x29\x10\x1c\x8c\x34\x06\
+\x52\x0c\x98\xd4\x63\xf7\x44\x97\x89\x3e\xd3\x72\x6c\x3a\x49\x43\
+\xb2\x40\x9b\x5f\xa4\x71\xd7\x3c\x69\xd4\xee\xdc\xc5\x18\x2f\xc6\
+\xee\x02\x50\xd0\xbd\xe6\xf9\x15\x34\xd9\x9f\xb6\xb9\xc7\x78\xb7\
+\xa7\x9b\x17\xa7\x57\x8d\x9a\xfb\x6d\x60\xd6\x12\xa0\x8d\x5a\x32\
+\x78\x11\x26\x23\x1e\x87\x62\x74\xc3\x75\xc4\x1c\x32\x4a\x4b\x40\
+\xbe\xf9\x8e\xc5\x4c\xd2\x88\x28\x37\x99\x46\xcd\x75\xcc\x82\x8c\
+\xe8\x58\x0c\xa7\xc4\xf9\xfa\x52\xdc\x7d\x34\x4d\x0e\x62\x6e\x48\
+\x35\xa0\x01\x00\x3a\x74\x13\x88\x87\xfd\x36\x93\xcd\x8b\x46\xcd\
+\xfd\xb2\xe8\xa7\x47\x98\x01\xd1\xa7\xb2\xcb\xe3\x1c\x84\xab\x52\
+\x08\x5c\xb3\xfe\x94\x92\xe9\xc5\x7c\x27\xc5\x70\x00\x38\x27\xcb\
+\xd9\x4d\xae\xed\xed\x33\x83\xeb\x29\xb1\x0a\xe8\x65\x16\x9d\xb4\
+\x0a\xa8\x36\x8b\x54\x29\xed\xdc\x68\xc0\xb8\x9a\x07\x34\xb2\xad\
+\x7f\x9d\x4e\x07\x9e\xce\xa8\x00\xd0\xfb\x19\x40\x3d\x21\xf9\xdf\
+\x22\xd6\x13\x50\xf5\xab\x09\xac\x3c\xb4\x59\x22\x7d\xa4\x6d\x16\
+\x25\xa0\x22\xbc\xc8\x3e\x5f\x40\x26\x76\xa7\x33\x37\x4c\x48\x65\
+\x49\xc4\x63\xcd\x64\x87\x06\x8c\xf4\x45\xc8\x72\x84\x2a\xa6\x96\
+\x6d\xb4\x98\xa5\x50\xaf\x65\x71\x5f\x30\x15\x23\xad\x9f\x24\xeb\
+\xbc\x12\xfd\xb6\x48\xaf\x3b\x76\x0c\xa0\x23\xc0\x8e\xb6\xb8\xfb\
+\xeb\xac\x7c\x82\x42\x44\x37\x7c\x50\x3c\xc7\x9b\x1e\x57\x04\xfe\
+\xeb\x1e\x23\x5f\x3e\x98\x29\xc2\x8c\xc9\xa8\xc7\x83\x9e\x69\xb4\
+\x44\x80\xf6\x61\xc4\xc8\x88\x47\x11\x19\x09\xf9\xed\x19\xb9\x01\
+\xa8\x6d\x2a\xed\x13\xa6\x7d\x10\x21\x91\x68\x94\xf0\x56\x22\x91\
+\x08\x8f\xc2\xd5\x80\x4a\xaa\x19\xd1\xf6\xc1\x23\x1c\x03\x40\x6a\
+\xaa\xbe\x65\xe1\x0c\x15\x33\x23\xbf\x95\x8c\xbd\x7a\xf1\x9a\xdc\
+\xc0\x1d\xb7\x9c\x8d\x88\x1a\x2b\xa0\x18\xe9\x08\x69\x46\xe1\x5a\
+\xe1\xbd\xd2\xae\x10\x0d\x34\xe8\xcd\x7b\x2f\xcf\x0c\x95\x90\xa0\
+\x6f\x62\xd4\x75\x44\xe9\x10\x70\xbf\x3e\x3c\xc9\x91\x2c\x70\xb0\
+\xbf\xf0\x5f\x0c\x27\x04\x3e\x63\x7d\xa2\xba\xb7\x78\x28\x18\xa8\
+\x96\xe8\xf8\x7b\x8f\x96\xe3\xab\xfb\xb0\xfc\x94\x1f\xec\xea\x14\
+\xd1\x71\xde\x70\xb5\xfc\x78\x7e\x08\xb8\xd5\xf6\xc1\x60\xa1\xec\
+\x35\x6a\x56\x0d\x4d\x74\x54\xa6\xdb\x5b\x63\x9d\xfa\x29\xac\xd3\
+\x55\xf5\x15\xeb\xd0\x61\x04\xa0\x45\x24\x0a\x57\x70\xe3\x8a\x0a\
+\xc6\x7d\x39\xd4\x5a\xc4\x05\xba\x0a\xfa\xda\xb6\x6f\x65\x65\x85\
+\x5a\x21\x4c\x4f\xd2\xe8\x82\x18\x54\x83\x68\xff\x17\xdc\x88\xbc\
+\x19\x2b\xe3\x99\xdc\xb8\x06\x5c\x5e\x08\xb1\x2d\xc7\xa5\x92\x85\
+\xe8\xec\xe0\x9f\x6c\x47\x17\xb4\x55\x8c\x5d\xf6\x47\xb6\xb3\x1d\
+\x0d\x19\xf6\x99\xbf\x59\x86\x9e\x19\x64\xed\xea\xca\xb1\xc3\x6e\
+\x6a\x2b\x6f\xee\x2b\x12\xa0\x05\xf6\x70\xae\x00\xb5\x62\x3a\xd8\
+\x75\xe9\x59\xa4\x1d\x96\x97\x1f\x85\xb3\x56\x63\xf0\x25\xa2\xbd\
+\x00\x65\xd0\x77\xb4\x40\x02\xfd\x78\x42\xb4\xaa\xd7\xfc\x4a\xc4\
+\xf0\x6b\x68\xdc\xb1\x9d\x17\xa6\x27\xeb\xf1\x9c\x67\x85\xca\x19\
+\x24\xd2\x66\x70\x2f\x09\x25\x1d\xc5\xce\xe1\xe5\x48\x95\x14\x89\
+\xd0\xf1\x3d\xde\x8e\xdc\x9d\x9d\xcd\x17\xbc\xfa\xe9\x79\x89\xe8\
+\x9d\x9e\x9f\x57\x66\xbd\xa6\xb4\xfa\xf1\x84\x70\x01\x7f\x2e\x74\
+\x05\x23\x0e\xde\x11\x46\x61\x2a\x90\xc1\xd6\x80\xc7\x45\xdb\x56\
+\x05\xed\xed\x69\xd8\xa2\x78\x66\xf7\x35\x63\x93\x09\xae\xcf\x15\
+\xbc\xa5\xc0\xe7\xb9\x91\x5d\xc0\xe6\x34\x13\xba\x59\x0a\xea\x12\
+\x2c\x9f\x5a\xb4\x07\xca\xea\x1b\xde\x5f\x3d\xf1\xdc\x5f\x9d\x78\
+\x99\x36\xca\x8d\xd2\xde\xc9\x48\xd0\xb9\x8f\x3d\x63\x64\x32\x41\
+\x34\x5a\x30\x47\xde\xe1\x4c\x92\x6f\x6c\xbc\x95\xb8\x0a\x0c\x18\
+\x24\x08\xec\x2a\xeb\xfb\x05\x37\x54\x8f\xe3\x60\x55\xc5\x56\x02\
+\x2d\xa3\xea\x46\xa7\x91\xd7\xd4\x57\x10\x23\x8c\xe0\x03\xff\xe6\
+\xb5\x48\xcb\x34\x2f\x90\x15\xb8\x9b\xc1\xcd\xe8\x76\xe4\xb8\x87\
+\x81\x09\x68\xfe\xae\x9f\x3d\x7b\x3f\x81\xd8\xa8\x99\xc6\xa5\x59\
+\x55\xf1\xbf\xd9\x7b\x1e\xeb\xf9\xac\x8a\x77\xe4\xc8\x69\xb3\x2a\
+\x67\xd9\xfc\xca\xa4\xd7\xe5\x56\x4e\x4f\x32\x69\x96\x29\x5a\x79\
+\x80\x73\x54\x96\x25\xdd\x5a\x7d\x99\xd3\xba\xcf\xb6\x7c\x57\x35\
+\xee\x85\x9f\xc6\x55\x6e\x6e\x6b\xd0\xb4\xc1\x50\x4a\x60\xd9\x0f\
+\x71\xc8\xee\x8a\xdd\x97\xfa\x56\xdc\x17\x98\x0d\xce\x6a\xaf\xc1\
+\x6d\xeb\x5e\x83\x4f\x1b\xd6\xac\xc1\xcb\x65\x6f\xaf\xc1\xd7\xae\
+\xc1\x57\xcd\x4c\xbc\x88\xf4\xce\x2a\xf0\x4b\x3f\x05\x4e\xed\xd4\
+\xb6\xa2\xbf\xb7\xb3\xfd\x84\xd9\x18\x41\xdf\xab\xef\xbd\xfa\xde\
+\xa5\xac\x6a\x3d\xcd\x45\xab\xd4\x81\xf8\x6d\xfb\x5d\xb8\xd6\x54\
+\xdd\x98\x47\x2a\xd0\x66\x1f\x79\xcc\xde\x84\x5c\xcf\x68\x33\x0c\
+\x19\x31\xe8\xf0\xc9\x0e\x15\x05\xb4\xa7\xb3\x35\xf1\xb5\x4c\xe0\
+\x3a\x29\x0e\x5b\x5d\xe3\xdd\x8f\xe4\x5b\x89\x3d\xa4\x67\x66\x26\
+\x6d\x57\x78\x37\x75\x60\xd5\x92\x78\x76\x7f\x41\x9c\x1a\xe2\x1e\
+\x0b\xbe\x15\x1a\x62\xec\xf0\x8a\x07\x1b\x08\xc0\xb6\xc8\xbe\x1d\
+\x02\x18\x92\x11\x8d\x35\xd1\x62\x52\x4a\x64\x12\x07\xb5\x54\xac\
+\x58\x8a\xbe\xe9\x70\xc5\x48\x84\xaa\x84\xe5\x37\xc1\xcd\x2d\x7a\
+\x0b\x38\x58\xf3\xee\x72\x44\x34\x0e\x53\xb1\x6b\x1a\x48\xa1\x14\
+\x51\x4c\x61\xf1\xa7\x47\xec\x7a\x99\xac\x26\x20\x25\x62\x76\xc7\
+\x77\xd6\xd4\x57\xcd\xe6\x97\x9b\x60\x73\x9f\x10\xed\x87\x8e\xe3\
+\x72\x45\x0c\x38\x16\x1e\x01\x3b\x0d\xc6\xa9\xe2\xb9\x36\x03\x27\
+\x74\xa0\x13\x8e\x02\x2f\xb7\x0f\xac\x76\x44\x04\x70\xbb\x1c\x71\
+\xc5\x92\x26\x65\xef\xa7\xd1\x88\x8e\x81\xf3\x34\x95\x58\xea\x48\
+\x62\xf1\xd3\x04\xe2\x26\x44\xe1\x5d\x24\xda\x34\x22\x6b\x18\xc3\
+\x51\x20\x37\x4c\x1b\xe8\xd7\x04\x45\x0e\x80\xcd\xcf\xcd\xda\x8c\
+\xc1\xb8\xbf\xc3\x95\x80\x55\xcb\x4f\xfd\xe9\x46\x04\xc8\x23\x67\
+\xff\xab\x90\x7d\x1a\x45\xe3\x23\x02\x84\x64\xd2\xb0\x21\xa6\x3a\
+\x5c\xce\xf0\xc8\x19\x8b\x01\x67\x8a\x20\x72\x8a\x45\xd0\xce\xc2\
+\x63\x92\x88\x9e\x18\x18\xdf\x27\x2d\x81\xf8\x4c\x9b\x82\x64\x25\
+\x39\xff\x44\x10\x93\xa7\x41\xae\x94\x66\x34\xf4\xc8\xf2\x97\xd8\
+\x16\x33\x48\x16\x81\xcc\xe4\xb6\x63\x4c\x0c\x16\x2f\x01\x89\xdf\
+\x92\xf4\xeb\x5e\x26\x8a\x64\xe2\x7c\x23\x22\xf1\x74\xbd\x36\xc5\
+\xb8\x50\x69\xeb\x80\x41\x6a\x70\xa7\xc0\x59\x50\x3a\x25\x2f\xae\
+\xa2\x05\xab\x5b\xa0\xd5\x08\x49\x2c\x74\xea\xf9\xb6\x0d\x70\x0f\
+\xcc\x33\x71\x34\x86\x07\x58\x4c\x00\x75\xf0\x73\xa0\xe9\xd5\xcd\
+\xe7\x8f\x1b\x11\x8a\x17\x59\xbc\x13\x74\x1f\x87\x5c\xd1\x76\x34\
+\x8d\xba\x63\xc0\xe6\x5f\x0f\xd9\x04\xd9\x05\x6a\xed\x70\xb8\x7d\
+\xed\x41\xdf\xf2\x1d\xee\x3e\xe8\xbb\xee\xa0\x6f\xdd\x33\x40\x2a\
+\x69\xc8\x87\x6a\x52\x69\x6a\x74\x01\xc8\xa4\x1a\xb0\x80\x83\x27\
+\x38\x10\x40\x48\x75\x8c\x6f\x22\x61\xf3\x89\xad\xe3\x11\x04\x44\
+\x55\xd3\x38\x60\xe4\x31\x8f\x3b\x3c\x06\xbc\x3d\x04\x75\x41\x6e\
+\x51\xd2\xb8\x5b\x45\x38\x67\x41\x85\xd4\x02\x56\x57\xc3\x4e\x87\
+\xe7\x23\xc5\x6e\x0e\x83\xbb\xed\x98\x7d\xa0\xde\x67\x4b\xbc\x07\
+\xaa\x7d\x36\xfd\x26\xc8\x12\x31\xcb\x25\xec\xbd\xc7\x0b\x5f\x45\
+\xf6\x7e\x22\x97\xc6\x68\x83\x09\x27\x22\x08\x86\x92\xd0\x2e\x45\
+\xd7\x35\xe5\xd8\xea\x1e\x98\x4d\x89\x41\x15\x1a\x1b\xc7\x97\xc7\
+\x21\x0f\x28\x3a\xb9\x36\x33\x41\x44\x87\x30\x98\x95\x47\x0c\x63\
+\x51\x21\x00\xbd\xe3\xfd\x61\xff\x21\x5b\x6d\x98\xc2\x8f\x64\xb2\
+\xf7\x06\x7b\x3e\xa5\x37\x91\xa5\xf5\xd8\x20\xff\x62\x85\x2b\x2f\
+\xcc\x68\x99\xdb\xcc\x84\xff\x79\xc8\x24\x48\x7b\xda\x9c\x6f\x42\
+\xd4\xe7\x20\xb2\x83\x46\xba\xbc\x08\xc1\x69\xab\xe2\x7c\xee\xd5\
+\xd5\xd5\xea\x19\xdd\xb2\x32\xe5\xb3\xed\x24\x8a\xad\x1a\x7b\x63\
+\x17\xe6\x81\xea\xb2\x0d\x3b\x00\x9b\x09\x81\x79\x14\x9d\x15\xd9\
+\xff\x4c\xe0\x0a\x64\x9a\xd9\x8c\x48\x07\x2e\x41\xd4\xa7\xb9\x91\
+\x63\xf2\x5b\x12\x46\x36\x61\xaf\x71\xfe\x89\x11\x07\x2c\xe5\x32\
+\xb9\xd1\x25\x54\xc2\x5b\x1c\x6b\xf2\x5e\xcd\xd8\x3f\x61\xb3\x04\
+\xab\x23\x29\xf6\xa1\xde\xf9\x6c\xee\x7b\x44\x83\xef\x2b\xcf\x78\
+\x26\x01\x3a\xb0\x83\x88\xc6\xbb\x79\x46\x43\xf9\x0c\x97\x60\x45\
+\xc7\xf6\x7f\x7c\xda\x55\x5e\xf4\x2b\x52\xf9\x55\x14\x2f\xe0\x76\
+\x4a\x64\xfe\xfd\x27\x79\x7c\x23\x06\x85\xa1\x86\x2d\x61\xf0\x1f\
+\xf2\xf8\xad\x04\xd9\xaa\x10\x87\x3f\x01\x87\x16\x38\x7a\x5e\x28\
+\x54\xad\x92\xea\x9b\x49\xdf\x7a\x14\xd8\x80\xe9\x9d\x98\x5c\x4a\
+\xba\x92\x87\x19\xfb\x69\x62\xe3\x2e\x96\xbe\x09\xfb\xf9\x45\x31\
+\x33\xe8\x43\xde\x39\x5b\xfc\x77\x53\xef\xad\x3d\xd2\x5d\x1e\x78\
+\xdd\x6f\x9c\xd7\x1e\xe9\x5e\x50\x9a\x31\xbf\xa8\x01\x45\xd9\x1d\
+\x17\x56\x81\xf3\xf1\x5a\x0c\xdb\x11\x9b\xb7\x4f\x0d\x4d\x6f\xb2\
+\x5b\xf5\x7a\xe1\x9d\x25\x93\x24\x6d\xa6\x47\x0c\xd4\x15\xa3\x41\
+\xcf\x6a\x32\x2c\x66\x5a\xef\x3b\xb7\x16\xf1\x66\xfd\xf8\x24\xfb\
+\xaf\x51\x73\x3d\x9b\x56\x34\xad\x64\x45\xff\x31\xfa\xe6\x1e\x32\
+\xb0\x60\x6b\x59\x12\xb0\xe1\xb1\x61\x02\x45\xd8\x2d\x5b\xa2\x2a\
+\x74\x7b\x91\x1a\x8f\xa8\x39\xce\xce\x4e\x2e\xc9\x6b\xdb\x23\x1d\
+\x60\x2b\x0d\x16\x51\x1e\x93\x16\xa6\xb3\x3a\x63\x02\xdb\x63\x46\
+\x7a\x62\x44\xfa\x34\x1e\x13\xf5\x7d\x48\x25\x53\x13\x71\xe9\x27\
+\x60\x3c\xb2\xde\x25\x71\x9f\xfa\xc9\x56\xe2\x3e\x28\x1b\x6f\xec\
+\x1a\x3f\x50\xc9\xd8\xb4\xeb\xe9\xf9\x82\xfa\x82\x72\x8e\xb9\x32\
+\xf8\x01\x0f\xc2\x8b\x31\xa9\x2a\x81\x1b\xb1\x94\x94\x44\x20\x8c\
+\x85\xaf\x1c\x54\x2c\x8b\xe5\x76\xc8\x45\x4d\x5b\xe0\x0a\xdc\xd7\
+\xdd\xb8\x28\x77\x37\xea\x17\x97\x97\x97\xa7\xf5\x73\x1f\xa7\x63\
+\x79\x73\x39\x8d\x5e\x87\xb0\x20\x7d\x1a\x99\xc3\x10\x79\xb2\x4c\
+\x81\x10\x32\xe4\x31\xd5\x0c\x0b\xcb\x98\x34\xce\x9c\x22\x8f\x31\
+\xb8\xce\xee\x8e\xc9\x13\x72\x4d\x4e\xc0\xfc\xd5\x3d\x52\xdf\x25\
+\xea\xe2\x62\x2b\xda\x62\xc2\x8b\x0f\x56\x5b\x2c\xeb\xb7\x97\xdb\
+\x99\xbd\xdf\xbe\x76\xbf\x7d\x55\x7d\xf9\x9a\xf7\x59\x6c\x2a\xee\
+\x1f\x80\xc6\x2c\xdf\x9c\x94\xe6\x99\x9e\x6e\x26\xcb\xb4\x15\xf5\
+\x11\xf2\xfe\xa7\x07\xaf\x41\x36\xed\x6f\x2c\x51\x55\x5a\x24\x40\
+\x0b\x2a\xbc\xe6\xca\xcf\x8d\x88\xc0\x68\xc5\xc1\x46\x23\xee\xe5\
+\xba\xb6\x5c\xf4\xf7\xba\xd6\x47\xd7\xae\x12\x60\xf8\x01\xdc\xba\
+\xe9\x5b\x92\x46\x39\xe2\x4b\x66\x21\xe6\x23\x3b\xc3\x38\xb0\x0e\
+\x9c\xee\x51\x6d\xde\x3d\xa3\x44\x27\x22\x72\x7c\xf0\x15\xef\x76\
+\x45\x54\x21\xef\x74\x60\xa7\x08\xed\xb8\x39\x8c\x60\xbf\x68\x92\
+\xb2\x16\x60\xb2\xc5\xd4\x92\x99\xca\x2a\xaa\x88\x02\xc4\x3c\xf6\
+\x8c\x25\xa5\x82\xb5\x55\x18\x3e\xee\x02\x3b\x68\x96\x27\x91\x8b\
+\xcb\x80\xcb\x5a\x5f\x53\xc4\xa6\x24\x2e\x04\xa3\x9c\x6f\x3f\x2e\
+\xa4\xa7\x2a\x6f\x6f\x8b\x8a\x6c\xd1\x85\x9f\x29\x5a\x35\xfc\x94\
+\x24\x82\xf1\x0e\x62\x75\x41\x75\x46\xa9\xfc\xe8\xd4\xbd\x51\xda\
+\xb6\x51\x5a\x90\xb4\xfb\x27\x98\xa5\x84\xff\xed\x78\xa6\x3c\x0f\
+\x45\x41\x99\x17\x8d\xc3\xc9\x3e\x67\x23\x11\xfa\x93\xe3\xd3\x0a\
+\x22\xf4\x38\xbd\x44\xd0\xf7\xaa\xb8\x70\x5b\xe0\xf9\x1d\x82\x55\
+\xd3\x61\x19\x5d\xdc\x01\x8c\xaa\xd3\xc4\xe5\x61\xc6\xbd\x26\x5e\
+\x8b\x26\x5e\x78\x2a\x89\x4f\xce\x71\xf6\x4c\x12\xe4\x28\xf3\xec\
+\xe4\x4b\x30\xf6\x7b\x33\x45\xfa\xee\xf8\xe0\x03\xe0\x4b\x63\x74\
+\xa7\x69\xea\x49\x35\x0c\x7a\xe8\x57\x3f\xfa\x3e\x14\xfa\xf9\x0b\
+\xc9\x69\x64\x7f\x62\x65\x46\x32\x90\xd2\xe3\x28\x7f\xab\xa2\xb1\
+\x4a\xee\x74\x2d\x4c\xf2\x8e\xfd\x79\x00\xf8\xd8\x5f\x7d\x11\x8b\
+\xe4\x36\x44\x92\x74\x68\x9f\x47\xe3\xa2\x71\x8f\xde\xb3\xe8\x96\
+\xe1\xb7\x93\x8e\xa6\xc0\xed\x43\x06\x55\xb3\x5f\xa0\x16\x99\x83\
+\x82\xe7\x9f\xbd\x14\x51\x68\xaf\x37\xf2\x2a\x25\x8e\xb1\x3a\x60\
+\x1a\xf1\x6e\x0c\xab\x31\x03\x1d\x84\x1c\xe5\xeb\x05\xf6\x7f\x46\
+\x1e\xfe\xdf\xe4\xf2\x46\x52\x0e\xac\xd3\x9d\xb6\x7c\x7d\xc5\x30\
+\x66\x0e\x68\x30\xbd\x3c\x0e\x4b\x1a\x15\xab\xb1\xf6\x26\xa5\xd0\
+\xa4\xd4\xfd\x4c\x4a\x7d\xd5\x33\x40\xa7\x36\xa5\x3f\x88\xf0\x33\
+\x52\xaa\xc7\x58\x85\x86\x65\xc1\x44\xf6\x96\x65\x2d\x96\xe5\x2d\
+\x8f\xd8\xab\x9e\x10\xa0\x63\x67\x8c\x4b\x07\xfa\x02\xdb\xb7\xc8\
+\xbf\xe7\xf1\xb2\xfe\xfd\x93\x93\x72\x02\x79\xd1\x67\xf9\x3c\x62\
+\x98\xe7\x7e\x77\xb6\x91\x29\x19\x0c\x30\x4c\x84\x45\x39\xd4\x9c\
+\x7f\xef\x2a\x08\x97\x14\x10\x3f\xa5\x69\xb1\xda\x2b\xcd\x39\x4a\
+\x73\x89\xf3\xb2\x0a\x94\xa6\x7f\x72\xeb\x11\xed\x0f\x9e\x93\x8f\
+\x8c\x86\xa0\xd0\xa8\x94\x62\x64\xdd\x89\x5d\x2c\x94\x5f\x5b\x99\
+\x3c\xef\xdb\x6f\x1a\xed\x2a\x57\xfa\x95\x68\xbf\x16\x9a\x9c\x57\
+\x57\x21\x8e\xc3\x5f\x56\x3b\xfc\x55\x75\xc3\xbf\xe2\x32\x80\x9d\
+\x41\x85\xf4\x77\x18\x54\xb8\x04\x0e\x83\x0a\x57\xa1\x05\xaa\xa5\
+\x57\xe5\x22\x58\x04\x2a\x5c\x03\x8b\x40\x85\x4b\xf0\x92\x06\xdf\
+\x54\xd5\xcb\x30\x45\xa2\xc2\xa5\x98\x22\xe1\xb5\x1c\x95\xbb\x2a\
+\x9e\xe9\x9b\xfa\x82\x1a\xdb\xb9\xde\xca\x57\x66\x3f\x1f\x9d\x8a\
+\xdd\xd8\xf8\x61\x6a\x27\xb5\x8b\xee\xca\xba\xbe\x20\x97\x9a\x26\
+\x96\x0b\x9a\x78\x57\x42\x09\x17\xd9\x32\xce\xbe\xee\xc1\x86\x27\
+\x4d\x24\x2a\x19\x49\xbe\xbd\x7d\x4c\x92\x6d\x32\x40\x8d\x58\x47\
+\x1f\xb9\x0f\x39\xbb\x41\x3e\xb4\x7e\xc3\x93\x1e\xe3\x90\x4a\x9f\
+\xc3\xe8\x96\xf3\xc2\x32\x0b\xf8\x4f\x74\xc5\x3e\x02\xa1\xc9\xe3\
+\x34\x6d\x2b\x7c\x75\xef\xf3\xbc\xcc\xe7\x03\xd1\x40\x9e\xea\x67\
+\xd5\xef\xe5\xbd\x88\x4c\x49\x2e\xec\xac\x5b\x5f\xdf\x11\x60\x34\
+\xbc\x04\x19\x12\xc1\xc6\x35\xcf\x82\x38\x53\xf9\xa1\xe5\xfb\x38\
+\xd3\x56\xe3\x4c\x0b\xaa\xd6\x1f\x74\x9c\xe9\x3d\xbe\xb9\x82\x27\
+\x37\x62\xba\x44\xb9\xd7\x59\x28\x98\x1a\xc9\x02\x2d\xe4\x18\x4f\
+\x7f\xd1\xee\xd3\x70\x28\x24\x48\x17\x95\x6e\x7c\x14\xe9\xe7\x03\
+\x2b\x39\x8f\xba\xfa\x39\x06\xad\xf0\xdc\xb6\x69\x45\x54\x92\x87\
+\x09\x43\x16\x62\x04\x0b\x4d\x52\xa2\x32\x5d\x0e\x07\x6e\x03\x73\
+\xe5\xa0\x6c\xe7\x1c\x6c\x37\x18\xb2\xc0\xae\xda\x27\x3f\x9d\x9c\
+\xed\xcc\xc0\x9a\xde\x97\xba\x29\x75\x87\xd3\xdf\x93\x84\x98\x7d\
+\x21\xee\xfa\xf0\xe2\x90\xf4\xa9\xec\xf2\xf8\xfa\xb0\x5e\x3f\xc4\
+\x12\xb2\xc6\x80\xdf\xf5\xe9\x20\xa9\x81\x6b\x7e\xff\x64\xae\xdf\
+\x4a\xd1\xff\x05\x9c\x95\x96\x18\x4a\xac\x99\xca\xdd\x05\xcf\x05\
+\x43\xa5\x45\xdf\x8e\xa8\x0c\x26\xe9\x16\x8b\xa5\x11\xd7\xa6\x91\
+\xd6\x94\xa4\x02\xfd\x4c\xbb\xb9\x05\x34\x3b\x8b\x43\xd5\xfc\xfd\
+\x0f\xf3\x1c\xa8\x3a\xd7\x70\x60\xa5\x09\x43\x5f\x08\xa1\x86\x00\
+\x5e\x73\x1a\x89\xee\x71\x0f\x85\xcb\x74\x18\x02\xe4\xc7\x2d\x47\
+\x24\xf5\x85\xe1\x62\x44\x3e\x0d\x55\x2f\xe9\x9f\x87\x8c\x45\x56\
+\xf9\x61\x92\x53\x60\x85\xd8\xcc\xd2\x6e\x1e\x4a\x08\x6d\x6d\x68\
+\xb9\xea\x9c\x62\x02\x4d\x3a\xb7\x82\xca\xa2\xf5\x9a\x5d\xd4\xed\
+\xa0\xe5\x0e\x1c\x28\x26\xd1\xb4\x77\x4b\x34\xb2\xbb\x9d\x39\xc8\
+\x4c\x7a\xb7\x82\x4c\x52\x55\x50\x8c\xcc\xb4\x77\x2b\xc8\x64\x8a\
+\xcd\x8a\x31\xca\xdd\xe2\x8f\x56\xb6\x01\x21\x35\x24\x53\x46\x91\
+\x2a\xa3\x72\xc1\xf6\xc6\xcc\x96\x1c\xdb\x59\x4c\xae\xed\xa8\x0a\
+\x10\x00\xd8\x05\x67\x58\x60\x22\x3d\x76\xe3\xa2\x77\xd2\x8d\x69\
+\xd4\x0c\x22\x7c\x97\x35\x7c\x8c\x87\x38\xe0\x0e\xc6\xb6\x9a\x3b\
+\xc0\x05\x60\xfc\x36\x0d\x2b\xf7\x56\x39\x7e\x57\xdc\xdd\x62\x41\
+\x46\x42\x37\xc1\x0c\xbe\x89\xf1\xbc\xe5\x29\x4c\x6c\xb6\x14\xc1\
+\x53\x5f\x9d\x45\xc2\xdf\x44\x8f\x07\xe8\x6a\x9a\xe9\x65\xd2\x1e\
+\x8d\xbb\x66\xfd\x04\x06\xb8\x4b\xae\xc7\xcd\x27\x97\x70\x3d\x4e\
+\xec\x19\x3e\x3e\x0b\x29\x64\x78\x54\xb5\xf1\x8c\xf3\xe0\x9e\x9c\
+\x5d\xe6\xc0\x9d\x15\x81\xb3\x3f\x95\x5b\x9b\x0c\x6d\xb7\x4a\xea\
+\xc9\xeb\xcb\x9b\x25\xf2\xe5\xd5\x3a\x69\x7c\x7e\x59\xdf\x1a\x8d\
+\xcf\xd6\x47\xe3\x8b\xcd\xd2\xf8\x2c\x4b\xe3\xd3\xcb\x73\x2f\x1a\
+\x9f\x9f\xe4\xc0\x5d\xee\x20\x8d\x93\x43\x29\x37\x4c\xd9\xb3\x75\
+\x52\xf6\xec\xe4\x3c\x0b\xee\x69\xa1\x30\x54\xac\x21\x92\x53\x4b\
+\x36\x4b\xd9\xf3\xa7\x59\x41\xbe\xf0\xa2\x6c\xfd\x22\xa7\xca\x2f\
+\xae\x76\x97\xb2\x1b\xd6\x06\x4f\xf2\xa4\x28\x14\xdf\x7b\x5b\xb5\
+\xab\x3c\xb8\xa7\xcb\x51\x36\x7d\x09\xfd\x8d\xda\x90\x37\x0f\xfe\
+\x0f\x44\xe6\x40\x56\
\x00\x00\x12\x15\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -30459,6 +30476,140 @@ qt_resource_data = "\
\x74\x68\x69\x63\x20\x42\x6f\x6c\x64\x2c\x20\x42\x6f\x6c\x64\x27\
\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\
\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x08\x3f\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\
+\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\
+\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\
+\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\
+\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\
+\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\
+\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\
+\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\
+\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\
+\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\
+\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\
+\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\
+\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\
+\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\
+\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\
+\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x36\
+\x70\x78\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\
+\x36\x70\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x32\
+\x39\x38\x35\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\
+\x22\x31\x2e\x31\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
+\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x34\x38\x2e\
+\x31\x20\x72\x39\x37\x36\x30\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\
+\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x4e\x65\
+\x77\x20\x64\x6f\x63\x75\x6d\x65\x6e\x74\x20\x32\x22\x3e\x0a\x20\
+\x20\x3c\x64\x65\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\
+\x64\x65\x66\x73\x32\x39\x38\x37\x22\x20\x2f\x3e\x0a\x20\x20\x3c\
+\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\
+\x65\x77\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x62\x61\x73\x65\
+\x22\x0a\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\
+\x3d\x22\x23\x66\x66\x66\x66\x66\x66\x22\x0a\x20\x20\x20\x20\x20\
+\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\
+\x36\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\
+\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\x2e\x30\x22\x0a\x20\
+\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\
+\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x2e\x30\x22\x0a\x20\
+\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\
+\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\x20\x20\x20\
+\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\
+\x31\x35\x2e\x36\x39\x36\x32\x31\x36\x22\x0a\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x37\x2e\x38\
+\x33\x36\x32\x32\x39\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x37\x2e\x35\x33\x33\x36\
+\x36\x31\x37\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\
+\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\
+\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\
+\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x69\
+\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\x20\
+\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\x63\x75\
+\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\x0a\
+\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\
+\x6e\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x32\x38\x30\
+\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\
+\x77\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x37\
+\x35\x38\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
+\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x30\x22\x0a\x20\
+\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\
+\x64\x6f\x77\x2d\x79\x3d\x22\x31\x39\x22\x0a\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\
+\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\x3e\
+\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\x20\x20\x20\
+\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x32\x39\
+\x39\x30\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\
+\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\
+\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\
+\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\
+\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\
+\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\
+\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\
+\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\
+\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\x64\
+\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\
+\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\x2f\
+\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\x74\
+\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\
+\x20\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\
+\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\
+\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x0a\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\
+\x64\x65\x3d\x22\x6c\x61\x79\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\
+\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\
+\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\
+\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x66\
+\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\
+\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\
+\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\
+\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x2e\x32\x30\
+\x30\x30\x30\x30\x30\x35\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\
+\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\
+\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\
+\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\
+\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\
+\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\
+\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\
+\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\
+\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\
+\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\
+\x61\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\
+\x20\x36\x2e\x34\x39\x36\x33\x34\x39\x2c\x30\x2e\x38\x30\x38\x38\
+\x34\x39\x30\x31\x20\x30\x2c\x35\x2e\x37\x34\x39\x39\x39\x39\x39\
+\x39\x20\x2d\x35\x2e\x37\x34\x39\x39\x39\x39\x39\x39\x2c\x30\x20\
+\x30\x2c\x33\x2e\x30\x33\x31\x32\x35\x20\x35\x2e\x37\x34\x39\x39\
+\x39\x39\x39\x39\x2c\x30\x20\x30\x2c\x35\x2e\x37\x31\x38\x37\x35\
+\x20\x33\x2c\x30\x20\x30\x2c\x2d\x35\x2e\x37\x31\x38\x37\x35\x20\
+\x35\x2e\x37\x35\x2c\x30\x20\x30\x2c\x2d\x33\x2e\x30\x33\x31\x32\
+\x35\x20\x2d\x35\x2e\x37\x35\x2c\x30\x20\x30\x2c\x2d\x35\x2e\x37\
+\x34\x39\x39\x39\x39\x39\x39\x20\x2d\x33\x2c\x30\x20\x7a\x22\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x65\x63\x74\x32\
+\x39\x39\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\
+\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\
+\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
\x00\x00\x15\x00\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -31578,6 +31729,10 @@ qt_resource_name = "\
\x0c\x0c\x01\x67\
\x00\x44\
\x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x54\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x05\x30\xe2\x07\
+\x00\x44\
+\x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x43\x00\x75\x00\x72\x00\x73\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x16\
\x0f\xbe\x75\x07\
\x00\x44\
@@ -31600,8 +31755,8 @@ qt_resource_name = "\
qt_resource_struct = "\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x01\
-\x00\x00\x00\x10\x00\x02\x00\x00\x00\x02\x00\x00\x00\x3e\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x24\x00\x00\x00\x1a\
+\x00\x00\x00\x10\x00\x02\x00\x00\x00\x02\x00\x00\x00\x3f\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x25\x00\x00\x00\x1a\
\x00\x00\x00\x38\x00\x02\x00\x00\x00\x05\x00\x00\x00\x15\
\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x10\x00\x00\x00\x05\
\x00\x00\x02\x72\x00\x01\x00\x00\x00\x01\x00\x05\x98\x94\
@@ -31625,42 +31780,43 @@ qt_resource_struct = "\
\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x01\x64\
\x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x04\xc4\
\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x03\x12\
-\x00\x00\x06\x98\x00\x01\x00\x00\x00\x01\x00\x06\xfa\x5b\
-\x00\x00\x05\xa6\x00\x00\x00\x00\x00\x01\x00\x06\xa0\xce\
-\x00\x00\x07\x06\x00\x01\x00\x00\x00\x01\x00\x07\x1f\x8d\
-\x00\x00\x03\x66\x00\x01\x00\x00\x00\x01\x00\x06\x03\x81\
-\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x06\x23\xea\
-\x00\x00\x04\x60\x00\x01\x00\x00\x00\x01\x00\x06\x4c\xaf\
-\x00\x00\x05\x26\x00\x01\x00\x00\x00\x01\x00\x06\x78\xfc\
-\x00\x00\x05\xc8\x00\x00\x00\x00\x00\x01\x00\x06\xaf\x84\
-\x00\x00\x06\xda\x00\x01\x00\x00\x00\x01\x00\x07\x0e\x83\
-\x00\x00\x05\x02\x00\x01\x00\x00\x00\x01\x00\x06\x6e\x90\
-\x00\x00\x04\x86\x00\x01\x00\x00\x00\x01\x00\x06\x52\x73\
-\x00\x00\x03\xbc\x00\x01\x00\x00\x00\x01\x00\x06\x17\xf9\
-\x00\x00\x07\x78\x00\x01\x00\x00\x00\x01\x00\x07\x3e\xe1\
-\x00\x00\x04\xdc\x00\x01\x00\x00\x00\x01\x00\x06\x64\xfc\
-\x00\x00\x02\xe2\x00\x00\x00\x00\x00\x01\x00\x05\xe1\x20\
-\x00\x00\x03\x34\x00\x01\x00\x00\x00\x01\x00\x05\xfb\xc8\
-\x00\x00\x06\x74\x00\x00\x00\x00\x00\x01\x00\x06\xe3\xa8\
-\x00\x00\x06\x46\x00\x01\x00\x00\x00\x01\x00\x06\xdb\xc3\
-\x00\x00\x04\x18\x00\x00\x00\x00\x00\x01\x00\x06\x33\x3b\
-\x00\x00\x05\x56\x00\x00\x00\x00\x00\x01\x00\x06\x84\xd5\
-\x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\x46\x12\
-\x00\x00\x03\x04\x00\x01\x00\x00\x00\x01\x00\x05\xf3\x39\
-\x00\x00\x07\x28\x00\x01\x00\x00\x00\x01\x00\x07\x28\x36\
-\x00\x00\x08\x38\x00\x00\x00\x00\x00\x01\x00\x07\x89\xe8\
-\x00\x00\x08\x16\x00\x01\x00\x00\x00\x01\x00\x07\x7c\x89\
-\x00\x00\x07\x9a\x00\x01\x00\x00\x00\x01\x00\x07\x49\x43\
-\x00\x00\x07\xc2\x00\x00\x00\x00\x00\x01\x00\x07\x52\xf4\
-\x00\x00\x05\x7c\x00\x01\x00\x00\x00\x01\x00\x06\x96\x8d\
-\x00\x00\x06\x16\x00\x01\x00\x00\x00\x01\x00\x06\xd1\xf0\
-\x00\x00\x03\x94\x00\x01\x00\x00\x00\x01\x00\x06\x0c\x87\
-\x00\x00\x05\xee\x00\x01\x00\x00\x00\x01\x00\x06\xc2\x1a\
-\x00\x00\x04\xb2\x00\x01\x00\x00\x00\x01\x00\x06\x5a\x7a\
-\x00\x00\x08\x5e\x00\x01\x00\x00\x00\x01\x00\x07\x94\x93\
-\x00\x00\x07\x4c\x00\x00\x00\x00\x00\x01\x00\x07\x2f\x87\
-\x00\x00\x06\xba\x00\x01\x00\x00\x00\x01\x00\x07\x05\x0f\
-\x00\x00\x07\xe4\x00\x00\x00\x00\x00\x01\x00\x07\x67\x85\
+\x00\x00\x06\x98\x00\x01\x00\x00\x00\x01\x00\x06\xfb\x6d\
+\x00\x00\x05\xa6\x00\x00\x00\x00\x00\x01\x00\x06\xa1\xe0\
+\x00\x00\x07\x06\x00\x01\x00\x00\x00\x01\x00\x07\x20\x9f\
+\x00\x00\x03\x66\x00\x01\x00\x00\x00\x01\x00\x06\x04\x93\
+\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x06\x24\xfc\
+\x00\x00\x04\x60\x00\x01\x00\x00\x00\x01\x00\x06\x4d\xc1\
+\x00\x00\x05\x26\x00\x01\x00\x00\x00\x01\x00\x06\x7a\x0e\
+\x00\x00\x05\xc8\x00\x00\x00\x00\x00\x01\x00\x06\xb0\x96\
+\x00\x00\x06\xda\x00\x01\x00\x00\x00\x01\x00\x07\x0f\x95\
+\x00\x00\x05\x02\x00\x01\x00\x00\x00\x01\x00\x06\x6f\xa2\
+\x00\x00\x07\xe4\x00\x00\x00\x00\x00\x01\x00\x07\x68\x97\
+\x00\x00\x04\x86\x00\x01\x00\x00\x00\x01\x00\x06\x53\x85\
+\x00\x00\x03\xbc\x00\x01\x00\x00\x00\x01\x00\x06\x19\x0b\
+\x00\x00\x07\x78\x00\x01\x00\x00\x00\x01\x00\x07\x3f\xf3\
+\x00\x00\x04\xdc\x00\x01\x00\x00\x00\x01\x00\x06\x66\x0e\
+\x00\x00\x02\xe2\x00\x00\x00\x00\x00\x01\x00\x05\xe2\x32\
+\x00\x00\x03\x34\x00\x01\x00\x00\x00\x01\x00\x05\xfc\xda\
+\x00\x00\x06\x74\x00\x00\x00\x00\x00\x01\x00\x06\xe4\xba\
+\x00\x00\x06\x46\x00\x01\x00\x00\x00\x01\x00\x06\xdc\xd5\
+\x00\x00\x04\x18\x00\x00\x00\x00\x00\x01\x00\x06\x34\x4d\
+\x00\x00\x05\x56\x00\x00\x00\x00\x00\x01\x00\x06\x85\xe7\
+\x00\x00\x04\x3c\x00\x01\x00\x00\x00\x01\x00\x06\x47\x24\
+\x00\x00\x03\x04\x00\x01\x00\x00\x00\x01\x00\x05\xf4\x4b\
+\x00\x00\x07\x28\x00\x01\x00\x00\x00\x01\x00\x07\x29\x48\
+\x00\x00\x08\x5e\x00\x00\x00\x00\x00\x01\x00\x07\x93\x3d\
+\x00\x00\x08\x3c\x00\x01\x00\x00\x00\x01\x00\x07\x85\xde\
+\x00\x00\x07\x9a\x00\x01\x00\x00\x00\x01\x00\x07\x4a\x55\
+\x00\x00\x07\xc2\x00\x00\x00\x00\x00\x01\x00\x07\x54\x06\
+\x00\x00\x05\x7c\x00\x01\x00\x00\x00\x01\x00\x06\x97\x9f\
+\x00\x00\x06\x16\x00\x01\x00\x00\x00\x01\x00\x06\xd3\x02\
+\x00\x00\x03\x94\x00\x01\x00\x00\x00\x01\x00\x06\x0d\x99\
+\x00\x00\x05\xee\x00\x01\x00\x00\x00\x01\x00\x06\xc3\x2c\
+\x00\x00\x04\xb2\x00\x01\x00\x00\x00\x01\x00\x06\x5b\x8c\
+\x00\x00\x08\x84\x00\x01\x00\x00\x00\x01\x00\x07\x9d\xe8\
+\x00\x00\x07\x4c\x00\x00\x00\x00\x00\x01\x00\x07\x30\x99\
+\x00\x00\x06\xba\x00\x01\x00\x00\x00\x01\x00\x07\x06\x21\
+\x00\x00\x08\x0a\x00\x00\x00\x00\x00\x01\x00\x07\x70\xda\
\x00\x00\x02\x8e\x00\x01\x00\x00\x00\x01\x00\x05\xcc\x17\
\x00\x00\x02\xba\x00\x01\x00\x00\x00\x01\x00\x05\xd3\xa8\
"
diff --git a/src/Mod/Draft/Resources/Draft.qrc b/src/Mod/Draft/Resources/Draft.qrc
index e8b9a2b12..5d6b16d7c 100644
--- a/src/Mod/Draft/Resources/Draft.qrc
+++ b/src/Mod/Draft/Resources/Draft.qrc
@@ -36,6 +36,7 @@
icons/Draft_Wipe.svg
icons/Draft_Draft2Sketch.svg
icons/Draft_Array.svg
+ icons/Draft_Cursor.svg
patterns/concrete.svg
patterns/cross.svg
patterns/line.svg
diff --git a/src/Mod/Draft/Resources/ui/userprefs-base.ui b/src/Mod/Draft/Resources/ui/userprefs-base.ui
index 8a7a52e24..320d91672 100755
--- a/src/Mod/Draft/Resources/ui/userprefs-base.ui
+++ b/src/Mod/Draft/Resources/ui/userprefs-base.ui
@@ -205,6 +205,19 @@
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
-
@@ -243,6 +256,19 @@
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
-
@@ -432,6 +458,68 @@
+ -
+
+
-
+
+
+ If this is checked, snapping will not occur against objects with more than the indicated number of edges
+
+
+ Snap maximum
+
+
+ true
+
+
+ maxSnap
+
+
+ Mod/Draft
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Maximum number of edges to be considered for snapping
+
+
+ Maximum number of edges
+
+
+
+ -
+
+
+ 999
+
+
+ 24
+
+
+ maxSnapEdges
+
+
+ Mod/Draft
+
+
+
+
+
-
-
@@ -514,6 +602,19 @@
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
-
@@ -640,6 +741,19 @@
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
-
@@ -680,6 +794,19 @@ Values with differences below this value will be treated as same.
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
-
@@ -1014,12 +1141,12 @@ such as "Arial:Bold"
setEnabled(bool)
- 85
- 320
+ 103
+ 373
- 308
- 321
+ 347
+ 374
@@ -1030,12 +1157,76 @@ such as "Arial:Bold"
setEnabled(bool)
- 61
- 321
+ 79
+ 373
- 506
- 324
+ 571
+ 374
+
+
+
+
+ gui::prefcheckbox_4
+ clicked(bool)
+ gui::prefspinbox_6
+ setEnabled(bool)
+
+
+ 49
+ 275
+
+
+ 550
+ 277
+
+
+
+
+ gui::prefcheckbox_4
+ clicked(bool)
+ label_23
+ setEnabled(bool)
+
+
+ 44
+ 275
+
+
+ 405
+ 283
+
+
+
+
+ gui::prefcheckbox_2
+ clicked(bool)
+ label_15
+ setEnabled(bool)
+
+
+ 58
+ 365
+
+
+ 163
+ 369
+
+
+
+
+ gui::prefcheckbox_2
+ clicked(bool)
+ label_16
+ setEnabled(bool)
+
+
+ 33
+ 367
+
+
+ 393
+ 368
diff --git a/src/Mod/Draft/WorkingPlane.py b/src/Mod/Draft/WorkingPlane.py
index 327aaef6f..965d34223 100644
--- a/src/Mod/Draft/WorkingPlane.py
+++ b/src/Mod/Draft/WorkingPlane.py
@@ -34,7 +34,6 @@ __url__ = "http://free-cad.sourceforge.net"
This module provides a class called plane to assist in selecting and maintaining a working plane.
'''
-
class plane:
'''A WorkPlane object'''
@@ -44,10 +43,10 @@ class plane:
# self.weak is true if the plane has been defined by self.setup or has been reset
self.weak = True
# u, v axes and position define plane, perpendicular axis is handy, though redundant.
- self.u = None
- self.v = None
- self.axis = None
- self.position = None
+ self.u = Vector(1,0,0)
+ self.v = Vector(0,1,0)
+ self.axis = Vector(0,0,1)
+ self.position = Vector(0,0,0)
# a placeholder for a stored state
self.stored = None
diff --git a/src/Mod/Draft/draftlibs/fcvec.py b/src/Mod/Draft/draftlibs/fcvec.py
index 79182abce..04e7af8a9 100644
--- a/src/Mod/Draft/draftlibs/fcvec.py
+++ b/src/Mod/Draft/draftlibs/fcvec.py
@@ -174,6 +174,7 @@ def rounded(v):
def getPlaneRotation(u,v,w=None):
"returns a rotation matrix defining the (u,v,w) coordinates system"
+ if (not u) or (not v): return None
if not w: w = u.cross(v)
typecheck([(u,Vector), (v,Vector), (w,Vector)], "getPlaneRotation")
m = FreeCAD.Matrix(