yllplay 发表于 2018-8-4 11:12:31

python写的监控mysql主从的app


[*]#!/usr/bin/env python
[*]# -*- coding: utf-8 -*-
[*]#File:repl_wx.py
[*]#creater:wangwei
[*]import MySQLdb
[*]import Queue,os,base64,time,sys,wx,threading
[*]import ConfigParser,logging
[*]from wx.lib.mixins.listctrl import ListCtrlAutoWidthMixin
[*]
[*]
[*]class Repl:
[*]    def __init__(self,user,passwd,host,hostname):
[*]      self.user = user
[*]      self.passwd = passwd
[*]      self.host = host
[*]      self.hostname = hostname
[*]    def Slave(self,user,passwd,host,hostname):
[*]      try:
[*]            conn = MySQLdb.connect(host,user = self.user,passwd = self.passwd,connect_timeout = 2)
[*]            cursor = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
[*]            sql = "SHOW VARIABLES LIKE 'version'"
[*]            cursor.execute(sql)
[*]            alldata = cursor.fetchall()
[*]            version = alldata["Value"].split('.')
[*]            sql = "show slave status"
[*]            cursor.execute(sql)
[*]            alldata = cursor.fetchall()
[*]            IO = alldata["Slave_IO_Running"]
[*]            SQL = alldata["Slave_SQL_Running"]
[*]            if version == "4":
[*]                Errno = alldata["Last_errno"]
[*]                Error = alldata["Last_error"]
[*]            else:
[*]                Errno = alldata["Last_Errno"]
[*]                Error = alldata["Last_Error"]
[*]            cursor.close()
[*]            conn.close()
[*]            return IO,SQL,Errno,Error
[*]      except:
[*]            return 0,0,0,0
[*]
[*]class Check:
[*]    def __init__(self,app,user,passwd,host,hostname):
[*]      self.app=app
[*]      self.user = user
[*]      self.passwd = passwd
[*]      self.host = host
[*]      self.hostname = hostname
[*]      boss = Repl(user,passwd,host,hostname)
[*]      IO,SQL,Errno,Error = boss.Slave(self.user,self.passwd,self.host,self.hostname)
[*]      self.IO = IO
[*]      self.SQL = SQL
[*]      self.Errno = Errno
[*]      self.Error = Error
[*]    def Status(self):
[*]      now = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
[*]      if not self.IO and not self.SQL:
[*]            errlist =
[*]            wx.CallAfter(self.app.ErrorMessage, errlist)
[*]            a = self.hostname +" " + self.host + " Can not Connect mysql DB!"
[*]            logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(levelname)s %(message)s',datefmt='%Y-%m-%d %H:%M:%S',filename='slave.log',filemode='a')
[*]            logging.error(a)
[*]            return 0
[*]      if self.IO == "Yes":
[*]            if self.SQL == "Yes":
[*]                #print now + " " + self.hostname + " OK -slave is running " + self.host
[*]                #errlist =
[*]                #wx.CallAfter(self.app.ErrorMessage, errlist)
[*]                return 0
[*]            else:
[*]                #print now + " " + self.hostname + " Critical -slave SQL Error!"
[*]                errlist =
[*]                wx.CallAfter(self.app.ErrorMessage, errlist)
[*]                a = self.hostname +" " + self.host + " Critical -slave SQL Error!"
[*]                logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(levelname)s %(message)s',datefmt='%Y-%m-%d %H:%M:%S',filename='slave.log',filemode='a')
[*]                logging.error(a)
[*]                return 1
[*]      else:
[*]            if self.SQL == "Yes":
[*]                #print now + " " + self.hostname + " Critical -slave IO Error!"
[*]                errlist =
[*]                wx.CallAfter(self.app.ErrorMessage, errlist)
[*]                a = self.hostname +" " + self.host + " Critical -slave IO Error!"
[*]                logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(levelname)s %(message)s',datefmt='%Y-%m-%d %H:%M:%S',filename='slave.log',filemode='a')
[*]                logging.error(a)
[*]                return 2
[*]            else:
[*]                #print now + " " + self.hostname + " Critical -slave IO and SQL Error!"
[*]                errlist =
[*]                wx.CallAfter(self.app.ErrorMessage, errlist)
[*]                a = self.hostname +" " + self.host + " Critical -slave IO and SQL Error!"
[*]                logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(levelname)s %(message)s',datefmt='%Y-%m-%d %H:%M:%S',filename='slave.log',filemode='a')
[*]                logging.error(a)
[*]                return 3
[*]
[*]class StartScan(threading.Thread):
[*]    def __init__(self,app):
[*]      threading.Thread.__init__(self)
[*]      self.app = app
[*]      self.timeToQuit = threading.Event()
[*]      self.timeToQuit.clear()
[*]    def stop(self):
[*]      self.timeToQuit.set()
[*]    def run(self):
[*]      self.user,self.passwd,self.hostlist,self.a,self.time = self.conf()
[*]      self.times = 1
[*]      while True:
[*]            threads = []
[*]            if self.timeToQuit.isSet():
[*]                break
[*]            for i in range(self.a):
[*]                host = self.hostlist
[*]                hostname = self.hostlist
[*]                boss = Check(self,self.user,self.passwd,host,hostname)
[*]                t = threading.Thread(target=boss.Status,args=())
[*]                threads.append(t)
[*]            #print 'Total %s Threads is working...' %self.a + '\n'
[*]            msg = u"第" + "%s"%(self.times) + u"次扫描....."
[*]            self.app.CurrentScan(msg)
[*]            for i in range(self.a):
[*]                threads.start()
[*]                time.sleep(0.05)
[*]            for i in range(self.a):
[*]                threads.join()
[*]            self.times += 1
[*]            time.sleep(self.time)
[*]    def CurrentScan(self,msg):
[*]      wx.CallAfter(self.app.CurrentScan, msg)
[*]    def conf(self):
[*]      fp = ConfigParser.ConfigParser()
[*]      fp.readfp(open('repl.ini'))
[*]      iplist = fp.get("global", "iplist")
[*]      user = fp.get("global", "user")
[*]      passwd = fp.get("global", "passwd")
[*]      time = fp.getint("global","time")
[*]      user = base64.decodestring(user)
[*]      passwd = base64.decodestring(passwd)
[*]      hostlist = []
[*]      for i in iplist.split(";"):
[*]            hostlist.append(i.split(","))
[*]      a = len(hostlist)
[*]      return user,passwd,hostlist,a,time
[*]    def ErrorMessage(self,errlist):
[*]      wx.CallAfter(self.app.ErrorMessage, errlist)
[*]
[*]class ScanUnit(wx.Panel):
[*]    def __init__(self, parent,id=-1,title='',port='',):
[*]      wx.Panel.__init__(self, parent,id)
[*]      self.parent = parent
[*]      self.id = id
[*]      self.title = title
[*]      self.scaning = wx.StaticText(self,-1,label=u"准备扫描……",style = wx.ALIGN_LEFT|wx.ST_NO_AUTORESIZE)
[*]      self.openBtn=wx.Button(self,-1,u'打开日志')
[*]      self.openBtn.SetForegroundColour('red')
[*]      #self.openBtn.SetBackgroundColour('purple')
[*]      self.startBtn=wx.Button(self,-1,u'扫描')
[*]      self.stopBtn=wx.Button(self,-1,u'停止')
[*]      self.stopBtn.Disable()
[*]      self.list = AutoWidthListCtrl(self)
[*]      self.list.SetTextColour("red")
[*]      self.list.InsertColumn(0, 'IP', width=120)
[*]      self.list.InsertColumn(1, u'区组名称', width=100)
[*]      self.list.InsertColumn(3, u'发生时间',width=140)
[*]      self.list.InsertColumn(4, u'返回信息',width=200)
[*]      self.list.DeleteAllItems()
[*]      self.Bind(wx.EVT_BUTTON,self.OnStart,self.startBtn)
[*]      self.Bind(wx.EVT_BUTTON,self.OnStop,self.stopBtn)
[*]      self.Bind(wx.EVT_BUTTON,self.Open,self.openBtn)
[*]      self._layout()
[*]    def _layout(self):#布局
[*]      action = wx.BoxSizer(wx.HORIZONTAL)
[*]      action.Add(self.scaning,3, wx.ALIGN_CENTER_HORIZONTAL|wx.EXPAND)#对齐没有解决
[*]      action.Add(self.startBtn,1, wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)
[*]      action.Add(self.stopBtn,1, wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)
[*]      action.Add(self.openBtn,1, wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)
[*]      listbox = wx.BoxSizer(wx.HORIZONTAL)
[*]      listbox.Add(self.list, 1, wx.EXPAND)
[*]      self.box = wx.StaticBox(self, self.id, self.title,style = wx.SUNKEN_BORDER)
[*]      self.ScanUnit = wx.StaticBoxSizer(self.box, wx.VERTICAL)
[*]      self.ScanUnit.Add(action, 0, wx.ALL|wx.EXPAND, 2)
[*]      self.ScanUnit.Add(listbox, 5, wx.EXPAND, 2)
[*]      self.SetSizer(self.ScanUnit)
[*]      self.parent.sizer.Add(self,1,wx.EXPAND)
[*]    def OnStart(self,event):
[*]      self.startBtn.Disable()
[*]      self.stopBtn.Enable()
[*]      #self.DeleteItems()
[*]      self.thread=StartScan(self)
[*]      self.thread.setDaemon(True)
[*]      self.thread.start()
[*]      self.scaning.SetLabel(u'正在扫描……')
[*]    def OnStop(self,event):
[*]      self.stopBtn.Disable()
[*]      self.startBtn.Enable()
[*]      self.thread.stop()
[*]      self.scaning.SetLabel(u'停止扫描……')
[*]    def Open(self,event):
[*]      wx.Execute("notepad slave.log")
[*]      #os.system('notepad slave.log')
[*]    def CurrentScan(self,msg): #当前扫描动作
[*]      self.scaning.SetLabel(msg)
[*]    def ErrorMessage(self,errlist):#错误信息
[*]      index = self.list.InsertStringItem(sys.maxint, errlist)
[*]      self.list.SetStringItem(index, 1, errlist)
[*]      self.list.SetStringItem(index, 2, errlist)
[*]      self.list.SetStringItem(index, 3, errlist)
[*]      self.list.RefreshItem(index)
[*]    def DeleteItems(self):
[*]      self.list.DeleteAllItems()
[*]
[*]class AutoWidthListCtrl(wx.ListCtrl, ListCtrlAutoWidthMixin):
[*]    def __init__(self, parent):
[*]      wx.ListCtrl.__init__(self, parent, -1, style=wx.LC_REPORT|wx.LC_HRULES|wx.LC_VRULES)
[*]      ListCtrlAutoWidthMixin.__init__(self)
[*]
[*]class MainPanel(wx.Panel):
[*]    def __init__(self,parent):
[*]      wx.Panel.__init__(self, parent)
[*]      self.sizer = wx.GridSizer(rows=1,cols=1,hgap = 20,vgap = 15)
[*]      self.aaa = ScanUnit(self,-1,u'<Mysql主从>','8001')
[*]      self.SetSizer(self.sizer)
[*]
[*]class CreateMenu():#创建菜单
[*]    def __init__(self,parent):
[*]      self.menuBar = wx.MenuBar()
[*]      self.file = wx.Menu()
[*]      self.close = self.file.Append(-1,u'退出(&X)')
[*]      self.menuBar.Append(self.file,u'文件(&F)')
[*]      self.help = wx.Menu()
[*]      self.about = self.help.Append(-1,u'关于(&A)')
[*]      self.menuBar.Append(self.help,u'帮助(&H)')
[*]      parent.SetMenuBar(self.menuBar)
[*]
[*]class MyFrame(wx.App):
[*]    u'''''Mysql主从监控\nE-mail:wangwei03@gyyx.cn\nQQ:83521260'''
[*]    def OnInit(self):
[*]      self.frame=wx.Frame(parent=None,id=-1,title=u'Mysql主从监控程序',size=(650,450))
[*]      self.frame.SetIcon(wx.Icon('kankan.ico', wx.BITMAP_TYPE_ICO))
[*]      self.panel = MainPanel(self.frame)
[*]      self.frame.Center(direction=wx.BOTH)
[*]      self.menu = CreateMenu(self.frame)
[*]      self.frame.statusBar = self.frame.CreateStatusBar(3)
[*]      #print dir(self.frame.statusBar)
[*]      self.frame.statusBar.SetStatusWidths([-12,-12,-13])
[*]      self.frame.statusBar.SetForegroundColour('purple')
[*]      self.frame.statusBar.SetBackgroundColour('pink')
[*]      self.frame.StatusBar.Font.Bold = True
[*]      #self.frame.StatusBar.Font.Size = 13
[*]      self.frame.StatusBar.SetStatusText(u&quot;好好学习&quot;,0)
[*]      self.frame.StatusBar.SetStatusText(u&quot;天天向上&quot;,1)
[*]      self.timer=wx.PyTimer(self.Notify)
[*]      self.timer.Start(1000)
[*]      self.Notify()
[*]      self.Bind(wx.EVT_MENU,self.OnClose,self.menu.close)
[*]      self.Bind(wx.EVT_MENU,self.OnAbout,self.menu.about)
[*]      self.SetTopWindow(self.frame)
[*]      self.frame.Show()
[*]      return True
[*]    def Notify(self):
[*]      t = time.localtime(time.time())
[*]      st = time.strftime(&quot;%Y-%m-%d %H:%M:%S&quot;,t)
[*]      self.frame.StatusBar.SetStatusText(u&quot;当前系统时间&quot;+st,2)
[*]    def OnClose(self,event):
[*]      self.frame.Destroy()
[*]    def OnAbout(self,event):
[*]      wx.MessageBox(self.__doc__,'Mysql Replication Status',wx.OK)
[*]
[*]if __name__ == &quot;__main__&quot;:
[*]    app=MyFrame(None)
[*]    app.MainLoop()
  

