From 55829e2e10ef75c44e69a96cf962c2e425370d59 Mon Sep 17 00:00:00 2001 From: Exocyst Date: Wed, 29 Jul 2015 12:27:24 -0500 Subject: [PATCH] Updated to 3.2.0 --- BrokenBot.au3 | 238 +- BrokenBot.exe | Bin 1461248 -> 1465856 bytes BrokenBot.org/BrokenBot32.dll | Bin 25220608 -> 25765888 bytes BrokenBot.org/BrokenBotHelper.au3 | 97 + BrokenBot.org/BrokenBotHelper.exe | Bin 0 -> 1015808 bytes BrokenBot.org/License.txt | 35 +- BrokenBot.org/README.md | 56 +- BrokenBot.org/functions/GUI/WindowFixing.au3 | 40 +- .../functions/GUI/frmAttackConfig.au3 | 14 +- BrokenBot.org/functions/GUI/frmBugReport.au3 | 28 +- .../functions/ImageSearch/checkDarkElix.au3 | 86 +- .../functions/ImageSearch/checkTownhall.au3 | 94 +- BrokenBot.org/functions/Other/CallHelper.au3 | 37 + .../functions/Other/GeneralFunctions.au3 | 279 +- BrokenBot.org/functions/Other/HSL.au3 | 152 +- BrokenBot.org/functions/Other/ReadChatLog.au3 | 450 +-- BrokenBot.org/functions/Other/ReadText.au3 | 49 +- BrokenBot.org/functions/Other/RedLineMath.au3 | 352 +- BrokenBot.org/functions/Other/StatusCheck.au3 | 65 +- BrokenBot.org/functions/Other/checkupdate.au3 | 320 +- BrokenBot.org/functions/Other/maths.au3 | 292 +- BrokenBot.org/functions/Other/overlay.au3 | 190 +- .../functions/Other/statsubmission.au3 | 168 +- .../Strategies/Common/SharedFunctions.au3 | 126 + .../functions/Strategies/Dummy/Attack.au3 | 2 +- .../functions/Strategies/Dummy/Config.au3 | 16 +- .../functions/Strategies/Dummy/GUIControl.au3 | 2 +- .../functions/Strategies/Dummy/GUIDesign.au3 | 62 +- .../functions/Strategies/Dummy/Plugin.au3 | 20 +- .../Strategies/Dummy/PrepNextBattle.au3 | 4 +- .../Strategies/Dummy/PrepareAttack.au3 | 2 +- .../functions/Strategies/Dummy/ReadyCheck.au3 | 2 +- .../functions/Strategies/Dummy/Search.au3 | 2 +- .../functions/Strategies/LoadDefaults.au3 | 56 +- .../functions/Strategies/SharedFunction.au3 | 250 +- .../functions/Strategies/Strategies.au3 | 16 +- BrokenBot.org/functions/Village/TroopSize.au3 | 86 +- .../functions/Village/clearField.au3 | 163 +- .../functions/Village/collectResources.au3 | 95 +- BrokenBot.org/functions/functions.au3 | 59 +- BrokenBot.org/languages/Belarusian.ini | 799 +++++ BrokenBot.org/languages/Deutsch.ini | 799 +++++ BrokenBot.org/languages/English.ini | 1574 ++++----- BrokenBot.org/languages/Italiano.ini | 799 +++++ BrokenBot.org/languages/Malay.ini | 799 +++++ BrokenBot.org/languages/Russian.ini | 799 +++++ BrokenBot.org/languages/Spanish.ini | 799 +++++ BrokenBot.org/languages/Turkce.ini | 799 +++++ BrokenBot.org/languages/Ukrainian.ini | 799 +++++ COCBot/Functions.au3 | 180 +- COCBot/GUI Control.au3 | 1576 ++++----- COCBot/GUI Design.au3 | 1046 +++--- COCBot/Global Variables.au3 | 782 ++--- COCBot/functions/Attack/GoldElixirChange.au3 | 116 +- COCBot/functions/Attack/NameOfTroop.au3 | 60 +- COCBot/functions/Attack/ReturnHome.au3 | 162 +- COCBot/functions/Config/ScreenCoordinates.au3 | 339 +- COCBot/functions/Config/applyConfig.au3 | 538 +-- COCBot/functions/Config/readConfig.au3 | 351 +- COCBot/functions/Config/saveConfig.au3 | 720 ++-- COCBot/functions/Image Search/ImageSearch.au3 | 104 +- .../Image Search/checkButtonUpgrade.au3 | 92 +- .../functions/Image Search/checkDarkElix.au3 | 116 +- .../functions/Image Search/checkDeadBase.au3 | 196 +- .../functions/Image Search/checkTownhall.au3 | 74 +- COCBot/functions/Image Search/checkWall.au3 | 130 +- COCBot/functions/Main Screen/ZoomOut.au3 | 42 +- .../functions/Main Screen/checkMainScreen.au3 | 56 +- .../functions/Main Screen/checkObstacles.au3 | 160 +- .../functions/Main Screen/waitMainScreen.au3 | 49 +- COCBot/functions/Notification/PushBullet.au3 | 357 +- COCBot/functions/Other/BlockInputEx.au3 | 884 ++--- COCBot/functions/Other/Click.au3 | 38 +- COCBot/functions/Other/ClickDrag.au3 | 146 +- COCBot/functions/Other/CreateLogFile.au3 | 10 +- COCBot/functions/Other/DisableBS.au3 | 12 +- COCBot/functions/Other/EnableBS.au3 | 12 +- COCBot/functions/Other/Experience.au3 | 354 +- COCBot/functions/Other/FindPos.au3 | 22 +- COCBot/functions/Other/General Functions.au3 | 243 +- COCBot/functions/Other/LootLogCleanup.au3 | 44 +- COCBot/functions/Other/Pause.au3 | 18 +- COCBot/functions/Other/RandomGaussian.au3 | 18 +- COCBot/functions/Other/RedLineDeploy.au3 | 546 ++- COCBot/functions/Other/SetLog.au3 | 46 +- COCBot/functions/Other/Tab.au3 | 14 +- COCBot/functions/Other/Time.au3 | 6 +- COCBot/functions/Other/WriteStats.au3 | 24 +- COCBot/functions/Other/_NumberFormat.au3 | 26 +- COCBot/functions/Other/_Sleep.au3 | 72 +- COCBot/functions/Other/getBSPos.au3 | 20 +- COCBot/functions/Other/stuckHandler.au3 | 84 +- COCBot/functions/Pixels/_CaptureRegion.au3 | 74 +- COCBot/functions/Pixels/_ColorCheck.au3 | 74 +- COCBot/functions/Pixels/_GetPixelColor.au3 | 12 +- COCBot/functions/Pixels/_MultiPixelSearch.au3 | 52 +- COCBot/functions/Pixels/_PixelSearch.au3 | 28 +- COCBot/functions/Pixels/boolPixelSearch.au3 | 20 +- COCBot/functions/Read Text/getChar.au3 | 1742 +++++----- COCBot/functions/Read Text/getDarkElixir.au3 | 42 +- COCBot/functions/Read Text/getDigit.au3 | 790 ++--- COCBot/functions/Read Text/getDigitLarge.au3 | 582 ++-- .../functions/Read Text/getDigitLastRaid.au3 | 272 +- COCBot/functions/Read Text/getDigitSmall.au3 | 600 ++-- COCBot/functions/Read Text/getDigitTH.au3 | 148 +- COCBot/functions/Read Text/getElixir.au3 | 42 +- COCBot/functions/Read Text/getGold.au3 | 42 +- COCBot/functions/Read Text/getNormal.au3 | 44 +- COCBot/functions/Read Text/getOther.au3 | 276 +- COCBot/functions/Read Text/getString.au3 | 42 +- COCBot/functions/Read Text/getTrophy.au3 | 32 +- COCBot/functions/Search/GetResources.au3 | 184 +- COCBot/functions/Search/PrepareSearch.au3 | 35 +- COCBot/functions/Search/checkNextButton.au3 | 22 +- .../Strategies/Standard/AdjustCollPos.au3 | 40 +- .../functions/Strategies/Standard/Attack.au3 | 3095 ++++++++--------- .../functions/Strategies/Standard/Config.au3 | 1051 +++--- .../Strategies/Standard/GUIControl.au3 | 630 ++-- .../Strategies/Standard/GUIDesign.au3 | 670 ++-- .../functions/Strategies/Standard/Plugin.au3 | 36 +- .../Strategies/Standard/PrepNextBattle.au3 | 14 +- .../Strategies/Standard/PrepareAttack.au3 | 306 +- .../Strategies/Standard/ReadyCheck.au3 | 2471 +++++++------ .../functions/Strategies/Standard/Search.au3 | 885 ++--- COCBot/functions/Strategies/Strategies.au3 | 6 +- COCBot/functions/Village/BoostAllBuilding.au3 | 328 +- COCBot/functions/Village/BoostBarracks.au3 | 98 +- COCBot/functions/Village/BotStopped.au3 | 164 +- .../functions/Village/CheckCostPerSearch.au3 | 117 +- .../Village/CheckFullSpellFactory.au3 | 74 +- COCBot/functions/Village/Collect.au3 | 44 +- COCBot/functions/Village/DonateCC.au3 | 642 ++-- .../functions/Village/DonateCheckArmyCamp.au3 | 193 +- COCBot/functions/Village/DonateTrain.au3 | 1350 ++++--- COCBot/functions/Village/DropTrophy.au3 | 258 +- COCBot/functions/Village/LocateBuildings.au3 | 760 ++-- COCBot/functions/Village/MainLoop.au3 | 316 +- COCBot/functions/Village/ReArm.au3 | 110 +- COCBot/functions/Village/RequestCC.au3 | 76 +- COCBot/functions/Village/UpgradeBuilding.au3 | 652 ++-- COCBot/functions/Village/UpgradeHeroes.au3 | 172 + COCBot/functions/Village/UpgradeWall.au3 | 290 +- COCBot/functions/Village/VillageReport.au3 | 214 +- COCBot/functions/Village/isDarkElixirFull.au3 | 14 + COCBot/functions/Village/isElixirFull.au3 | 28 +- COCBot/functions/Village/isGoldFull.au3 | 28 +- COCBot/functions/Village/upTroops.au3 | 209 +- License.txt | 1348 +++---- README.md | 42 +- changelog.md | 270 +- curl/curl license.txt | 20 +- 151 files changed, 25773 insertions(+), 18259 deletions(-) create mode 100755 BrokenBot.org/BrokenBotHelper.au3 create mode 100755 BrokenBot.org/BrokenBotHelper.exe create mode 100755 BrokenBot.org/functions/Other/CallHelper.au3 create mode 100755 BrokenBot.org/functions/Strategies/Common/SharedFunctions.au3 create mode 100755 BrokenBot.org/languages/Belarusian.ini create mode 100755 BrokenBot.org/languages/Deutsch.ini create mode 100755 BrokenBot.org/languages/Italiano.ini create mode 100755 BrokenBot.org/languages/Malay.ini create mode 100755 BrokenBot.org/languages/Russian.ini create mode 100755 BrokenBot.org/languages/Spanish.ini create mode 100755 BrokenBot.org/languages/Turkce.ini create mode 100755 BrokenBot.org/languages/Ukrainian.ini create mode 100755 COCBot/functions/Village/UpgradeHeroes.au3 create mode 100755 COCBot/functions/Village/isDarkElixirFull.au3 diff --git a/BrokenBot.au3 b/BrokenBot.au3 index 151d104..907d6c9 100644 --- a/BrokenBot.au3 +++ b/BrokenBot.au3 @@ -1,119 +1,119 @@ -#RequireAdmin -#AutoIt3Wrapper_UseX64=n -#pragma compile(Icon, "BrokenBot.org\images\icons\brokenbot.ico") -#pragma compile(FileDescription, BrokenBot.org - Clash of Clans Bot) -#pragma compile(ProductName, BrokenBot.org - Clash of Clans Bot) -#pragma compile(ProductVersion, 3.1.0) -#pragma compile(FileVersion, 3.1.0) - -#include - -$sBotVersion = "3.1.0" -$sBotTitle = "BrokenBot.org - Break FREE - v" & $sBotVersion - -If FileExists(@ScriptDir & "\.developer") Then - $sBotTitle = "BrokenBot.org - In Development" -EndIf - -Global $StartupLanguage = IniRead(@ScriptDir & "\config\default.ini", "config", "language", "English") - -If _Singleton($sBotTitle, 1) = 0 Then - MsgBox(0, "", GetLangText("boxAlreadyRunning")) - Exit -EndIf - -If @AutoItX64 = 1 Then - MsgBox(0, "", GetLangText("boxCompile1") & @CRLF & GetLangText("boxCompile2")) - Exit -EndIf - -If Not FileExists(@ScriptDir & "\License.txt") Then - $license = InetGet("http://www.gnu.org/licenses/gpl-3.0.txt", @ScriptDir & "\License.txt") - InetClose($license) -EndIf - -#include "COCBot\Global Variables.au3" -#include "COCBot\GUI Design.au3" -#include "COCBot\Functions.au3" -#include "BrokenBot.org\functions\functions.au3" -#include "COCBot\GUI Control.au3" -#include-once - -; Event registration -GUIRegisterMsg($WM_COMMAND, "GUIControl") -GUIRegisterMsg($WM_SYSCOMMAND, "GUIControl") -GUIRegisterMsg(0x0003, "_WinMoved") - -; Initialize everything -DirCreate($dirLogs) -DirCreate($dirLoots) -DirCreate($dirAllTowns) -DirCreate($dirDebug) -DirCreate($dirAttack) -DirCreate($dirConfigs) -DirCreate($dirStrat) -readConfig() -applyConfig() -checkupdate() -_PluginDefaults() -_btnRefresh() -_GUICtrlListBox_SetCurSel($lstStrategies, 0) -_lstStrategies() - -HotKeySet("^!+p", "_ScreenShot") - -$sTimer = TimerInit() -AdlibRegister("SetTime", 1000) - -Local $StartImmediately = False -If IsArray($CmdLine) Then - If $CmdLine[0] = 1 Then $StartImmediately = True - If $CmdLine[0] = 2 Then - ; Add option to start with specific profile - EndIf -EndIf - -$hHBitmap = _ScreenCapture_Capture("", 0, 0, 860, 720) -$ret = DllCall(@ScriptDir & "\BrokenBot.org\BrokenBot32.dll", "str", "BrokenBotRedLineCheck", "ptr", $hHBitmap, "int", 1, "int", 1, "int", 0, "int", 0, "int", 0) -_WinAPI_DeleteObject($hHBitmap) -If Not IsArray($ret) Then - If MsgBox($MB_ICONWARNING + $MB_OKCANCEL, GetLangText("msgMissing"), GetLangText("msgMissing1") & @CRLF & @CRLF & GetLangText("msgMissing2") & @CRLF & @CRLF & GetLangText("msgMissing3") & " " & GetLangText("msgMissing4") & " " & GetLangText("msgMissing5") & @CRLF & @CRLF & GetLangText("msgMissing6")) = $IDOK Then - ShellExecute("https://www.microsoft.com/en-us/download/details.aspx?id=40784") - DllClose($KernelDLL) - _GDIPlus_Shutdown() - _Crypt_Shutdown() - _GUICtrlRichEdit_Destroy($txtLog) - Exit - EndIf -ElseIf $ret[0] = -2 Then - MsgBox(48, "BrokenBot.org", GetLangText("msgLicense") & @CRLF & @CRLF & "Please visit BrokenBot.org") -EndIf - -If IniRead(@LocalAppDataDir & "\BrokenBot.org.ini", "default", "1", "") = "" Or IniRead(@LocalAppDataDir & "\BrokenBot.org.ini", "default", "2", "") = "" Then - GUICtrlSetImage($btnBBValidate, @ScriptDir & "\images\Resource\bad.bmp") - GUICtrlSetTip($btnBBValidate, GetLangText("tipBBValidBad")) -Else - GUICtrlSetData($inpBBPassword, _Decrypt(IniRead(@LocalAppDataDir & "\BrokenBot.org.ini", "default", "2", ""))) - _btnBBValidate() - GUICtrlSetData($inpBBPassword, "") -EndIf - -;Only enable button start after all Initiation done. -GUICtrlSetData($btnStart, GetLangText("btnStart")) -GUICtrlSetState($btnStart, $GUI_ENABLE) -While 1 - If $StartImmediately Then - $StartImmediately = False - btnStart() - EndIf - Switch TrayGetMsg() - Case $tiAbout - MsgBox(64 + $MB_APPLMODAL + $MB_TOPMOST, $sBotTitle, "Clash of Clans Bot" & @CRLF & @CRLF & _ - "Version: " & $sBotVersion & @CRLF & _ - "Released under the GNU GPLv3 license.", 0, $frmBot) - Case $tiExit - SetLog(GetLangText("msgExit"), $COLOR_ORANGE) - ExitLoop - EndSwitch - Sleep(50) -WEnd +#RequireAdmin +#AutoIt3Wrapper_UseX64=n +#pragma compile(Icon, "BrokenBot.org\images\icons\brokenbot.ico") +#pragma compile(FileDescription, BrokenBot.org - Clash of Clans Bot) +#pragma compile(ProductName, BrokenBot.org - Clash of Clans Bot) +#pragma compile(ProductVersion, 3.2.0) +#pragma compile(FileVersion, 3.2.0) + +#include + +$sBotVersion = "3.2.0" +$sBotTitle = "BrokenBot.org - Break FREE - v" & $sBotVersion + +If FileExists(@ScriptDir & "\.developer") Then + $sBotTitle = "BrokenBot.org - In Development" +EndIf + +Global $StartupLanguage = IniRead(@ScriptDir & "\config\default.ini", "config", "language", "English") + +If _Singleton($sBotTitle, 1) = 0 Then + MsgBox(0, "", GetLangText("boxAlreadyRunning")) + Exit +EndIf + +If @AutoItX64 = 1 Then + MsgBox(0, "", GetLangText("boxCompile1") & @CRLF & GetLangText("boxCompile2")) + Exit +EndIf + +If Not FileExists(@ScriptDir & "\License.txt") Then + $license = InetGet("http://www.gnu.org/licenses/gpl-3.0.txt", @ScriptDir & "\License.txt") + InetClose($license) +EndIf + +#include "COCBot\Global Variables.au3" +#include "COCBot\GUI Design.au3" +#include "COCBot\Functions.au3" +#include "BrokenBot.org\functions\functions.au3" +#include "COCBot\GUI Control.au3" +#include-once + +; Event registration +GUIRegisterMsg($WM_COMMAND, "GUIControl") +GUIRegisterMsg($WM_SYSCOMMAND, "GUIControl") +GUIRegisterMsg(0x0003, "_WinMoved") + +; Initialize everything +DirCreate($dirLogs) +DirCreate($dirLoots) +DirCreate($dirAllTowns) +DirCreate($dirDebug) +DirCreate($dirAttack) +DirCreate($dirConfigs) +DirCreate($dirStrat) +readConfig() +applyConfig() +checkupdate() +_PluginDefaults() +_btnRefresh() +_GUICtrlListBox_SetCurSel($lstStrategies, 0) +_lstStrategies() + +HotKeySet("^!+p", "_ScreenShot") + +$sTimer = TimerInit() +AdlibRegister("SetTime", 1000) + +Local $StartImmediately = False +If IsArray($CmdLine) Then + If $CmdLine[0] = 1 Then $StartImmediately = True + If $CmdLine[0] = 2 Then + ; Add option to start with specific profile + EndIf +EndIf + +$hHBitmap = _ScreenCapture_Capture("", 0, 0, 860, 720) +$ret = DllCall(@ScriptDir & "\BrokenBot.org\BrokenBot32.dll", "str", "BrokenBotRedLineCheck", "ptr", $hHBitmap, "int", 1, "int", 1, "int", 0, "int", 0, "int", 0) +_WinAPI_DeleteObject($hHBitmap) +If Not IsArray($ret) Then + If MsgBox($MB_ICONWARNING + $MB_OKCANCEL, GetLangText("msgMissing"), GetLangText("msgMissing1") & @CRLF & @CRLF & GetLangText("msgMissing2") & @CRLF & @CRLF & GetLangText("msgMissing3") & " " & GetLangText("msgMissing4") & " " & GetLangText("msgMissing5") & @CRLF & @CRLF & GetLangText("msgMissing6")) = $IDOK Then + ShellExecute("https://www.microsoft.com/en-us/download/details.aspx?id=40784") + DllClose($KernelDLL) + _GDIPlus_Shutdown() + _Crypt_Shutdown() + _GUICtrlRichEdit_Destroy($txtLog) + Exit + EndIf +ElseIf $ret[0] = -2 Then + MsgBox(48, "BrokenBot.org", GetLangText("msgLicense") & @CRLF & @CRLF & "Please visit BrokenBot.org") +EndIf + +If IniRead(@LocalAppDataDir & "\BrokenBot.org.ini", "default", "1", "") = "" Or IniRead(@LocalAppDataDir & "\BrokenBot.org.ini", "default", "2", "") = "" Then + GUICtrlSetImage($btnBBValidate, @ScriptDir & "\images\Resource\bad.bmp") + GUICtrlSetTip($btnBBValidate, GetLangText("tipBBValidBad")) +Else + GUICtrlSetData($inpBBPassword, _Decrypt(IniRead(@LocalAppDataDir & "\BrokenBot.org.ini", "default", "2", ""))) + _btnBBValidate() + GUICtrlSetData($inpBBPassword, "") +EndIf + +;Only enable button start after all Initiation done. +GUICtrlSetData($btnStart, GetLangText("btnStart")) +GUICtrlSetState($btnStart, $GUI_ENABLE) +While 1 + If $StartImmediately Then + $StartImmediately = False + btnStart() + EndIf + Switch TrayGetMsg() + Case $tiAbout + MsgBox(64 + $MB_APPLMODAL + $MB_TOPMOST, $sBotTitle, "Clash of Clans Bot" & @CRLF & @CRLF & _ + "Version: " & $sBotVersion & @CRLF & _ + "Released under the GNU GPLv3 license.", 0, $frmBot) + Case $tiExit + SetLog(GetLangText("msgExit"), $COLOR_ORANGE) + ExitLoop + EndSwitch + Sleep(50) +WEnd diff --git a/BrokenBot.exe b/BrokenBot.exe index ef2086d70345525c116b12e1a07143d55191fb39..080561e755cfbad3474057e64d140123ae2b9cd5 100644 GIT binary patch literal 1465856 zcmeFae_T{m{y%;P1{ihpjx`n))>N}aNi8{85L$yWfIrY71pEb98B0^Una-#cD0XLp z>+y>1)~;<iW}7AS!$3^1Own}>)6!aN&+M>8#p%7kEyk4*KI)}nptEG5JlFaz&x+FE>N&nm;{QnLtCP^B0#oNQAt%E+k zvdJ{%<143E-@DK;f58L4T5#vD9e3aPo8LU(cieT4V?p3Ij(dOO$emW~`1J$x?zwU3 z(811F(Lc`Xc(ys=#g7Mm*S>J)$4z)IXuI#@72;X_@x|hK@5c{kRwJ$0GNA{Em1&Aj)Y@xJf*ZMSS9U$Gvw~Q(gbrGp|RIrkE0> z*ROr8WZ>Iz=_=C@(-28|%OXh|hl*%_Wt=400CpmdutYGT5+oo4{|25?%S8gIk6m&x zKD+DAr5(tFw3Kz=pLzZesfLPhTP6RVK?Bi0J#80BQ|?E#T^1?jr`Z33(ytvtHT?7s z?VL+Z{a^mw=)Y%)AK#|EiA2;O>MIe$dH)=eH21~@^X~NDDM{n^ptIEXy?DO;^Mc)I z{f$O4Y5FrLU>$IG7oH7xp7+l!Ni8=nSh(PB#EHJ5&(dD>`Jexl&VA#8d+vV#3H=+9 z7&wq##ItDxf}j4m(X5}|{vY)J2LmOnyOe#W-^_1Bu3$^x8s@R+=|0J4)o<2E%s*5h zg>uRl%9O{viq%Ee3@*NgwbW7wEvKDEcK5uoyg_7ipbG3NAUOiyZN6bL3Q(c#~ z^tbHZVV00g>CPxFWdTbW%QLgn%x!iZQOo;$!&ryv>Eq=eND?dT3%1Ci3yYFa(hSvO z;rkv%tf!9^SeQxm9A!CX)pMNXSX9pmmSa^tT$i-Mqx7v?eCrY4dd0V>j;xkVasJ`T z@gI?j%A52ym1o&x3Y2J`ZZF%%Ujem+TIAqXZ<3@ewZyTu#kp*%*~wwFbD&!r~G)#6t3tm9WtZnvgU_>k2!@ovEWIc7Vz``%tXqF8F6E*Ck-Y+Yr-p}R-mm_8x^*h(;q|W6!Q>k~k z&NS*?t}`8dpMp=6z-}Z+HWH*52^_j~vMtVUrBuq_f8>Q|*vU4N97;zOh_v(mSHSQ6 z&Sdc$F&87o<~Xey%JZ_1`0Bw1YGfoQ)X1S%K^~%GW_#lVHUm@nIn zXLtC`Oj1p(wcH@e(lYj)OZQo`mYU_zqM1n&|MUx!G!x`*1r@UnPTY`1)!Xzui@MZY z3Az`=jOkK_d?|=imsKhFeCCNfpBT>}|diG{_X;_+rR$IQlC)Eo;NZ&h=wy0l`v zts%#@V*K!ioZ)P|UCptx@yTjV^0`Kyqa7P)rwnta(83_I1nCDTpB1Y*Xf|)%;0a%B5E?o%R%Jz&08_@N6gVl!@bbl=#}!>Ck5GnSq|uj@5SnWK*0e%)AB!m>i1`F9l{K2eynfh_WcH7G5$F88FbG7Q)sC zwF9N-i!4+K5+(C=N+j~p6sBlQ0wxvd>G~LMnww83ICE-u*6GIzVQadSlP=6r&+ysUdlmYU$`iiKU~+G}VuZ_xS~gF1Lbh>>FW{ zl&dAJ-im^Nj9jhWWI$f6KF)yVX!SONg3c{KoK|l)UfvZi$#`i#nmn04cZe7>eV*c+ zj^A8$rE@JJn;n;m1P4WecqDjx6J=TH+=>`HTIdmU9>+rzrqz?A+CG6=C4sxR8z}j7 zX93_TO@Q&7al&}cvs@zHt5YwULh<)IjraL!#?zmMc;sDzZ#4xJ7j)L4*s+v6=nMk% z8?g-l>kM!uz)T~-YJlsE*e3vPF~BtdGmHf50CpO&8v&*pv6}#P8?l=KO27bW1ILrn z3=j-Jnr?u50M-~_C%}~e)hC=?0FmV=9-Ap?X~Wb+6*B<#A{K3)0}wHD@vxm0f>*)#>e~d$TU9A2bgPs z)U8cMEri#3Ml4}CUl6{xE zj#R31oDMJ-rX!SNhL8WsiCfvHN2MdBADoC&^_ z%6~E3L@R>>pJ*^eAMtKyQ!)y4JmqcX93^_M+}Kr^B+0>L2o-*{9DH>$0qJsZf&gSW z^eO5>{kiNT`K@#`!p3)legs-#97lC6x{B81>sW!AO*HcW>Vu?RiZsczFxccLTN+HF zcE2-I%g6&)waMEOLoI>ZMPrws!1MUFSpAd3ul4IX)+;do@J4`Ig({1@^>Xkr#D=d$41C8RWX^pNiN zvqWGc-^wqvHH&8# z-PbZ$-exURS~}xfwMiy5-qo_pqnp%WRaxd~fjw-9{90jjg-2J1%&x51-3I+4swYN* zN?}yja!hJsWIc&-C6-bar*zv`@AB46G*L|?sS5Hoq^dk2Rpmjd;$`b3X`okPVWVZE z80|#|AHn(s#soAu`LL;yw4K!VQvUfT=p2bR$$Z`Q5+Xhxh?v705y2)HYhdOgz!fCA z6!2|ti*n}j3h1uY$=6IaB+?yQ5KYTE63ycm6^TUYd^besViEPV7hLKj+pFd4puhAf zSWYpF8Te)5HG>aR%KZN7i;+@lJXxr7bOQ}l!v5z0maRs zWO8uJi-!1=jmF494LHOsO>vh|FQ!v%{H4jF6;leRuTyx*1WA&&Nn+x>gv@fV38518 z_^(i+`Tk3l=nOgdf{2-N1v(kR_dw6EB8z;&c_LYZ39rS4t)J$JRRd(x4-<7lE z;2IQ!7dhA{fE}2$0`NrTU=5(Me70AuP2nW+ATtZ}ph6}3h#WeMuRga{c%0{8EHqDw zSMwbAqPbpQEiXaxV2i&{4;|)%zZuBq8Aki6 zFzYW19tm7rmF=3Z2v{lS5-(e%p#EQ(!L`H(_ z?-yD$^L#OXHM2Kz(ood0mRc5F0u5BpXyPv%1ozG}&r~1*$3p&W1r z5@Dg*Wi563%j%ZeB!3aL?M(=}K9dH_U=(IsXc{fe%vzeU^g4Eo<)txeGRsXik7`vt zQO(n<7WN{OmtTw?>)GtYuq;nbJ%>ef?- zhjbM2sVGWWYL;fQD3p=-Bnj$fWUc65W@(vk20P71Aqn`a9PA&9x;pr4Xe#Sr^}Tqi ziCTRZD9x))weVfUr|P-!n#@mPai}I8}LUXr&QTcb8>s09ZisUCG-?DgqPuoWFplyh_UbreAZU2q(rw;qE*D$ z`7Z^C$t!WE0N*9>5&?D-xE+1*nfaOhF@$~7mnbO?soFxEH&Gwa2lEH5BB;w}({jwS z@KJMHCIwEhR)eO-7MHq?lr`HSjl*))o-lX#6loqb2L3hpWf6Z86|AQ?bhy2afEoB` z#6ZVeKIN>gtIOvgzL_K7Tamsw`2s)-w*pEf=w5;{392M$3m|o5od|;>Y!Kl}5v~^D z6CzwA!nGn?C&G;g`6VdDrRO&nTu24Ahz~mvR;eR9#LFHLb{bI!@n}!zLbwy_m^$*P z_;_4|Cq&3a*e${ygzX8v2#wTH5!)w13H7xnm=PM^ETVp^2yNn<{oJ=?5t|}Hhxq11 z*z_5OWn`*|O%q|d2s1_Krf^&?LVoibK-3I^{2-j>8avfI7okzYJV5HmY7yR#kiYSx zt~WQ00Mz#vEXK`!0M(IQB0MU><09lD>=t1ULVoBfqTHSQNsP94U|5&8&ZDu^Y1$N? z;0F?oG#}#WJJ~RDuE53|5l#`ISA+#3oFT&LBHWA+qjCZ@HH@@^#2QAvEIu4Wj6P!e z0T}0cLMP?W{nvvJjO<0MZ}5y}GH?~EeJ7^Cf^YpUCOMM&Bh zFWD<5seh1~sU{MaXk+b>f5UM49nVK@*AZ0KP+{Y@;zg}+sugK!MY>v%p;lzJ=Z%%H zmbd4*C5PY~vuW}ciScsnCJCvq&zPO}V|J=TY53Hk)grtfVe@TcSZJwo^J)umh?l#KD6UHJge8?y&?Y^0@n-h zTKYP?AwQL#7c}HM^+OH$zrgxPM8WMyqfO1=R`IOn469R&mut`nYw(JJTmqJbi!0G}C)?QE>JfppC(Vd2c~Sm=d1gq8E}SUJm#rSrl)=PjK(Cy1r9 zvY7XMgaPTC89E>bKS3lJ*aoSCW6QFgmSvJf%o1yjY({;|1la|e*?`s8XG5==P=;7? z|8!ZBWLSw0ZlopA(w-+UhAs|dC}Xu2_8pt*4DI%p3o)cjxn1|)!AeuJE?zcSUzE=B z-1?%lA$gfz{gykh1=IN;thhTtSs5hZzkW6m^pXapQK`z5Xa~kWgxRu5?%aw`kSj}8l6TEB!XTw6h= z2dvLuZXCWZo^F zmWuEm82ru=H0}22=~^R6BHRs@EA|o|z4>`G5#NM;`XAMxvqcuIk>nFT3r#U7np*LD zlv>KSeR!@`>Sec$a3Rc;+BUM9ute3<>$hMy_#jdl$S_4k(8H6HbFcj zJAU*%K(dxkns|Jxu>n;CVUU&ER=8~qo*|(la%icGMmLI*j-z~m`oYaT4lsvT(Fs=D zn|<4Y!7DsNV!|Ng$xjd;35({@?txa=%O9sYTfIg;883REm*W48q_KT5(zolD5!X0& zF~oQ)pRpS>+A}kB(ti^~c;y-iqpwaihjuTyOou7BlwU@L=0oMRsEf^dl7T9v3Oh~5 zTqlKGUIabYDmL4|?Wi-E$w|_cmy4!agrJRruOu!WYFUzKY&0l$qJUmtoDBo9CKmB! z(5g!LZD>twxY09X@2V7nX9~W$j!Y;9er`s4h*(cN7aLLwkYWE78rewVq>qM{ulc*K z!`u)&fJ8#SBBDi!MKq_&v}efy0jg(B5@=~V(TXn#Md!VYSg|km8uBUk^pOa66C$ao zgH+!>{--KJs|6|x*%!Tdl4;SaztxL}_85^=u~%Pg(Nw87MLY~-*fuq@LA(%}BDB^K zDCHhBvIrA*ahkd~owJK#`Z?{ly7chv=e91CZV2c!hJ`jh2HJ<#DCGX@0j}^kKp_qJ z<`te4ZLyv0ZOBjHKip1qW7VcPIR~gUz6+!nc$|uzMdqAxf2NaRv;M(Q~4_fkjbA1kX31uSAN<9C1aTl?D_j17Ho zLy`nF&6ua#iP^f2L}+sU1IDbZD+2%4RxLp!&!CaqPF89}TC<*Q02CNXvH;RP^mKw0 z`G>ZOB6<4$cq#IEsrLF-WC7t3V{A_(xe{VQMYtU8F*pN8Q)?u>iJ3^L3T6^aS{2^C zX6;d-QUz}QVXp%<^9-MZr9;%e)+lYrq(z%ctE>$zkI{&M~E)V}99(#rJ> zNU1$1%KwO`fRJ1#v$jRWr~On2-Yg>1KPcfgCt$Sp8_3+Q-B{~UlB5oUVbg7nZ_jG* zq80uzV7NsqJ322^=h9n+RMYVmA}`hyd3TcnUTItuaX8LJ_-! zKx`5s_I?5v2+&F3MD-C}&N|^D$Vv0+(ndUOE$B+0N zv<=phz5LSC06rQR)7v=YeKcg3+a^IA6zf!Jnf8zwgnS)!XTAe@zK$XfOqTlwvLy;Z zcSWJKvY{Yd2xWB-4U({f8!)vocc##j4EgGr}IqG`evCiiTRSD{qjb z4}&2KfGP5C%usErgD;`l_VNeuDCIA=o?Dd9Td-l8hmIwfUhXUciJ|dQxC3abHWN5m zfMB!`#00pKz%c|)h1doWO9BHGRx``uq?kDks{@(aZWdMMnFq{m3y(*>I5Y}DM@RzPB3YL zF=eHJ-vpd!t7;Hk5hnVGvB?L`KVy!^elVEhUV}MOu~V!0Kc6)EX+b`=w<3%OHIEeH zed3dyw~HsZ+;#x}MWug4asL^~9yAy6d5~sf-HH6;KU0K9UMJ8{%2&Vt6Ja0~mhIeA zkn!YDLSm8xW3R2|8xYn{*u3$ZM5BYkTc8F#w(9=Y#BQM(#C$T}LS_rGE?q%O|BIlU{uY36!7xrUBdf_mJ^|)GJ zhLv3(VgD=UG)ZLs1lR5=)q5I(#itT8eusN5D(FQuO*;KTi zvKYcLjP%((feJ+*zNnJ5-|#4!C=32QI#UtIv^_f;Z#iIlxa z*=)fcF$Y(W_(;@&^}o$0Reu9CizE`dUEK+LhhYa*#!+%<1JxV&t3D!%5;jm&WEZ6Q z5j}W~yjz5Zh+?56ykU|eub}VCyPL3D)s5SQ?n{2JtEHN(oZjc@U0qK5&st~-n7)^H z!F(^Ur0le+B2Ehx&=+4^y8t#JV|&PpDC9z=8{x^ayNy@krMVYMtS~7xZy|`hN}AUY z^vQeiQge`?A}j;V)dZFN7GI|W5(5Nwj6GH2D~?Fwf6cY<&P|v}+o=RLbR|M?l+j?j zGq5^UL@r&wl|D%Nd^k9EbONiQ`gAl&8P|kQQsA@jJ$MsZHp^}36U*0NEMFs>gtJ#r zROfQw>UmHSSU>pwrSPvQg57z*G=z~Hq|7x-IyiD0ls{~J2-nQF-Z6pkZ$UUSrj9A& zs8f>Yi|cp)%{Rh-e<`+el~U|#fu#o<8lGqa+$lZQ3B^#!A$7k3b&E8i-TzL+p3Vxx zi_xIr^(!&>O1GnK$w;thIr#e%AT5u@1tBR90;y#KO*nPjyCU2|VU5#*pA9>Wc07~u za{zYo_rAlhWBVQZoOUQxB;o>pQ;6hldU1lZp&OZb?P2r`Td?$CLsz42F~FcPz6eyh zo??7)`h0U)waG#Bkc#|l3{_7;I-fz6pjmtx0JaNqv6vX>OHpwd#6eO^iiLK=PQ!X1 z%kSy)#X(S{5@7~2A}bB9rgTGt{tmV#C7M_p56&evXwKW6+0qO>{i2y+z9Un^3+I+Esddx90A3IAXewgKFg zZ~;ZMC)n{AgyyLu9f0`vk3%=|QsxYL{X1Tpa|zl8C8T*eL9Y@tkDv{J)>9=L{0P>k z610S%G=gdfN++lefiA755;p`XHj|(Rg2p1KKJ|%P+OU#d-3WZL&$eMT09~5Zycth* z>-*8u+TJ8@)f(h3jqU4JAdc2Muvy}&0eVGZSH8p_Y=BOF-AG|y@Bf94CFM58H) zq1AWJu|#wk_G6lB5nvU2GTS9kbauNOEW=05bH-a#O)07i5P(e-g8h;9y$h+=QPSr# z@L`<^P=n_zHYdH*h#z&YXo5b5vKdP$OiaxVyzvH**NXBp`j~U&^6}S*`5uZxoprTm z;k0uxAbu|@;eUp{S2vDok=~*12a+Hme>NOaN;8?h`HO!d&Mv--Pead;NW%TF^2YF? zk4PpI07+l0Gz57V36-HVNA<`NgI7fUO6-Mv!OMIyG7uM#fJ7e*5oo`d)HZ~^yNxBC zb?JwyH==#U>joS3^HBBkKgA@Am<=g-2%bd@OAdbd8CE~NsEAL%;=nrA3vT5(v7Yi{ z$$_oh!!=K*R~>3cOuMI(xOltg;MI7jB}dhg<7#=gTHB+R^kVCtLr3YLZF7KLWr&kT|c2D;vh#l>oJy*P*6RTgW*Hs&OsCuz`xuFhq5M{vS zfFw|~I~$$XM{LGY