From 4748657016c76765fc99c20db2606475e0ebebdc Mon Sep 17 00:00:00 2001 From: yorikvanhavre Date: Thu, 15 Dec 2011 17:20:23 +0000 Subject: [PATCH] + started implementing the new Draft snap git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5309 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d --- src/Mod/Draft/Draft.py | 4 +- src/Mod/Draft/DraftGui.py | 16 +- src/Mod/Draft/DraftSnap.py | 491 +++++++++++++- src/Mod/Draft/Draft_rc.py | 668 ++++++++++++------- src/Mod/Draft/Resources/Draft.qrc | 1 + src/Mod/Draft/Resources/ui/userprefs-base.ui | 207 +++++- src/Mod/Draft/WorkingPlane.py | 9 +- src/Mod/Draft/draftlibs/fcvec.py | 1 + 8 files changed, 1119 insertions(+), 278 deletions(-) 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(