http://blog.51cto.com/wangwei007/data:image/png;base64,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***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***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***lQvuOgZdqmV6qiSP1n674sJd6JfCB/wQ5X8vJ64IN/AWs+M+esBxeptsZljhDFQfB88Va4rpgfha8qrbR06V3w0tqN6vsjUp7ncJWJbFUiM1lIqxEaLoiMBXh37P0SoZWJpVMDOvzuXroZliaJOpZhF0RYfFWJrFcIViQm5dczzfj5u+mnjO5WFialu3FHXVexIU8E/psZ67nm7keSyYXC1tQy3YaQ5PXLYm1EyS1bBOls7VMYi2X0t+2tTJJ0oto5aa5oNiiDA37iHHtYaXFmf36zv3Hz3DlGpM/qvdEYnhjGOgwQnzDCXzwycnI+LTJN0yDN2Lywr/E0z1DRm/E4BkyeoYMKTjz7GM+g8HY0Yx1NJs7mixXmyydTbbOJntnk6O7ydHd5Olt8PQ2+Hob/L0N/t6GwDw0BpMI9Db6exu9vY3e3kZPT6Ozu9nZ2ezobLZCeq+K2ppLz5/LfuQBrdUl9wyRbmaZfaSbZ3u19m61tVtl6VJiV+XGDpnBf+oez8cgjgNg3Cn2fAxYKwFrJT6StRJ4Dvwf0u1gQGvl6GxcvY1vdIgwp8Tiklk9cptXYfOq7D61w49fcDyGT+3wqR2++k9WgIP9aodP7fCqHV44Uu3wqZ1+jTOgcQW1rqDWHdJ6QjpveLDiZfBS7aAvYvAPG/zDBv8gzUHfxGPAx/eBnHzVsN4/3HwYkBUwjm94oCIHgJys7HlndLyhD15X5Fi9d/DDFBNBJdd+uuLDnqG+0pfpJlnxl0+OrviUTdwmi7WbGP9+Z5BnDXDg9bQxb5/R2633dOrc7***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***0rifG4xshpKA9ZZHtXgi1FSS+x8kRnqgVIh2zvyh15sSWBw+RLxB7t/PhJ+KLkwhMDaZet/8SjgJj/4hcSgUAgEIjovG52km52DI3m5L4XHp4x2EZSIN+/6sn9TOJf5omVq070EI/2HHxy5as7Vr5ab2CeWPlqPT7NlR2AHLaNGGz1W8GOgtjcYqXryoPypAkyoufgkyA+Kw+e2Ap2bH0V/3frlcTXIsbAdSEHUi4bWZEX0KwFAoFAIBALIzw8k+BmhslL42a8L1jue+HojNE+mhLWyZWrTvbYR432hq1g9X5W7KGCgyd7WCdXvtYQN33xTkAdE3v6qNGu2L8KbC1OeAnF/lVxs80MysIU71x58ORWsLMgcbb4mJ6Dq7cWU8cQA+mXjXVyZWyei1tIBAKBQCBGjfbRcBR3cz+Nm2dwN/doY24eis5gjtF0FO8EAACw+iN20kPskytfayAmSMqqk72Ohm1gZyE+veKjVWBbccJMqBNkBvvkSvrXAwCQ81d8tAqfbe8nq7cVj2KOhm2rTvbGPZR22dgnV8YeXfhCIhAIBAJBMERxMyTOzX36xLo5MjJrdo6lowRX77aSpIcGTq58rSFx4rgxDdvA6o8H4LDi41VJMxk4uRLsLEy/ADQ0bCOfVbJz5ScKOL7wNXL+io9X7fz4k9WEsld//Ak5meLjVfC5aZeNumCLXEgEAoFAIMbMzrHIyGyCm/tp3Uwebx4evWZ1T9By5XUAAACvN1H/XXVIFZtm8PQq4lGcsrdA/Jgrr4NXy+Cw6sDj5HDK6TOj6VXw1hViDqsOqfBFBasPDNIsKuPQakBOT3luumUbPL2K8hKLWkgEAoFAICas7onh0WvJbh6juNlF6hn2046OXbN7JhI4+DgAALxWnjje7plgHVoNAACPn2Z5Juyc06u2N8VNUP4WSBjDOb0KTkyD6uDjqw9yaB/KmPK3Vh1SpZ2GeJXyt/C2dnL6dMu2pAuJQCAQiO8w0bEM3Az1TLrZ4Z28pbAPrwbbm5PHF28Hqw6rb/WrL27ZltVCIhAIBOKuJuZmo4fGzf0GF1k6QzePjM85fVMIBAKBQCBuESPjcyndPD5zrd/ghnru1Tnh8ebR8TmXfxqBQCAQCMQtYnR8Lif3PefweJ/RQ+qZ3s3OobGc3Pe6GDIEAoFAIBC3FNLNfcluZhg9/QZ3n8HVp3dBN4+ioKCgoKCg3OKkcfMcw+Qh9eyMIDejoKCgoKDcjuTkvuccHoNuhtC5WY/cjIKCgoKCcpuSzs1szMs0ehhGN8Pgdi0rNytOrVlzSkEZAQBI/wzqBPNOjIKCgoKCcgeTk/uea3isH/YFM3r6jZ5x0s0szMsy4Xq+KTcrTq0BAOxsIEc07Iz/fxEzjHfz6HzGRW5GQUFBQblbkpP7nisy1m909xvd0M1jM9fIutkH9XyzdbPi1BqwZs0aUsYNO8HSuzl9kJtRUFBQUO6W4G42JLt5dm7A7GdjPlg6L8bNDTtx/ypOrQE7T50i5Nywc83OnWvAzgb4QANl+jWnFIS6AQCEf8kRxCjCzalvMZVo3/RuJpcUBQUFBQXljifmZoO73xDvZrbFz8J8LMzHxLzu4fEFuDmhMIYKJoTasHPNqQZCyhQr4oOEoUdHG06dUoxS/U2Wy7egTfuma3kUFBQUFJSlSey6YAREX7DZObbFzzb72WY/C/NR3ax3+KjEzY9WcbheoVEbdq45pYgJN4pakgAAIABJREFUl5QzMRBzM/W5xPCi3AwfIidIMyXt4iesLwKBQCAQt4h53DwxOzdoCQxY/AMW/4DZ747ibtY7fN/Gh2pR+sKT8Kvi1Jo1a9asOaWgGhe6OL46xtul48vopXFzgqdTGpoy/29RUFBQUFBuS6CeoZsZRg/JONXNUM9ss98dncjJfQ+KOY3V0tbNeKewhIbqUcWpNWt27kySLT5t2ro5w+PNmbsZtWyjoKCgoNzBQD2TdTPFzdcIN1uDg5bAgHkhboahPd5MnSBujOLUmlidqji1M9YDDC+c40vs0VtSNyMro6CgoKDc8SS4uZ/ezdbggCUwsFA3w8T3007t5vhu0rFO2ZROYngn7TWLaNNO1QuMOoz6aaOgoKCgLIeQbnZGYtceSeFmS2Axbs40GZsx7WnNN+NmFBQUFBSU5ZBY3RxJuC4Y4WaONcixBjjWwKAl4Lllbk4uqtNNSnFzmoPN5CHn9DJGekZBQUFBWVahtGmP9RvdDJMHQnGzLcixBTm2wKA14BmZvGV1MwoKCgoKCsroaJKbST0nuzmI3IyCgoKCgnIbQu0LRnbSZlLdzLUFIRxrwIvcjIKCgoKCcotD62bq+c3XubYQCXIzCgoKCgrKrQ61TZs82MwwUd1sD3HtyM0oKCgoKCi3KVQ3M41upskDIdu0r/PsIRLf6BRyMwoKCgoKyi1NXN1sdDMIPRNuvnad54i52YvcjIKCgoKCcotDutkN62ajm2nysKhu5ttDfFQ3o6D8l8j58+f37du3GyV19u3bd/78eepG6+5ntVztbmrvRKSi5Wp3dz+LutFKWbqt5/qePdSGSMPWc32lLB3tR5Xi5nGyQZuJeWPHm/nUNu2RTN2c/mYS817uI5PrgdDe7RFdSAQFJVVOnT594cKFYDB4AyV1gsHghQsXTp0+DTdaW2fPAFcwNj5+p5drWWdsfHyAK2jr7IEbrZih/Y9vOOulYxtM1xFpWC8d+49vOMUMbfKnNa5uNnlYBISbYZs2QeZ1c5rbJM97w6iEp6eaktT/vHNDQUEZHR3ds2dPOByem5sbR0mdubm5cDi8Z88euNGaO7rGxyeuX78+iZI6169fHx+faO7oghtt89ne9bKxP9iu3emdudzzB9u19bKxzWd7kz+tCW5mJruZ7wiTpHFzgjVT+TKTi2imGpnqiahuRkHJJLt3775x48ad/jq6C3Ljxo3du3fDjdbU3nnjxo077b67IDdu3Ghq74Qb7dlDbRuM1+/0brw7ssF4/dlDbcmfVmqbNsvkYWEeFuZhY9TjzZm5eZROlmlMmaZinreeRiUyCsoisnv37uvXr4+hzJfr168jNy80yW6+07vx7kimbjZ5WJiXRR5vnrx2XeAIQ/iZtWknV8lpJkj+N80TR+lKZNSmjYKSYaCb7/RS3AVBbl5Ekt18x/bfXZUM3cw2ediYlx3nZmdY4AwLnCGBM+Qbm8fNqXxJPppGuqmaplN5N6F5PJNiHQXluxzo5pHbHgBA5tNQJ87kibciy8TNx44dox2ed+I7kgQ3Zxnmlny/fHsn3g+3+kWzDHPzupmNeXDM3vHZmJtDJBn2Bcukbp637XreejpZ/GleFAUFZffu3XNzc8O3PQAAciAhCdPQfjnc/gWem5tbJm6mTaqJb/PiJSTZzUu+X74l3gzfApBAqvEJE2Q4De2L3qJk5GYT7uYBjOJmoTNM4p+vboaZ181pJktlZeqU1GkyMT0KCsoo4ebIbQ8AYN7x5DDtyNuc5eDmhbp2ubl5veHaku+Xb5PeD8ljEkZm+BTq+DTyhix+Beiy3nBtHjdHx9mYdwDzDmDeQbNvIuZmV1joytTNqXyZMM28Nk3v5oTXSngIuRkFhTbQzUO3MQkf8+RHE6a5ncuWJsvKzWmK5gU1et/qJLpZf20J90iCHanjaSdOMwHtUxYxfqmyXj+Pmz3RcVzMmHcQ88bcLHKFRc6wKAM3Z6jJTCZbCjcrTq4GOxsWN4SC8l8wu3fvnp6ett32AADmHQ+HaX+436alpGR6evrOupmq4TQCTngofaP3rU6Cm3+hnlry/fJt0psheUzCyAyfsojxS5VfqKcycLOH1PME2RdM7AqLXWGRKyxypXNzsjVHU7s587o5zZQAtWmjoCwky8HNqbxLujnhKd9BN0O53u1183J2cyoWNM1SJRM3D5q9g2bvoNkX16Ytdg2JXEMi15DYNZT58eZ5nZowffLTU805YZp554aCggID3Wy57SG/BJLHp5omeeB25o7XzZOZuXY5u/k51eSS7xdSkNQxyY+mIvkpCTNf8gXOJM+pJud1M8fsJYlzM0kgMzejoKAsw0A3m29jSOOmejRhGtqf9bdzgWGWj5vT99Ne5m5ewj1C+jV5PO3EaSagfcoixi9VMnQz14ITc7PEPQQRu5GbUVDu4uzevXtqasp02wMAmHc8HCbHJA/czkxNTS0fN9OOTz98R5Lg5p+rJpZ8v3yb9GZIHpMwMsOn0D6LHJM8sIT5uWoivZu90QmO2ccx+7gWH9fio3GzBLkZBeVuDnSz4bYHADDveDhMjkkeuJ1ZPm6evGuPN/9cObHk++XbpDfDvGMyeUryeDhMjkl+aAnzc+X8buaafdwEN09duy51R6TuiMQdQW5GQbmrs3v37snJSd1tDwCAHEhIwjS0bdq3f4EnJyeXj5tp/00eudzc/B+K8SXfL98mvRnmHUM7QSoSnkI7q+QZ3mT+QzGe3s2+6ATP4ieJuVnmiUjdQ5AgcjMKyl0b6GbN7Q30a6qHEqZJnjLVc29pJpeZm2kr5vS57ctL4+al3SlQnwn/fhv/9vg26d2SyZg04xPkvZjlni/zu3lkgmf186x+nsXPt8a7WeaJSD0RqScSHJ9GbkZBuUuze/fuiYkJNcp8mZiYuONuvuuS4Oafycfu9G68O/Iz+di8bubb/Hybn2/1823+SdLNck9ERoDcjIJy92bPnj1utzsSiShRUicSibjd7j179sCN1tzRNT4+cf369TvtvmWd69evj49PNHd0wY22+Wzvz7ih7fLwnd6Zyz3b5eGfcUObz/Ymf1rj3GwN8K0BvtUvsAbi3EyC3IyCcvfm9OnT586d83q9Eyip4/V6z507d/r0abjR2rp6B7iCiYnJGyipMzExOcAVtHXhjilmaJ+9MPDvvNC/y0cR6eCFnr0wUMzQJn9aY24enRTY/AJbQGALCGJ189x1hTcCkXuRm1FQ7u6cPHlyz549u1FSZ8+ePSdPnqRutNbOnuaOrqb2TkQqmju6Wjt7qButsF/zqy96nj3UhkjDr77oKezX0H5USTf7RyaF9oDQhhNzs9I7rPQOK7zDCu9wCLkZBQUFBQXlFifm5tFJkSMosgdE9qDIHqTUzb5hHORmFBQUFBSUWx/SzYHRSbE9QBCcvDYH7n3g4em56yrfMEloArkZBQUFBQXl1ibm5rEpiTMkcQTh38lr16Gbb6j8UZUvqvJFlSncfPTUeQQCgUAgEDdJspuDY1NSZ0jqDEodQakjOEXUzTfUvqjaNwwJp3CzLKhEIBAIBAKxaNK6GWeKrJs1/qjaH1X7oypfNDwxk8rN36Lc+oyPj9/pRbhrgrbV8g/aRygoMOPj42ncLHOFZa6wzBWSuShu1vqjpJ6Rm+9s0HdZ5kHbavkH7SMUFJj0bpa7w3JXSO4Ky6lu1gVGNIGoxh/V+KNDyM13NOi7LPOgbbX8g/YRCgpMGjeHxqYU7iGFe0jhDivc4Tg3Q7SBEeTmO5uxsbE7vQh3TdC2Wv5B+wgFBWZsbCylm8enlJ4hpWdI6QkrPYSbZ+Zu6AOjusAo1PPQJHLznQz6Lss8aFst/6B9hIICk8bN4fEplWeIZJp0syE4qg+O6IMj+uBoZHIWufkOBn2XZR60rZZ/ltc+6tr19HnLnV4IlO9o0rp5Wu2NQDTeyPQcdPP1G8bQqDE0agiOGpCb73TgDkuK5fzTtPekhyG/cCznn87wy6drF0g7Jf6Cu7q+/bZrF9jVtfA1ufVJsa0oW8Fy/mm46F27QJqVWNgaxm1k8h/aPbQ8t9vtDP0+Svk+pbzt0r/lqZuWuvto39dduzKYCwrKrc3o6GgqNw9NTGt8wxrfsNY3rPENx9xsCo+aQqOm0KgxNDq8EDeTH59dXd8mfJjQm35xSe3mDLZorCxI+mKL+8Ki/66KdwzxcpbzTy/XnZnKzbHNEFcnJX1tk9/ptG6mbqS4RxPFkko0y/Y3ze3MvL+f4t+plA2Z7ndm3Meha9fTu3al8DicQ4o9gXYQyu1Mejfr/MMQvZ/iZiw8hoXHTOExU2hseGphdTPlC4/yYbKcfzp9WYaSIiMjI3Sj4ZdR0tdV/IiuXbu6voVfOefjXZ4o7cSvJBrdwEloipfls19TbKu4lU395Uv50ZHCzfhsunaBXbtofs08fd5CvEDCZkprhO9WUuyjb8n3XMp9lKGbM2kqQnUzyjLIyMhIKjdHJmf0/ijJzNwNcO8DD89ev2EOj5nDY9DQ0dRuvn79xszsXAKtuWDtF4aZ2bmZWcPna5/6XJ88HpEpN278NRAM021nw+dr32nFB4gNq/9yLYAj52Zm52ba3sltm5uZNXye+6UuNj2kPXftl7rZOd0XT4G1X+pm51pzY3tqpu0dOJJ4oYSvL+p85lpzQW7bnd9Q6baV/svENUgIXNm2d1JP8dTn+rmZtnfw7dz2Dshtj98XxNbTf7k2t31mdk73xVOxzUI8cflsq2W3jyjovngqafu/0wq3Lfmmpe69Lwx0H4fk9y3lrZu4B3HQDkLcNuBnIZWbhydnjIERQyBqCESNwZE4N2MhXM/IzXd6/4XSuhnftrTWjHkl+asqZl9Iey4AuW1zrbmA7murPRefefvnXxhmZud0Xzy19gsD+XV5xzdU2m1FWYtUS6v/ci0AVJvSbASqvHPbY6pGbr7pfQTfnGuJt1bcViLfYxQ3kxPg70Pi4wC1Pf/3TOrfYd/xHYS4bcDPQho3G/xRYyBqDI4YgyMzsE179voNS3gMYk7r5rnrN6ZnriXQmgvWfm6Ynrk2PWP4bO3az3TXpmeuTeu+WAuIYUTG3LjxV58/QLedDZ+tfaeV/Lf1Hfjdpk2aTKujm36m7e2kibWfrwUAvN1KtyRw/pQ9qP18LbGXlwupt1XcCiYErm9rbvyKt74DctuSNwK+ysSjrblwg8S/z3Pbkl8LPjHxVb57pNtHxOZtzV372efvkG/m2EbTfbF27RfamWvaz9eSm5F4H+Jv79bcd1rx+Rg+o62b0+xftIMQtxH4WUjjZlMwavr/27vP5zbuA+Hj+CeeS+IiuanfPa/kDN/e5S735GyH99w8zzxxpUw5d3EyzzO5SXLJJReXRFFsWYVgk0RVqpqSKJLqbGInWFEJ9iZ2EABJVFKyNH5eLLBYALso1C5FK9+dz3hsGmDZ/WG/+C2A3bnF/rmFvlnJMe1hp3fY6RlyeoYet82RvRNhXvX2S9xm2xcZuvA+K7L3iV7/2eWJ2hyeYccuke24+4PsjA/KhXuVf6DbXWH7IiPji4p9GetoX5aszb37Mj7Y98UHknFYkS0dluXKx7SFdRXX5nCJ5dscWTOR6qyj1bXutlFoLVVkC2O4/AOdLirS0jbHjVLJ8BY3UwLK2/ovfANhzSRu84J/eWBusX9uccCxOOCQHNMecXqHnV7hn4uqzJuxKo8ePZqanlFuc0W2TiedAdi+yIg8DRL2bpF5s0xvhCpnZMhNgsP7uHCGhX1faNcZnq9E522drqv7QekvLJmQKe7EU5s3S7YFbX7sbSSsJem6Lf8gKpYpzJtj1rbivBl40oTHgmKbA8uDjqVBx+KQY2nQsbTyldhml3fU5R1xeUdc3sWgcpsffBUIrsQoy9Zl7LMHgiuBoH1fRsY+W+wNkLqHjx5NTs3IrWf7vozdZeUVZTL3slttMbfUZeyr2JexW3LjiuyM/dbwf1r3ZYQ3mUT5buGLZdm7y4QfF7Tvy9Bll0ffpXy3TvKt1uW6WgnY9mfown++bX9G6EhO3J8s+dt12RUyX4xMr6T/VzLObfszsiuE9RP1RCi0JkNr7y9Wom1UvjtjX0V4Tdr3Zeh0GfutwYpscUvZ9mcojjR7ZHhHxm3MzqciOzQGhH8RHgL2fRk6nU6y+dbHYMZTT3gsKLd5ZWh+SRRq8/2vHo25fGMu36jLO5pmm8VdUnb5Cm1Wa/sptjnZ3cuyxf2OPXGb5Q/lRuoV++Pkc75O11VFtrjzDVZkh44USPbI8RTaHHk6kkKb4zMcV4u/OIrbyLY/Q5eRIazG8t3Rmyb8jDD8pEphiW+z/G3Cz5CiHgIBcUiTZ6yJxG1eDKyMOD0jTs/w/NKwU9Lmcbdv3O0bc/vG3L6l4H2lNt9/8JU/sAztPHz46N7ElNx67vk84Y4qu2zZui/ju/t6/IFlv/WL78q39wtrYNkfkNxSqmy35Is9n2fsvhr+uvgjnvj6SWVdXc3WZZeJqyv8V0jXYXb5VZn9uPy6koo8pxH/r/WL72aXx69JsQ1XU/5znkrK2yjjc+uyP1CuuB2yy/3WL74rtxXCmzIyPoVxG/6eovJs2a0fWf7Stw7WkvBYUGrzUmBl1OkRxbZZkKDNK/cf+PxBaOfhw0fj9yZZz6yrpwPbCBAIjwXFNgdXhOPWoy7PqEts88NH9xZ8Ig9tftLbj/XMuno6sI0AQdI2j7u9IS7vfbHNEwt+kWdZuc0rD7y+ALTz8OHDsfEJ1jPr6unANgIEwmNBqc2e4P17bl+YpM2Ti/6JxeRtXl657/H6oZ2vHj4cHbvHemZdPR3YRoBAeCwotnn5/sSC796Cb2LBN7Hgu//VI93GrTsePHw0vRSYCvOuPKDNT3b7sZ5ZV08HthEgSNxm7/L9yUW/6MHDcJunFn2TggWfV3nebGdhYWFhYWFZ1ZJ43jwZdv+hZN4s8q4otvkrFu2XBw8ePOlf4RuzsK7W/8I2YmERlgcPHiSYN08t+kWRefOMpM0+5WPaAABg1WTb7Fu5P70UmF7yCyRt9gRCaDMAANpQaPODmaWAKNLmWU9w1hOc9QRmPbQZAABNKLbZE5gNi2lzQCi0nzYDAKCB9No85w2KaDMAAFqQbbN/5YEwQ57zBOfENn/18JGDNgMAoLHEbZ71BOa8wXCbHz2a9y07wgL3v6LNAACoTrbNgftfOSQV/upRuM3il+a8QdoMAIAWkrZ5zhsMtVk4n7ZgYjHR+bQBAMCqKZ4XTKzwgj90XjDfyleNI3ONI3MNI3MNw3OTiwHaDACA6mTbPLnobxieE/lWvtJt3LpjIXj/snn8knn8kmm8xDQ+4FiizQAAqE62zf2OpS+NYyXGsRLT2CXT2ELgvm7j1h0Lgftfmsa+NI5dNI5dNI7102YAADQg2+Y+x+IF4+iF7tGL3aMXjaMLgZVIm4UwXzCO9s/RZgAA1Cff5rnF88aRC92jF2LaLIb5QjdtBgBAE4pt7h4R8nyxe9Qd3eZRIdp9tBkAAA0kanP3iDBDDrXZHbgvhvk8bQYAQBtKbT7XPSLmWWzzihhm2gwAgEYStFnMszuwotu4ZYc7sHKha/RC1+j5rtFzXbQZAABNyLa5d27xXJdsmztHzneOnOscOdc52je3mJlNmwEAUJlSm892jYh5dgdWdBs373D7V863jZxvHznXMXKufbhvdjEz+6e0GQAAdSm3eVho87lIm30r51uGzxmGz7UOnTMM984uZr5PmwEAUFmCNot5dgdWdBs37XB7V841DJ1rGjrXPHS2dah3hjYDAKA+pTaf6Ro+2zUsHNl2B1Z0G1/e7vYsn6saOFc7eLZu4GzjYO/0QuYu2gwAgMoStFnMszuwotv40nb30vK5G33n7vSfre4/WzfQO7WQmUWbAQBQmWKbO8U2D7sDK7oNL2x3LyyfK7WfvdZ79lbf2er+3omFzPc+pM0AAKhLts12oc3hPLsDK7oNG7e53cGzF3vOXuk5e6337J2+3nsLme/SZgAAVJa0zWdCbX5+m8sVPHPGevZL29mr9jM3+3rH3bQZAADVKbW5WGhz5/CZrmFXYEW34bltLmfwzCnL2fPWM5d7zlzrtY+5M9+hzQAAqCxBm8U8C23e6poPnDlmLi62nimxFZfZ7WPuzLdpMwAAKkvc5uJIm5/d6poPnCkyF5+ynrloKy6120fdmW/RZgAAVJZem4uPmItPWYvP24qv2O0jLtoMAIDqkra5WHpMu/io2OYe+4gr882f0GYAANSl0OaF+DZvc80Hi4+Zi09biy/Yiq/Y7cO0GQAA9Sm1+XTnUHSbn9/mcgaLT1qKz1qLv7QVl9qZNwMAoAX5Ns/Gt3njNpcrWHzGWnzRVny5p7jcbh/l9WYAANSXoM1inl2BFd2GF7a5FoLFl3qKS+3FFfbim718hgoAAC0otrljSMyzK7Ci2/DSdtficnG5vfi6vfhWb/GdPvs45x4BAEB9idoczrNLuEaky7NcfKevuKqvuKb/dG2/nWtdAACgAaU2nxLa3CG2edMOl3e5+G5/cf1Acf3A6cYB+xTXbwYAQH3J29whtHnzDpdvpbhpsLhp8HTz4OnmQfs0bQYAQH0KbV481TF0KqrNW3a4fCvFrUOnBYYh+8xCZjZtBgBAZUptPt0xLObZ5Rfa7F85ZRg83TYksM8uZmb/jDYDAKCuBG0W8yxpc9uQ4HT7sH12MXM3bQYAQGUpt3nrDpd/5VT7kOB0B20GAEATidss5DnS5pNtg7QZAABNJW3z6Y7hUJud/mWxzafah+yzC7QZAADVpdfmE4YBMc+0GQAALaTTZt/y8dZ+Mc+0GQAALayyzSfbBmkzAABaSK/Nx1r6xDz3zNBmAADUl16bi5p7aTMAAJpKu83i1Jk2AwCghTTaPO8LFjX3inmmzQAAaCG9Nh9tsh9tsgtHtmkzAABaSKfN3uCRxh6hzUXNvbZpN20GAEB16bW5sN4q5pk2AwCghfTaXFBnOdxgE/JsnXbRZgAAVJd2mwvrrYcbbLQZAACNpNFmhzeQf9cs5PlIY491ijYDAKC+9NqcV2vKv2sWps60GQAALaTTZk8gt8YoTp0tk07aDACA6tJrs766W5g6F9RZaDMAAFpIu825NUYhz7QZAAAtpN1mIc/5d83miXnaDACA6tJrc05Vlzh1ps0AAGghzTZXd4l5Nk04aDMAAKp7jDbfo80AAKgvvTYfquoU80ybAQDQwqraXC20eY42AwCgOtoMAMD6knabxTzTZgAAtLCaNgt5NtJmAAA0QJsBAFhfVtnmQ1WdtBkAAC08RpvHaTMAAOqjzQAArC+0GQCA9YU2AwCwvtBmAADWF9oMAMD6QpsBAFhfaDMAAOsLbQYAYH1Jr805VV20GQAATdFmAADWF9oMAMD6knabxTzTZgAAtECbAQBYX1bTZiHPtBkAAC2sss05VV20GQAALdBmAADWF9oMAMD6kl6b9dXdtBkAAE2l3WYxz7QZAAAt0GYAANYX2gwAwPqymjYLaDMAAFpIuc1bdjg8AX1Vt4g2AwCghTTbXNkVUtVtGp/LzKbNAACoLOU2b97hWArob3Xpb3fp73Tp73SZxucys39KmwEAUFeabb7eqb/Zqb/Zqb/VZRqby3yfNgMAoLKU27xph2PRry/r0Fd0CIWmzQAAaCHlNr+83eH2679s019u119t11d0mEbnMnfRZgAAVJZym1/a7nD59Wda9ecN+pI2/dV20/BsZhZtBgBAZam2ecML2x3zPv2xFv3pVv15g/5Sm2loNvO9D2kzAADqSrnNG7c5HD59frO+qEVf3Kq/YDANzma+S5sBAFBZym1+fptjzpeT06gvbNafaNWfM5gGZmgzAACqS7nNz21zzPpy9jfoc5uEqbOpfybzHdoMAIDKUm/zVsesN+ez+pycRv3hZv2pVlPfTObbtBkAAJWl3OZntzpmvDmfNeQcbBIOa5v6ZjLfos0AAKgszTb/uSHnYJO+oFl/otXUO02bAQBQXTrHtMV5c0Gz/kSLqXc6882f0GYAANSV5nvB9jXkHAof07bTZgAA1JfeZ6j0Bxtz8pr0R5r1J1tNvTO0GQAA1aV/7pEjLfrjLfrTBt4LBgCAFlI/Z+c2x7xPX9Sae9KgLzboz7eZ+mf5DBUAAKpLuc0vbXe4/LnFbbnn2nIvtusvtZsGZzn3CAAAqkvnGpEL/tySjtwrHbmlnbllnabhOa51AQCA6lJu86YdjsVAbllnbkVX7rWu3BtdXL8ZAAAtpNzmzTscS4Hcm925N7tzb3Xn3u42jTloMwAAqku5zVt2ODyB3EpjSJXRNO7IzKbNAACoLM02VxtFpnuOzOyf0WYAANSVTpu9gdwak8g04cjcTZsBAFBZym3eusPhDebWmkS0GQAALdBmAADWl3TbbKbNAABoahVtNtNmAAC0s7o2m2kzAAAaoc0AAKwvq26zmTYDAKCF9Nqcd1fa5nnaDACA6mgzAADrS9ptFvNMmwEA0MJq2izkmTYDAKAF2gwAwPpCmwEAWF/Sug5VpM15d2kzAACaUGjzQmybN9BmAADWBG0GAGB9oc0AAKwvSm0+1T5EmwEAeAJk29wzs3CqfUjMc6TN+XUW2gwAgKYSt1lAmwEAWDtKbT7ZNijfZjHPtBkAAC0kaLOY59g2C3mmzQAAaEG2zbZp9wnDgJhn2gwAwNpRavPx1n4hz/Jtzq+z0GYAALSQtM0n2wYlba63im0202YAADQg22brtOtYS5+YZ9oMAMDakW/zlKuouVfMc6jN80Kbw3mmzQAAaEGhzc6jTXblNtdbaTMAABqRbbNl0nmksUecOjv9y7QZAIA1kqDNR5vsQp7DbfZJ2lxvpc0AAGhBts3mifnDDTYxz5E2FzTYIm2edNJmAABUp9TmgjqLkOei5l6nT9JmMc+0GQAALci22TS1OnA6AAAacklEQVThyL9rLqy3Hm6wHW2yx7ZZyDNtBgBAC/JtvufIqzUV1FkK661HGntoMwAAaydBm8Wpc7jN3kibCxpstBkAAC0otHkut8Yo5nneF4ydN9NmAAA0krTNBXWWeW+4zYWNPbQZAABNybbZOD6nr+4W8yxtM/NmAAC0pdTmnKouMc+RNoc+QNVgLWjgvWAAAGgicZuFPDu8Ad2GLdsd3mB+vSW/wZrfYM2vt5gn5zOzf0qbAQBQl1KbD1V25lR1CYV2eAO657dsd3iDuXWm3DpTXr05t85smpjPzP6QNgMAoK4EbRbyHG7z5m0Ob0Bf232otivnbndObbdpwvHD92kzAAAqS9rmnKouhyege27z1jmP/0B124HqtoM1HQdrOowTc6/v+jfaDACAumTb3D02G9vmZzdtmfV4/3y74fPKps8rm/dVtnSNT7+W9WPaDACAuhK3WeDwBHTPvLJpZsnzhxs1f7xR+6dbdX+61dAxNvWD93bTZgAA1JVqm7/98ivTi0u/L7/xUfmtT65V/eF6TdvIvX98ZxdtBgBAXYlfb460+VsvvTS1sPjrK1f/s7Tid2XXP6q43To89g9vv0ebAQBQV6pt/qsXX5xccP/yUsmvLl3+TWnZb69eaxka/d5b79BmAADUlXqbX5hwu39+8fwvL1361aUrv75S1jw0/HdvvkWbAQBQV6pt/m8vvDDhdv2/82f+/cuLvygp+Y/LpU2DQ3/7ozdpMwAA6kq9zRvvuV3/91zxzy+e/0VJya8uX2kaHPrbH/2INgMAoK5023z65xfP//JSya+vlNJmAAC0kHKbXxSPaV/45aVLvykta+aYNgAAGkjrvWCun18494uSL//jSulvr1a08F4wAAA0kPLnm198cXLB/YuSkl9fKf3t1YrfV9wwjIzxGSoAAFSXapu//dLLUwuLvykt+13Z9Y8qbn56vbJtdJxzjwAAoDqlNudUdUW1+TsvvzK9uPRRxc1Pr9/5w42aP92q6xib5JydAACoLtU2P/PK5pkl756btXtv1392p3FfVUvXvWmudQEAgOpSbfOzm7bMeXz7qlr2VxsO1LQfuttpnJjjGpEAAKguQZsFoTY/t3mbwxvIuduVU9edW2/KqzebJuff2PVvtBkAAHWl2ubnt2yf9wULGq0FTbaCRlthU49lyvnD9z+kzQAAqCvVNm/YsmPet3ykufdIS+/h5t4jzb3WaVdm9k9pMwAA6pJts+nenL66W8xzqM1O//LR1v6ikAHrtJs2AwCguvTaXNQ6UGQYOGYYOGYYsE67M3fTZgAAVJZqmzdu3eH0rxwzDIqs0wuZu39GmwEAUFeCNgsU22yboc0AAKiPNgMAsL4otNmRW2OkzQAAPAFJ26yv7qbNAACsHdoMAMD6kmqbI5+hCrPNLPAZKgAAVJegzWKew232LR9t6RNPP8K5RwAA0ELiNgt5Ftq8fd63fLjZLpy282hLn3XanZnN+bQBAFBZqm0WrnWR32gpaLQWNtkON/dYpl0/fP8ntBkAAHWl2ubQNSLruvX1xrwGc36jxTzlfJ1rRAIAoDb5Nk848mpNUW1+dtOWOY/vi2rDgdr2Q3c79XXdpknHa1k/ps0AAKgraZtza4wOb0D3zCubZzzevbfrP6ts+qK69UBte/fE7A/e202bAQBQV6pt/s7Lm6aXPJ9cr/zjzdq9t+s/r2ruGp/+H+++T5sBAFCXbJvNE/N5tSZBqM3ffvnlqcXF35Vf//ja7T/cqP7T7fqOscnvv5NFmwEAUJdSm/PvmsU8O7wB3bdeemlqYeHXV67+ruz6R9du/+FmTfvYxD+8/R5tBgBAXam3+cXJBfcvL136TWnZf5Xf+OR6Zdvovb9/613aDACAuhK0WcyzwxvQ/dWLL0643f/+5cVfXb7y26sVH1XcNoyMf++td2gzAADqSr3NL0y43T//8sKvLl/+z6sVv6+4ZRgZo80AAKguvTYL8+b/vFrxUcUtw8j439NmAADUptTmgjqLkOf8u+bQMW3h9eZfl5b9rvzGx9futI2O83ozAACqS9BmMc/z3qDuWy+9NLmw8JvSMuF92p/eqG4b5X3aAACoT7bNlklnbJu//fLLU4tL/1Vx8+Prdz69UbPnVl372OT339lFmwEAUFfiNgvmvUHdd17ZNLPk+fRmzR9v3d17p+GzyqZOzgsGAIAGlNpcWG+NavMzr2ye9Xj/XNn4eVXTvuqWL2oMXfc4nzYAAOpL0GYxz/PeoO65TVvnvP79tW0HatsP3u04VNdpnJjjOlQAAKgucZuFPM97g6HrN+vru/X1xtx6U269yTQ5//quf6XNAACoK2mbC+ut896g7vnN2xzeQF69Oa/enN9gyW+wmiedb+z6N9oMAIC6ZNtsnXIebrAdbrBJ27zd4Q3m11sKGqwFDdaCBpt5yvnGrp/QZgAA1JV6m7c5vMG8enN+vSW/3lJQz7wZAABNpNzmTdscnkBOdbe+xphba8q7azJNOF7P4vVmAABUptTmI409Qp4PN9jmvUHdc69snVvyH7jVfuB2+6HKjpzKDuP47GvvfkCbAQBQV4I2i3me9wV1z768ZXbR91l50+cVTfuuN39xo7lrZPoHb3HuEQAAVKbQZldsm595afPMgnfP5do9l2v/dKV2b2ldx9DE9/8P59MGAEBlidss5HneF9Q98+KmGbfnkwt3Pr1w59OLd/7wZWVb/9jf/6+3aTMAAOpSavPRJntUm7/z4isz7qWPz978+OyNj8/e+Pjs9dbeke/9y49oMwAA6pJv87TraJNdzHOozdPupY/P3PjozPWPiq/9vriixT70d/9MmwEAUFniNgt5Ftq8SZw3C3lusQ//3f+kzQAAqEypzUXNvVFtfualTTNuz6cX7nxy/vYn5299cu6moXfke//yJm0GAEBdqbb52dD7tGv+eKnmjyXVfyypausf+4f//Q5tBgBAXUnbfLTJ7vQti59vbvysrOHPZQ1/vlrfMTTxjz/Kos0AAKhLts22aXdRc6+YZ6dvOXResP03DSE3WrtGp3/wVjZtBgBAXUptPtbSJ+bZ6VsOn0+7qjusyzg+99q7P6bNAACoK+U2b97u8Abzas0hdy2mifk3srgOFQAAKkva5qLmXqdvWbdh8/Z5bzD/rrWgzlpQZyuot5knnT/c9SFtBgBAXQnaLIhqc8Fda0GdrbC+p7ChxzLpynyfNgMAoLL02pxfYymotRXW9RTW22kzAABaUGrz8dZ+Mc9O37Juw6btDk8wr8qcXx3KM20GAEALCdosCLX5+U3bHEuB3FvGvDum/GpLQa3VPMHrzQAAqC/lNr+yzbEU0F/vyr3VnXvHlFdlNk84f5j1E9oMAIC6ZNvcM7NwwjAQ32Z/TkVHzvVO/a3u3DtG0/j8G+/xGSoAAFSWtM3HW/udfqHNi/5DZe2HhDzf7DKNzb3+7r/SZgAA1JVemw9eNRwqbztU0X7oeodxdO61dzgvGAAAKkvQZjHPkjaXGg6WGQ6WGw5WtHWPzLz29m7aDACAuhK3Wchz1Lz54FXDgTLDgbLW7uHpf3qLNgMAoDKlNp9sG5Rp86GyNmHefKC8tYs2AwCggaRtPmEYcPrDn2/OudZx6Fr7oWvtB6+1dY/M0GYAAFSXaps3bNru8ARyb3Xrb3bl3OzMudlhHJ197e0PaDMAAOpK0GYxz06/cD5tTzCv0pRXacy9Y9Tf6TaNzb3O9ZsBAFBbOm32BvOrLfnV5rxqc161yXTP8fp7fL4ZAACVJW6zkOdImwtqrPk1lvwaS36txTwx/wbn7AQAQG2ybbbPRtp8sm0wckw7v9qSX2PJr7Hmh651QZsBAFBZym0WrhF5x5RXac6vsuTXWGgzAABaUGrzqfYhsc0u/0r4GpE3u3NvG/OE61Dd4zpUAACoL0GbxTy7/Cuha0TmVHTor3fpb3bn3hauQ0WbAQBQWTptXvQfutp2qLw951qn/kaXaczBNSIBAFBd4jYLeXb5V3TPv7x1bsF/4HLrwVKDcKVI4+jc6+/wGSoAAFSWtM2n2ofENvv2lzQLeT5Y1mYcmX39bc49AgCAytJs88Wm/ZeaD1xpOXC1tXt4hnN2AgCgulTb/JzY5pLm/Zeb95e2dA1xHSoAANSX5rz5y6b9lyRtfjObNgMAoK402uxY9B+83HLgSsuB0pb9V2kzAACaSLnNr2xzLPpzytsOCioMXL8ZAAAtpNxm4bxgNzr1NztzbnQc4vrNAABoI9U2b9i0fd4TzL9jyqs05lV2c/1mAAA0onSNyLg2b94+7w0WVlsKaiz5Nea8ajPXbwYAQAtptrnGWlBrLai1FHD9ZgAAtKHU5pNtgzJtPlxjEfNsmeA6VAAAqC9Bm8U8R15vLqw0FVSaC6otBTVWM20GAEADqbb5+U3b5j2B/FvdBbeN+XdMBZVm87152gwAgOpk22ybdp8wDIh5Dn2+eX4pkHetM+96Z96Nrryb3VwjEgAALSRos5DnqPOC5V5tyy1vz63o0F/vNHGNSAAANCDbZuu063hrv0yb9aUGfalBX9amL28zcY1IAAA0oNTmYy19Yp4lbb7cqi815JS2Hio1GIdnXnuL84IBAKAy+TZPuYqae4+19EW1eX7Rn3u5VX+lVX+l5VBpi3Fo5p/e5HzaAACoTKHNzqNNdnHqLGlzaWvuldac0tZDV1qMQ9M/+BHXoQIAQGWybbZMOo809ghT5+Ot/ZE255e15ZYZ9Fdbc0qFNr9PmwEAUJdSmw832I422YU8O/3Loc9QFVzrzLvWnlfRpq8wGIeZNwMAoD7ZNpsn5gvrrUcae4Q8O/3LoXOPHL5tLLzVlX+zM+9Gh4nrNwMAoAGlNhfUWQ432IQj207fsm7Dpu1Ob/BojflItelwpbGwsts8Nsf1mwEAUJ1sm00Tjvy75sJ6q5Bnp29Zt2Hzdqdv+Xh9T1Gdreiu9UitxTIxz/WbAQBQnXyb7zny75oL6ixCnp2+Zd2GLTtcvuUTzX3Hm3qPN9qLGnqsk843sjhnJwAAKlNo81xerUnI8+EG27wvqNuwZYfLv3zKMHCypf9ES/+Jlj7btPuHu7jWBQAAKlNqc26NUchzYb1VbPPK6bbBU4bBU4aBk4aBnpmFzPc/pM0AAKhLts3G8Tl9dbeQ54I6y7w3qNu4ZYfLv1LcPlTcPiRcObJnZiEz+6e0GQAAdSVtc/5d87w3qNu4dYfLv1LcMSw43TFkn6XNAACoT6nNOVVdYp5l2zxsn13M3P0z2gwAgLoStFnMs8MbiG1zMW0GAEAbSm0+VNl5qLJTyDNtBgBg7SRtc05Vl8NDmwEAWCuybe4em6XNAAA8GUptPninQ8wzbQYAYO0kaLOYZ9oMAMDaoc0AAKwvidss5Jk2AwCwdpTepy22+eCdjvTaDAAAHpOabWZhYWFhYWFRcYn5fLPY5jmPnzazsLCwsLA8gSX+3CPJ2/zw4UP72PST/s1ZWFhYWFiezsU+Nv3w4cP02ry0tCTkGQAAqO7hw4dLS0vSNgt5TtLmpaWlr1lYWFhYWFg0WITOptdmPQsLCwsLC4vGS3ptftLPJ1hYWFhYWJ7+JabNSc498vXXX3vcbkBTfX19T/x3wF8CRhrWJ9qM9Yg9JtYGIw3rU5I2n6bNeBLYY2JtMNKwPoltzqnqos1YL9hjYm0w0rA+PUabS7Je3dPpcbs97pJduthlV0kat9FllXjcbk/nnld37jGGfrPOvTvDN5C7b2QR7ounS9weM+EY0O3c25nibSTEgZdIyS5d1uUnvTagnfg2G/fsDO95pHuw+AHTuXendFDF/Keiy1k6XWRHFz3AOve8muoOLerHGffsFH5P456d8UM/8ufgmyN5mwXxbY4awRLGPTvFkZfKbTzu+DynOspT273imyfxbEbcEz3ObZQGZzTa/JSTHWmXs+JmFyVZUbsstzvmi5ezdNHjrXOvTCVjSxk3Sjv37oz+PiVZCvOQ2J2k0oCP/C1KOve8KvO7ic90o3fFJVkysZf9Yvy6irmN/M9N4Y6R3035sbm6H9e551WdZP0nvcuq10YKpG0WpNRm6QRFOiAk46MkhdtEj7yE4/hyltwKos1PKc3anHhuHf9Qp81POYWR1rl3Z9Zld7jN0dPZy0l2WrqYikdPlKXCo0thN/jqns6oJwdZWTKjd+ceY/jXi5k0C3dM1uaSXeLv1rnn1dBolzxFKMnSSb6o25m1a6f0G8p+MX5lxt9G9uemcsfwphFWrMz+X+HHifno3PNq/FG00B13vhp5bpT4LqteG6mKb3NOVVcq8+bosSuu4qghmMJtpP8rTvzMRnhUKB9lwlMicZvj5iip3yZBa2X/F21+yqX56kmagyFuCmXcs1P8JqH9m1gm2URFtVlh3ixpc/zR+OTz5vjvGfWbSF9ejP/PBF9M/TaJD5Qq31H2YIb8vUp2ReIq/feoTfPqnk7JfiP5XR5jbSSXaptPx7Y59KwnajTEtjmV27g9j/MaCW1+SsXsMZPPVLJKUrmN2Fq5GYZSm6MXxX0BvpHSeS+YOGOLGRU793aKLYxMB2V3a5L9VeSbhAotnUeK/x5zTDsymdGizZJ5fPRxAsnTXC3anPgZsOIdEz5Hj71X+IVUySEB6Ww4vM6l3zPJXR5rbSQntNl0L902Rzb8zl1ZckNw5x5jKreJ/52EQ/zJihtaawmn3fjmSrjHjHtNLo3bRNosfQQmbDPz5qfZatscGRWXs+TbLBU++tppjJ57ScaeQsXj5s2hH6fQ5rhnnGm0WcyScc/OtWxzssNgcXcMvwyc8CfG/zjxHQDhbRcJbeTG8X+swl0ec20kJ7ZZX92dRpvld2fRc+JUbhMr0TEKQWgQi+OVNj+VEu0xO/e8mlVyOSthMhVvQ5sRRfZ92jITCZ10H53SvNkjuWXU+2akc2LpJCT0n9FDNP6YdqjEKs+bo167fdx5s+z7yOSLFf2acRp3jF2ZsZSPace9eCx9LiJ/TDvRS9Qqt/nrr782mUyeVbdZHMFRaYzrbtLbpHYc0i3z/CX8/WnzU0m5zZKXxBQPriS4zSqOadPmp5l28+aEO7edezslNxDuIn4H6ZBbk9ebY99UFTVH0vD1ZoU3c6X+zZVeBo67V/SsT2FyHN2dRHd5/LWhaHZ2tqyszBPdZjHPKbU5/Bwn8Zw4ldtIyL5+3LnnVYXDF7T5aaX87tmodwIqPVqUbyMzb475Xyl8EU8P7V5vjhL3PtnIwe3wG6/CEQ0POaG4qXyG6rGOacu++iOpS+yxTLXanMorU3J3lDzhjv0sbuJ7Rb2xK/waf1zaIw1O6S5rdExbzHNq7wUTflfplot/L1jy20RL771d6qwCrEMye0y5Tw1K3/Wa2m14nzaixI60JJ/qVJ43h/5T2mbhEzV7jG5xv1eyS6eL2hmG/1NyWDX6DVmrnjfL/3pxYv9e6VFc6Z/sjp9f7ipR+mIMudso/dykd4x6CqL8yatE90r0YarY94Ip3mXVa0Oe9FB2/DHtNNoc+5b38IqOPlCQ9DYR4lpI/kxK8Ykknh4y79NWfEpXsksXfp92stvIt1bcDYXfqJlkYdQ9RR7rmHZoXxQ9mY5MYUPz6dhhEzrBxZ7wUIydQYojUPHETZLhGvqG8WMysp/kyeU3gHgoO+6YtkNss766O8Vj2oBWOMsx1gYjDeuT2ObcGiNtxnrBHhNrg5GGJ0j2UHb0MW1Hbo1RQJvx5LHHxNpgpOEJEo9gT0xMXLp0ySN3TJs2Yx1hj4m1wUjD+pSkzac6huLbzMLCwsLCwqLpkrn7Z6aJSJtza4wOr1ybjVPufcfOZu7+GQAA0NSfCk8YRmbyak2xbXb6l6VtvtM/bZxy22cX1bMg6Jld6JlZ6JlZsIVZZxas02toJsKWjPL3cVun3ZYpl2XKZZlyWqac5kllE/MiU0ocMu5JzSVgHE/fvTnjuHB3h2nCIfyqlkmndcppnXJZp122abdt2i1suJ6ZhfDWVHF4PNagehziHyX8jdZpl3XaZZ1yWaecFsm2k2yCRCs/ejNJyG5TGSmOEHnmBBKMTw2EHxrfAI/3Z4Ye+8K/CN8wNISm3dZpt01qZsE2Exlv8mbToMr4j/PEH9RPcE8Su1dR2ky2mC0bJtl7iJzCniRG/CO0bWS2zDgkbbPTv6zb9t+3FZ44Vd5z71THkLTQSorTJNzrVMfQqfahU+1DJ9uHTrQNnWgbPN42eMwweMwwWGQYKGodKGodOKqBohiGKMIvkFjsd2gdKGodONLcd7ipV1DY2FPY2FPQYIuRX28NqbOI8u6a4+XWSplk6WuMIZLPwMmSXswkdKXuqs4Ecqq7cqq6hPvm1hjzak35d82F9dbDDbajTfajTfZjLX3HW/tPGAZOtg2ebBsUtmPScaI1YbiuUnuE8EedMAwcb+0/1tJ3rKWvqLn3aJP9cIOtsN5aUGfJv2sWHzNJVr64jaIpbVM5ZlmywyaedKTFEkejRPygTU1PYoWN9m8Q5T8kyXqQPvCFfz/cZD/S3Hu0pe9oc29RS19RS9+x1n7RccPAccPAibbBOEOik+3pObUKyR4dq3s8ptuFdeV0+9Dp8D4tfucg7iJEx1v7pcT9hkjYcx5p7BEcbrAJ+xNRQZ1F2LeI8mpNgtwa44W2vsITp3SZb/3zph1/0zu3qGmbxTzHt1nM89q3OZU8K7VZzLPwsIwv9DelzaE8V0fluaDOIua5qLl3feZZrUKLDzzxkVbU3Cs8oqR5Tl5ohTank+fHanOiPNNmDfIsVFlss5jnI012Ic/ptjndPK+fNn+jC63U5hTzLLRZmmehzWKehTZLCy20WVposc15tSbLxPymHX+je+fDdzdu/evDJ043jzpS3DCry/N6mTq3qtDmoy39snmWb3MKeU6l0FG7+3TynLTN0tmzOHUW8nyksSc+z09fm8Wp8/HWfvHRdaSxR2zzGs6e167Nj5Hnp63QauX5cJM9NHte7dQ5rULTZjXz/NhtFvMc02ZpnmOmztLZsxDm2t57h0+c3rj1r/8/rwZKSNRmiK4AAAAASUVORK5CYII=
  配置文件的名字为:repl.ini
  格式为:
  
  
user = cmVwbsdfsdfA==
  
passwd = SGMxNzVBcEdEZ0ZRTGsfdfV6aA==
  
time = 10
  
iplist = 192.168.8.11,烟雨江南;192.168.8.12,开天辟地;
  
#说明:用户名和密码#base64.encodestring(),base64.decodestring()加密和解密,time为设置的超时时间(单位为秒),iplist为IP和名字列表
  主要用于批量的mysql丛库服务器状态监控
页: [1]
查看完整版本: python写的监控mysql主从的app