tiding up the repos

This commit is contained in:
easyw
2020-02-23 15:29:08 +01:00
parent 9ca2bea0b4
commit 4720c89b41
26 changed files with 1327 additions and 143 deletions

51
FabricationPositions/.gitignore vendored Normal file
View File

@ -0,0 +1,51 @@
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files, back
*.cab
*.msi
*.msm
*.msp
*.bak
# Windows shortcuts
*.lnk
# Python executable
*.pyc
# =========================
# Operating System Files
# =========================
# OSX
# =========================
.DS_Store
.AppleDouble
.LSOverride
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

View File

@ -119,6 +119,64 @@
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticBitmap" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="bitmap"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_bitmapFab</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND | wxALL</property>

View File

@ -28,6 +28,9 @@ class PositionsDlg ( wx.Dialog ):
bSizer3.Add( self.m_comment, 0, wx.ALL|wx.EXPAND, 5 )
self.m_bitmapFab = wx.StaticBitmap( self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer3.Add( self.m_bitmapFab, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5 )
self.m_staticline2 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
bSizer3.Add( self.m_staticline2, 0, wx.EXPAND |wx.ALL, 5 )

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="26"
width="26"
version="1.1"
id="svg2"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="fabrication.svg"
inkscape:export-filename="/home/mau/.kicad_plugins/kicad-action-tools/FabricationPositions/fabrication.png"
inkscape:export-xdpi="118.154"
inkscape:export-ydpi="118.154">
<metadata
id="metadata40">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1009"
id="namedview38"
showgrid="true"
inkscape:snap-to-guides="false"
inkscape:snap-grids="true"
inkscape:zoom="21.730769"
inkscape:cx="14.769514"
inkscape:cy="10.856171"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-nodes="true">
<inkscape:grid
type="xygrid"
id="grid3017"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="0.5"
spacingy="0.5"
originx="0"
originy="0" />
</sodipodi:namedview>
<defs
id="defs4" />
<g
id="g4259">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="rect3922"
d="M 0.999996,13 H 25 l 4e-6,12.000008 H 1 Z"
style="fill:#4d4d4d;fill-opacity:1;stroke:none" />
<path
d="m 19,20 h 3 v 3 h -3 z m 0,-5 h 3 v 3 h -3 z m -5,5 h 3 v 3 h -3 z m 0,-5 h 3 v 3 h -3 z m -5,5 h 3 v 3 H 9 Z m 0,-5 h 3 v 3 H 9 Z m -5,5 h 3 v 3 H 4 Z m 0,-5 h 3 v 3 H 4 Z"
style="fill:#5599ff;fill-opacity:1;stroke:none"
id="path3945"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3951"
d="M 3,13 4,2 h 2 l 1,11 z"
style="fill:#666666;fill-opacity:1;stroke:none" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3955"
d="m 11,13 1,-8 h 2 l 1,8 z"
style="fill:#666666;fill-opacity:1;stroke:none" />
<path
sodipodi:nodetypes="ssssssssss"
inkscape:connector-curvature="0"
id="path3957"
d="m 13.150812,3.315136 c -0.749775,-0.2887168 -1.383144,-0.8843809 -1.07618,-1.6349551 0.434113,-1.06147224 1.556056,-1.08997006 2.69045,-1.08997006 1.134394,0 3.170326,0.54498506 4.30472,0.54498506 1.134394,0 2.662583,-0.80895492 3.76663,-0.54498506 0.98749,0.23610179 2.276331,1.16000596 2.15236,2.17994006 -0.127786,1.0513241 -1.176864,1.7979743 -2.15236,2.1799401 -0.853046,0.3340194 -2.877979,0.7639736 -3.76663,0.544985 -1.115928,-0.2749962 -2.092461,-2.0094295 -3.22854,-2.17994 -0.955466,-0.143403 -1.787602,0.3476609 -2.69045,0 z"
style="fill:#999999;fill-opacity:1;stroke:none" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -62,21 +62,6 @@ def generate_POS(dir):
out_filename_top_VIRTUAL=path+os.sep+dir+name+"_POS_top_Virtual.txt"
out_filename_bot_VIRTUAL=path+os.sep+dir+name+"_POS_bot_Virtual.txt"
out_filename_ALL=path+os.sep+dir+name+"_POS_All.txt"
#out_filename=path+os.sep+name+"_POS.txt"
#LogMsg1+="written to:" + lsep + out_filename_top_SMD + lsep
#LogMsg1+="written to:" + lsep + out_filename_bot_SMD + lsep
#LogMsg1+="written to:" + lsep + out_filename_top_THD + lsep
#LogMsg1+="written to:" + lsep + out_filename_bot_THD + lsep
#LogMsg1+="written to:" + lsep + out_filename_top_VIRTUAL + lsep
#LogMsg1+="written to:" + lsep + out_filename_bot_VIRTUAL + lsep
#LogMsg1+="written to:" + lsep + out_filename_ALL + lsep
# print (LogMsg)
#
# print ("### Module positions - created on %s ###" % datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))
# print ("### Printed by get_pos v1")
# print ("## Unit = mm, Angle = deg.")
# print ("## Side : All")
# print ("# Ref Val Package PosX PosY Rot Side Type")
Header_1="### Module positions - created on " + datetime.datetime.now().strftime("%Y-%m-%d %H:%M")+lsep
Header_1+="### Printed by pcb_positions plugin"+lsep
@ -306,6 +291,7 @@ class Positions_Dlg(PositionsDlg.PositionsDlg):
PositionsDlg.PositionsDlg.__init__(self, parent)
#self.GetSizer().Fit(self)
self.SetMinSize(self.GetSize())
self.m_bitmapFab.SetBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./fabrication.png")))
# self.m_buttonDelete.Bind(wx.EVT_BUTTON, self.onDeleteClick)
# self.m_buttonReconnect.Bind(wx.EVT_BUTTON, self.onConnectClick)
# if wx.__version__ < '4.0':
@ -333,7 +319,7 @@ class generatePOS( pcbnew.ActionPlugin ):
self.description should be a comprehensive description
of the plugin
"""
self.name = "Generate Fabrication POS output\nversion "+___version___
self.name = "Fabrication Position output \nversion "+___version___
self.category = "Fabrication Output"
self.description = "Generate POS output for SMD, THD, Virtual\nand Board Statistics"
#self.SetIcon(PyEmbeddedImage(getPos_ico_b64_data).GetIcon())
@ -359,74 +345,6 @@ class generatePOS( pcbnew.ActionPlugin ):
else:
None # Cancel
##
###class displayDialog(wx.Dialog):
### """
### The default frame
### http://stackoverflow.com/questions/3566603/how-do-i-make-wx-textctrl-multi-line-text-update-smoothly
### """
###
### #----------------------------------------------------------------------
### #def __init__(self):
### # """Constructor"""
### # wx.Frame.__init__(self, None, title="Display Frame", style=wx.DEFAULT_FRAME_STYLE, wx.ICON_INFORMATION)
### # panel = wx.Panel(self)
### def __init__(self, parent):
### wx.Dialog.__init__(self, parent, id=-1, title="Generate POS output")#
### #, style=wx.DEFAULT_DIALOG_STYLE, wx.ICON_INFORMATION)
### #, style=wx.DEFAULT_DIALOG_STYLE, wx.ICON_INFORMATION)
### #, pos=DefaultPosition, size=DefaultSize, style = wx.DEFAULT_FRAME_STYLE & (~wx.MAXIMIZE_BOX), name="fname")
### #, wx.ICON_INFORMATION) #, title="Annular Check", style=wx.DEFAULT_FRAME_STYLE, wx.ICON_INFORMATION)
### #
###
### self.SetIcon(PyEmbeddedImage(getPos_ico_b64_data).GetIcon())
### #wx.IconFromBitmap(wx.Bitmap("icon.ico", wx.BITMAP_TYPE_ANY)))
### self.panel = wx.Panel(self)
### self.title = wx.StaticText(self.panel, label="Generate POS debug:")
### #self.result = wx.StaticText(self.panel, label="")
### #self.result.SetForegroundColour('#FF0000')
### self.button = wx.Button(self.panel, label="Close")
### #self.lblname = wx.StaticText(self.panel, label="Your name:")
### #self.editname = wx.TextCtrl(self.panel, size=(140, -1))
### self.editname = wx.TextCtrl(self.panel, size = (600, 500), style = wx.TE_MULTILINE|wx.TE_READONLY)
###
###
### # Set sizer for the frame, so we can change frame size to match widgets
### self.windowSizer = wx.BoxSizer()
### self.windowSizer.Add(self.panel, 1, wx.ALL | wx.EXPAND)
###
### # Set sizer for the panel content
### self.sizer = wx.GridBagSizer(5, 0)
### self.sizer.Add(self.title, (0, 0))
### #self.sizer.Add(self.result, (1, 0))
### #self.sizer.Add(self.lblname, (1, 0))
### self.sizer.Add(self.editname, (1, 0))
### self.sizer.Add(self.button, (2, 0), (1, 2), flag=wx.EXPAND)
###
### # Set simple sizer for a nice border
### self.border = wx.BoxSizer()
### self.border.Add(self.sizer, 1, wx.ALL | wx.EXPAND, 5)
###
### # Use the sizers
### self.panel.SetSizerAndFit(self.border)
### self.SetSizerAndFit(self.windowSizer)
### #self.result.SetLabel(msg)
### # Set event handlers
### #self.Show()
### self.button.Bind(wx.EVT_BUTTON, self.OnClose)
### self.Bind(wx.EVT_CLOSE,self.OnClose)
###
### def OnClose(self,e):
### #wx.LogMessage("c")
### e.Skip()
### #self.Close()
### self.Destroy()
###
### #def OnButton(self, e):
### # self.result.SetLabel(self.editname.GetValue())
### def setMsg(self, t_msg):
### self.editname.SetValue(t_msg)
###
def GenPos(dir):
def f_mm(raw):
@ -465,47 +383,5 @@ def GenPos(dir):
#generatePOS().register()
# "b64_data" is a variable containing your base64 encoded jpeg
getPos_ico_b64_data =\
"""
iVBORw0KGgoAAAANSUhEUgAAAEAAAAA/CAYAAABQHc7KAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAdDwAAHQ8Bjlx1kwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3Nj
YXBlLm9yZ5vuPBoAAAw+SURBVGiB7Zt7cFTVHcc/d+9uSAIhklgIpiQ0tjxSkCKIQ1CpCO3wUKCW0cF0Bqf/VFTG6tROS/8QZuxYwZGHgqD4SjNToFFDjJjGB4LkyUPk
FUhClETShCRssslu9u599I/Nvbm7e/eRENCZ8p3Zufec8zvn/H7f+zu/87h34QZu4Ab+nyGEyYsD7NdZl2sNGZAAzZxpZWQiMAu4FXBce72uC3xAPVAF9JgLrAiwA+lP
PfXU4hUrVky9Dspdc+zdu/fkpk2bCrCw14oAAbBNmjTp5pkzZ97a5epGEPoL9IQQdA25D2k1qMxKVgisFakNHZs2bWLlypWMHj3awhQYNmwYJ0+ebAZsVk3aLGv1QVYU
ZFnu+yl9aQVFUcjLyyM/Px9ZllEUf17Afd9VUVUUVUVVFFRVRQ2TNvKs8vWfXm6SO1Jdzdx77uHMmTP9ciZZTVUjmRiZAPCTLghCwBXg788/zz9eeCHAE0LuBQGhL23c
h0kbeWHyjTLzr0/HxsZG5t17L18cOBBaNwoiEmAoa1xDGw2QsboPJiFc2pQXjQizDIDNZsPtdrNs2TLy8vJCZQdLQCjrFsxaPeUo95ZpU14AOWYiTOXBdXXXX716NX96
9lk0TQvwkkERoFcODnghgW8gJERKR/IGKzJMOgJomn+K375tG7/LzaXX44lifpTFTllZGUePHQtkURDQNA2Px4NXknjzzTdDys3khc0PJxemXjjZhoYGw3Az9u3bx8KF
CyksLIzYfEQCSkpKeOeddyzLuru7EQSBDRs2hFXuesDpdKJaRHpN06iurubJJ59kwYIFYetHJOCOWbPw9PZaPuFdb7yBzWbj4Yceiv40YygfMIF9bX5YVERtbW2IFwiC
QE5ODjt37mTv3r1hm4lIwJIlS5g3b56/QZOiGrB7924cdjvr1q8PKAsxKJZ7q7TJyEjkfNPQQH19PYqimKoJLFy4kPz8fJKSkiKZGJmAkCCoK6pp/WVm5a+WBFNfQZkD
8pBHHnmEHTt2YLfbo64Fou74QmYAQLOYBgdNAhZGRzA4mkFPPPEEL730UkyLIIhGgIXxugcEK3S1JMTsDRZQFMUIyGvWrImpjo7YPcCkpOEBkQwWBPaXfMTxmhNBDcK0
n03lgcUPAHDoy0N8fuSLkH4zR2fwaO4qwD/VfVBaiKwFRvvh9gRUVcVut/P666+Tm5trlFlNjVYYdAwISAfJ6XmHK8v4IvEoTROvGG2m142is7yTpUuWAnDsq2Mc6Kyg
7hethszNl5K4/VAWj+auQhAE6uvrKTtRQfn8OkPGIYnMLrwVURQpKChg0aJFgboPyRCwMp7AGBCJBAToSZFoHe8y5Ee2J8AVk6wg4B4ZKOPw2UOMUIcRIBPn8cs899xz
TJo0KSZjrRDTsVfI+Da7l8Uw6Ffc+ikIxP6EoiE5Ofmq6kf3AAgxMpwHfPbZZ5w9e9You9zaCumhbbZ3tLNlyxYA6urqIDNUxuv1snnzZgBaWlqQZdlSv3fffZf4+Hhy
cnKYNWtWqP5RiI56HhBxmgvKLy8vB2DOnDnMmTOHESNGWDaZmJhITk4OOTk5pKamWsrY7aIhk5WVhc1mrer06dNxOp0cPXo0qimW/UQsDWN82BggCKSnpzN79mwA3vvw
fX5SO5oxnaMM+cTLdoYnDDdkyivL+XFtKjd9OtKQGeYUcTjiDBmXy0V8pYPZX04wZGyyYBBQW1s7KOMhllnAioQoMUDHY7//Ay0tLSHtms/vVj68ktkNs0NkUlJSjPs7
77zTckkr/lIMaGswcWVIY0Dw3JuVlUVWVlbE9tPS0khLS4sok5ycbHjDUGPoZgH8Z3NNTU0kJSWxePHiIYv01xLRCQjakem7QUxpv5hARkYGY8aMoaioCFmWWbZs2VDq
GkXN2A5BgxH9TLDvqndivpo715GamsqMGTM4ffr0gJW5FriqaTDY9TFfgzoQBAFJkqitreXgwYPGOcIPHbEFQQgbBP3Z/nRHRwc+n4+1a9cyefLkodU0Bpif9pBshkwt
+y96MkynaWlpZGdnfy/GB2PINkNWcSBWdq8nNE2zPBeMhoENgQgNW+VVH6nmxNmvQ/LHpY3j1wt+BcCpU6c4fLwcgpRPSUphxfLfAtDW1kZxSTGKpgTIxIlxLH9guZHW
D0bMOl31kVhfS0aDA8H+0o8pvXKISxM6jbyUS8O5rTzLIKCiooLdp9+n9vb+FePI9gR+/tEtBgHnzp2jqORDjt9zsb9xDW7/TwazZvg3QKqqGgQEzFaCQKTXo7EvhPT7
viEQ7rX4qVOnyM/PB6C5uRlnhocLt102ymVRwdPgMWTOnz+Pe6QUcGjyo0YZrUwzZJqampBFNaAdnYCSkhIaGhrIzMzE4/EYBNhsNmw2G6IjLuIb4tgXQmGevjn/wQcf
5MKFC0ZaFMWwdRITE/0K2MOoIEBCQgIADocj3NECmqYxY8YMJk6cSG9vbwgBDg1kNXzMijkG9GluGGCFKVOmMHVq/0clJ8+dspSLj483Vont7e183lQd2q8gcP/99+Pz
+SgrK+PLM+WWbU2bNo2MjAyAAA/QMUzRkP3vDFSCvg+CQU6D1wterxdZlvH5fBaq98u43W4jrSgKPp8PSZKwO+LA5ux5b++ec8Bl/B9KBSC2Y/GArP5pMNKS2F9P4Obm
EUyuGmvkJbckGC3q8qNaEpl+qP9YKL7LDhpIkoTP50OWZWwSTKxMM7XtR3d3Nx0dHciyTG9vLz6fj4SEBNLSxqKiKo89trqg/PDh94BKoJ+pWAiwcv+B4Df3L2dq7ZTA
zHQYO7afkAULFpCZ6Tde0zQjmjvmOAwC0tPTmTf7XuZIXhRZ//RGwX6Hnbi4OGRZZtSoUaSmppCcfBM9PT18d+k75fHVj79TVVX1NvAV0M2ghkCM7m/lDdnZ2WRnZ4ct
B8jMzGTcuHGG8ZIkBfz0YZCamsrSpUsRRRGHw2F4ob4AkmUfvb1eOjs7udh4UXn6j0+/VVVVtR2oATxWxsdGwDWGboDfCNkY8/pPkiR6enpwu93Ex8cbdfSrqqrIsg+P
x4PT6eSbb79R/vqXtTurqqq2Ahew+DjSjAHNAkN1wGG1adE0zfjSLJgISZJCluC6vM/nw+12c+VKB3X1dfL6deu2VlRUvQpcxB/0Iq7bIxKQl5fHli1bjFfPuuKaptHW
1oYgCMycOTOknsPh4OWXXyYnJyfEYDOCjTf/9E/uZFnG6/WGPH1ZlpEkL93dPbS1X+ZszVnpxRc3bDxSdWQb0IJFxB8wAbm5uRw4cCDsVyIAJ06cCMlbv369YXw06O5v
/sZP6fsGUFEUJEnC7XaTkpISMFS83l66uly0Xm7h5Mmvezdv2bru+NHjbwFtgBKtXx2RZwFBYNu2bfT09FBQUBB1FygIAqtWrWLt2rWx9m/ATIB5OHi9XlwuF9nZ2X2k
yLjdHjo7nTT/t5nyyrIru3a+9cyZM2c+AJxEcflgRI0Boijy9ttv09XVRWlpaVgSbDYb8+fPZ/v27TF3HhzJzd6g30uShMvlYvz48fh8Em63hytXOmhsaqSoqLAm/5//
WtPa2lpBmGkuGmKaBRwOB7t372bRokVUVlaGfJQkiiJTpkxhz5494df2MSB4T6+qKh6Ph+TkZETRRleXi/b2Nuov1Klv7Nr10b4Piv4GnAd6GYTxMIBpMDExkX379nHf
ffdx+vRpIzCKosjYsWMpLi4O+yosVpjX8fpY7+rqYsKECTidnbRebuHoseM9217ZuvX48RM7gO+IIdJHQkwEaPinw+TkZIqLi5k7dy4XL15E0zSGDx/O/v37o77ciITA
r1H7SXC73Xg8Hm65ZSyNTRcpeP+D8zu3v/Z8V1dXCQMMduEwYH8dM2YMpaWl3HXXXbS3t1NYWDjo9/Pmud1mswUQoCgKLpeLn06YQH3DBWXjxo3FpSWlm4FjQCdX8dTN
iDoLmE9X9PuMjAw++eQTampquPvuu43ywUAQBASbDVEUsdsdKKqKqCgomkB80k1aw7ffOv/8zNM72tvb/41/WetmiIwHawI0QK2pqWmrqKioj1Q5LS2NysrKq1ZC1TQ0
DXyyik9V8PlkXG43Bz8tbXzt1VcKgI/xr+x8DKHxYL3HGc73/58hAX9wawaq8e/lr3q8h+vIKu+H8q8xBf9mJvLfPm7gBm7gBgaJ/wGnp66JbeWfegAAAABJRU5ErkJg
gg==
"""
# execfile("round_tracks.py")