Advertisement
Guest User

M34t's Lunar Planker 4/1/2012

a guest
Apr 1st, 2012
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 67.21 KB | None | 0 0
  1. {$DEFINE SMART}
  2. {$i srl/srl.simba}
  3. {$i ObjectDTM/ObjDTMInclude.simba}
  4.  
  5. var
  6.  
  7.   //Stores the previous bank slot logs were found in, to speed up banking
  8.   LogsBankSlot : TPoint;
  9.  
  10.   //Proggy stuff, and fail counter
  11.   Prog_PlanksMade,FailCount : Integer;
  12.  
  13.   //stats stuff
  14.   commitTime : LongInt;
  15.   logsPlanked : Integer;
  16.  
  17. const
  18.   DEBUG_LEVEL = 5;
  19.   ENABLE_WALKING = False; //If true, your character will walk to the
  20.                           // edgeville bank, if it cannot identify a bank nearby
  21.  
  22.   MAX_FAILS = 3; //player will log out if the script fails this many times in a row
  23.                  //^ I recomend you do not change
  24.  
  25.   SRLStats_Username = '';//If you do not have a stats account, please leave
  26.   SRLStats_Password = '';//these blank, and register an account when prompted
  27.  
  28. procedure DeclarePlayers;
  29. begin
  30.   HowManyPlayers := 1;
  31.   NumberOfPlayers(HowManyPlayers);
  32.   CurrentPlayer := 0;
  33.   with Players[0] do
  34.   begin
  35.     Name := '';
  36.     Pass := '';
  37.     Pin := '';
  38.     Active := true;
  39.     Member := true
  40.                       //Log Type
  41.     Integers[0] := 3; //0-3 for normal, oak, teak, or mahogany logs respectively
  42.     Booleans[0] := True; //Use soulwars bankchest?
  43.   end;
  44. end;
  45.  
  46. function replicate(str : String; count : Integer):String;
  47. var
  48.   I : Integer;
  49. begin
  50.   Result := '';//make sure result is empty if function was previously called;
  51.  
  52.   for I := 0 to count-1 do
  53.     Result := Result + str;
  54. end;
  55.  
  56. procedure DebugStr(Level : Integer; Text : String);
  57. begin
  58.   if (DEBUG_LEVEL >= Level) then
  59.     writeln(replicate(':: ',Level) + Text);
  60. end;
  61.  
  62. function GetLogDTM(Log : Integer):Integer;
  63. begin
  64.   case Log of
  65.     0: Result := DTMFromString('mlwAAAHicY2dgYDjEzMCwE4iPA/EFID4NxCeA+AAQczEy' +
  66.                                'MPBBMScQswDxT6CeP0Ac5azO0JRhCWQxYWBWIIkLM+LBU' +
  67.                                'AAAb7UJyg==');
  68.     1: Result := DTMFromString('mlwAAAHicY2dgYDjMzMCwE4gPAfFpJAzi6zEyMBgAsQIU' +
  69.                                'awCxIRCbAHFdvDnD7JowoAlMGJgVSOLCjHgwFAAAS4YJZQ==');
  70.  
  71.     2: Result := DTMFromString('mggAAAHicY2NgYDjKzMCwE4gPA/EFID4BxKeAOIiRgSEM' +
  72.                                'iJ2BOBDK9gHi5T2xDE1JlkCdTCiYFUhiw4w4MAQAAKTJCXk=');
  73.  
  74.     3: Result := DTMFromString('mlwAAAHicY2dgYDjDyMBwCIgPM0LYF4D4KhBfBmIVINYB' +
  75.                                'YkMg1gNiXShfGYhb870YAvS4gSYwYWBWIAnD6LKMeDAUA' +
  76.                                'AAftgjF');
  77.   end;
  78. end;
  79.  
  80. function GetBankLogDTM(Log : Integer):Integer;
  81. begin
  82.   case Log of
  83.     0: Result := DTMFromString('mlwAAAHicY2dgYDjAyMCwnRFCnwLiE0B8DogPA/F8oPwy' +
  84.                                'IJ4CxFOBeA4QLwbi5UAcZKfK0JptDWQxYWAOIAnC2AAjH' +
  85.                                'gwFAFSxC74=');
  86.     1: Result := DTMFromString('mlwAAAHicY2dgYHjNyMDwGIg/APE3IP4CxL+B+DMQzwPK' +
  87.                                'LwXiSUA8FYjnAPEiIF4GxFkB+gyLm2OALCYMzAEkQRgbY' +
  88.                                'MSDoQAAKDMNfw==');
  89.     2: Result := DTMFromString('mlwAAAHicY2dgYJjEyMDQDcTTgXgeEM8B4kVAPAPEB8ov' +
  90.                                'BakB4mlAPAeIFwDxMiBuzvdiaE+zAbKYMDAHkARhbIARD' +
  91.                                '4YCAN8eCwo=');
  92.     3: Result := DTMFromString('mlwAAAHicY2dgYHjNyMDwBIjfAvEXIP4KxN+A+D0QKwGx' +
  93.                                'BhCLA7ECEIsBsSYQawNxc74XQ5ABD9AEJgzMASRBGBtgx' +
  94.                                'IOhAACFyQl2');
  95.   end;
  96. end;
  97.  
  98. function GetMageSortSettingBMP(Setting : Integer; Planking : boolean) : Integer;
  99. begin
  100.   case Setting of
  101.     0: Result := BitmapFromString(6, 5, 'meJwTUVARUVCRl5c/evOVeUQBkPSN' +
  102.               'TfeKSmZkYABy05dtA8oCuUBBOBfIAHIDErOADCAXqBJI+sZnAhGQD' +
  103.               'UQQBgAtghmf');
  104.     1: If Planking then
  105.          Result := BitmapFromString(6, 6, 'meJzTNzCwsbHJyspiZGDo6uoSFhYG' +
  106.                 'MhwdHYFsICMhIREoIi8vP2ny5ITERKCIvoEBUGTJkiVAEaA4FxcXk' +
  107.                 'BuRWQzUAmQDFQC5AYlZsQVVQDaEC5SNyi1PKW8CAFv6GSo=')
  108.        else
  109.          Result := BitmapFromString(7, 7, 'meJzTNzCwsbHJzs5mZGDo6uoWFhbO' +
  110.                 'buwBsh0dHYFcICMxMREomFHZKi8vP2nyFCAXKKhvYAAUTClvWrJkC' +
  111.                 'VAQKMXFxQUUSSppSCisBuoFcoHKIGqAIkAE5KKJABHQWCAXgoDciM' +
  112.                 'xiIAIAby4rEw==');
  113.     2: Result := BitmapFromString(7, 7, 'meJxrnL2gYsKc0u6ZRR1T8psnZDf2' +
  114.               'AFF9MgNQhMG2GY4yKluDTRhB7Pi9DF0PQQjIsG0CagEJArmLroIQkAE' +
  115.               'WZGRggOltAiIgF2hsZk0HkAFHCYXVQGNTypsgCMiNyCwGIgAMgjOd');
  116.   end;
  117. end;
  118.  
  119. function MenuOpen:Boolean;
  120. begin
  121.   DebugStr(3,'Checking whether menu is open...');
  122.  
  123.   result := OptionsExist(['a','n','c','e','l'],False);
  124.  
  125.   DebugStr(4,'Menu was open: ' + BoolToStr(Result));
  126. end;
  127.  
  128. procedure mouseAway;
  129. var
  130.   TP:TPoint;
  131. begin
  132.   DebugStr(5,'Exiting Menu');
  133.  
  134.   GetMousePos(TP.x,TP.y);
  135.  
  136.   MMouse(TP.x-100-random(50),TP.y-150-random(100),5,5);
  137.  
  138.   wait(540+random(500));
  139. end;
  140.  
  141. function PinAndBankTest:Boolean;
  142. var
  143.   T : LongInt;
  144. begin
  145.   if not LoggedIn then
  146.     Exit;
  147.  
  148.   Result := false;
  149.  
  150.   DebugStr(3,'Waiting for bank and pin screens...');
  151.   MarkTime(T);
  152.   while (not (BankScreen or PinScreen)) and (TimeFromMark(T) < RandomRange(5000,7000)) do
  153.     wait(100+random(50));
  154.  
  155.   if PinScreen then
  156.   begin
  157.     DebugStr(2,'Entering pin...');
  158.     if Length(Players[CurrentPlayer].Pin) = 0 then
  159.     begin
  160.       DebugStr(2,'You did not set a pin, but we are in the pin screen... ' +
  161.                'Next player...');
  162.  
  163.       Logout;
  164.       NextPlayer(False);
  165.  
  166.       Exit;
  167.     end;
  168.     inpin(Players[CurrentPlayer].Pin);
  169.   end;
  170.  
  171.  
  172.   DebugStr(3,'Waiting for bank screen...');
  173.   MarkTime(T);
  174.   while not BankScreen and (TimeFromMark(T) < 5000) do
  175.     wait(50+random(50));
  176.  
  177.   Result := BankScreen;
  178.   if Result then
  179.   begin
  180.     DebugStr(2,'Bank opened succesfully');
  181.     FixBank;
  182.   end else
  183.     DebugStr(2,'Did not find Bank Screen');
  184. end;
  185.  
  186. function Open_Bank:Boolean;
  187. var
  188.   I,TempCTS : Integer;
  189.   TempHM,TempSM : Extended;
  190.   TP : TPoint;
  191.   bankerTPA : TPointArray;
  192.   bankerATPA : T2DPointArray;
  193. begin
  194.   if not LoggedIn then
  195.     Exit;
  196.  
  197.   Result := False;
  198.  
  199.   TempCTS := GetColorToleranceSpeed;
  200.   if TempCTS = 2 then
  201.     GetColorspeed2Modifiers(TempHM,TempSM);
  202.  
  203.   SetColorToleranceSpeed(2);
  204.  
  205.   SetColorspeed2Modifiers(0.10,0.60);
  206.  
  207.   if not (BankScreen or PinScreen) then
  208.   begin
  209.     DebugStr(3,'Not in Bank or Pin Screens');
  210.  
  211.     Result := OpenBankNPC;
  212.  
  213.     if not OpenBankNPC then
  214.     begin
  215.       DebugStr(3,'SRL OpenBankNPC failed, finding bankers manually...');
  216.  
  217.       FindColorsTolerance(bankerTPA,3350053,MSX1,MSY1,MSX2,MSY2,11);
  218.  
  219.       bankerATPA := TPAtoATPA(bankerTPA,20);
  220.  
  221.       SortATPAFromMidPoint(bankerATPA,Point(MSCX,MSCY));
  222.  
  223.       for I := 0 to length(bankerATPA)-1 do
  224.       begin
  225.         TP := MiddleTPA(bankerATPA[I]);
  226.  
  227.         MMouse(TP.x,TP.y,4,4);
  228.  
  229.         DebugStr(4,'Waiting for bankers uptext...');
  230.  
  231.         if WaitUpTextMulti(['to B','Bank','anke'],725+random(225)) then
  232.         begin
  233.           DebugStr(3,'Found Banker');
  234.  
  235.           clickMouse2(mouse_Right);
  236.  
  237.           if WaitOption('ank B',1500+random(225)) then
  238.           begin
  239.             DebugStr(4,'Found option to bank');
  240.  
  241.  
  242.             wait(100+random(125));
  243.  
  244.             if ChooseOption('ank B') then
  245.             begin
  246.               DebugStr(4,'Clicked open bank succesfully');
  247.               FailCount := Max(0,FailCount-1);
  248.               Result := True;
  249.             end else if not FindNormalRandoms then
  250.             begin
  251.               DebugStr(3,'Failed find open bank option, incrememnting FailCount...');
  252.               Inc(FailCount);
  253.               DebugStr(3,'Failed ' + inttostr(FailCount) + ' times so far...');
  254.             end;
  255.  
  256.             break;
  257.           end;
  258.         end;
  259.       end;
  260.     end;
  261.   end;
  262. end;
  263.  
  264. procedure depositPlanks;
  265. begin
  266.   if not BankScreen then
  267.     exit;
  268.  
  269.   DebugStr(3,'Depositing Planks...');
  270.  
  271.   Deposit(3,28,True);
  272. end;
  273.  
  274. function TestBankSlot(text : TStringArray ; BankPoint : TPoint; ExitMenu : Boolean):Boolean;
  275. var
  276.   T : LongInt;
  277.   Tries : LongInt;
  278. begin
  279.   Result := False;
  280.  
  281.   if not BankScreen then
  282.     exit;
  283.  
  284.   DebugStr(4,'RightClick testing bank slot ' + tostr(BankPoint));
  285.  
  286.   MouseBankSlot(BankPointToBankIndex(BankPoint),mouse_move);
  287.  
  288.   for Tries := 0 to 5 do
  289.   begin
  290.     DebugStr(4,'Attempting to test object in bank. Attempt #' + inttostr(Tries));
  291.  
  292.     If MenuOpen then
  293.       mouseAway;
  294.  
  295.     MouseBankSlot(BankPointToBankIndex(BankPoint),mouse_move);
  296.  
  297.     wait(50+random(150));clickmouse2(mouse_Right);
  298.  
  299.     MarkTime(T);
  300.  
  301.     while not MenuOpen and (TimeFromMark(T) < 3000) do
  302.       wait(350+random(250));
  303.  
  304.     DebugStr(5,'Checking Options list for: '+tostr(text));
  305.  
  306.     if OptionsExist(text,false) then
  307.     begin
  308.       Result := true;
  309.  
  310.       break;
  311.     end else if MenuOpen then
  312.       break;
  313.  
  314.   end;
  315.  
  316.   //If not result then we are not in the correct menu anyways...
  317.   if Result and ExitMenu then
  318.     mouseAway;
  319.  
  320.   DebugStr(4,'Done Testing Bank Slot ' + tostr(BankPoint) + '. Result: ' + booltostr(Result));
  321. end;
  322.  
  323. function GetLogsUptext(Log : Integer) : TStringArray;
  324. begin
  325.   case Log of
  326.     0: Result := ['ll L'];
  327.     1: Result := ['ak l','Oak'];
  328.     2: Result := ['eak l','Teak'];
  329.     3: Result := ['aho','oga', 'any', 'ny lo'];
  330.   end;
  331. end;
  332.  
  333. function FindLogs(var LogsSlot:TPoint; withdrawLogs:boolean):Boolean;
  334. var
  335.   found : Boolean;
  336.   LogDTM : Integer;
  337.   T : LongInt;
  338.   TP : TPoint;
  339. begin
  340.   if not LoggedIn then
  341.     Exit;
  342.  
  343.   if not BankScreen then
  344.   begin
  345.     DebugStr(3,'Attempted to find logs, but we were not in the bank window');
  346.     CloseWindow; //Incase we got stuck in deposit window...
  347.   end;
  348.  
  349.   if MenuOpen then
  350.     mouseAway;
  351.  
  352.   MarkTime(T);
  353.   While MenuOpen and (TimeFromMark(T) < RandomRange(5000,6500)) do
  354.     wait(RandomRange(350,450));
  355.  
  356.   Wait(RandomRange(350,650));
  357.  
  358.   LogDTM := GetBankLogDTM(Players[CurrentPlayer].Integers[0]);
  359.  
  360.   DebugStr(2,'Beginning search for logs...');
  361.  
  362.   FindDTM(LogDTM,TP.x,TP.y,MSX1,MSY1,MSX2,MSY2);
  363.  
  364.   {$IFDEF SMART}
  365.     SMART_DrawCircle(true,TP,5,False,clAqua);  //TODO modify so this doesnt interfere with paint
  366.   {$ENDIF}
  367.  
  368.   found := TestBankSlot(GetLogsUptext(Players[CurrentPlayer].Integers[0]),MSTPointToBankPoint(TP),false);
  369.  
  370.  
  371.   if found or (TP.x > 1) then
  372.   begin
  373.     wait(350+random(150));
  374.     LogsSlot := MSTPointToBankPoint(TP);
  375.  
  376.     DebugStr(4,'Found your logs in bank at slot ' + ToStr(LogsSlot));
  377.  
  378.     if withdrawLogs then
  379.     begin
  380.       Result := Withdraw(LogsSlot.x,LogsSlot.y,0);
  381.  
  382.       debugStr(2,'Withdrawing Logs Success: ' + BoolToStr(Result));
  383.  
  384.       if Result then
  385.         exit;
  386.  
  387.     end;
  388.   end else if not FindNormalRandoms and LoggedIn then
  389.   begin
  390.     DebugStr(2,'Failed to withdraw logs!! You either ran out of your specified ' +
  391.              'log type, Or did not have your logs visible in the atop of your' +
  392.              ' bank.');
  393.  
  394.     Logout;
  395.     NextPlayer(False);
  396.   end;
  397.  
  398.   FreeDTM(LogDTM);
  399.   {$IFDEF SMART}
  400.    // SMART_ClearCanvas;
  401.   {$ENDIF}
  402. end;
  403.  
  404. function withdrawLogs:Boolean;
  405. var
  406.   found : boolean;
  407. begin
  408.   Result := false;
  409.   FixBank;
  410.  
  411.   if not BankScreen then
  412.   begin
  413.     DebugStr(3,'Attempted to withdraw, but was not in bank screen...');
  414.     CloseWindow;
  415.     exit;
  416.   end;
  417.  
  418.   found := TestBankSlot(GetLogsUptext(Players[CurrentPlayer].Integers[0]),LogsBankSlot,false);
  419.   if not found then
  420.     MouseBankSlot(BankPointToBankIndex(LogsBankSlot),mouse_move);
  421.  
  422.   if found or WaitUpTextMulti(GetLogsUptext(Players[CurrentPlayer].Integers[0]),725+random(225)) then
  423.   begin
  424.     DebugStr(3,'Remembered logs Bank Slot, withdrawing');
  425.     Result := Withdraw(LogsBankSlot.x,LogsBankSlot.y,0)
  426.   end else
  427.   begin
  428.     DebugStr(3,'Did not remember logs Bank Slot, finding and withdrawing');
  429.     Result := FindLogs(LogsBankSlot,true);
  430.   end;
  431. end;
  432.  
  433. function SortSpells(planking:Boolean):Boolean;
  434. var
  435.   I,TempBMP : Integer;
  436.   T : LongInt;
  437.   TP : TPoint;
  438. begin
  439.   Result := False;
  440.  
  441.   if not LoggedIn then
  442.     Exit;
  443.  
  444.   DebugStr(2,'Sorting the spells in your spellbook');
  445.   gametab(tab_Magic);
  446.  
  447.   MarkTime(T);
  448.   while not (GetCurrentTab = tab_Magic)
  449.     and (TimeFromMark(T) < (RandomRange(16000,20000))) do
  450.     wait(150+random(50));
  451.  
  452.   if not (GetCurrentTab = tab_Magic) and not FindNormalRandoms and LoggedIn then
  453.   begin
  454.     DebugStr(2,'Failed to open magic tab for casting PlankMake');
  455.     Logout;
  456.     NextPlayer(False);
  457.   end;
  458.  
  459.   for I := 0 to 2 do
  460.   begin
  461.     TempBMP := GetMageSortSettingBMP(I,planking);
  462.     if FindBitmapIn(TempBMP,TP.x,TP.y,MIX1,MIY1,MIX2,MIY2) then
  463.     begin
  464.       mouse(TP.x,TP.y,3,3,mouse_Left);
  465.       DebugStr(4,'Mage Sort Setting ' + IntToStr(I+1) + ' Switched');
  466.       Result := True;
  467.     end;
  468.     wait(150+random(75));
  469.     FreeBitmap(TempBMP);
  470.   end;
  471. end;
  472.  
  473. function LogInSlot(LogDTM,InvSlot:Integer):Boolean;
  474. var
  475.   x,y : Integer;
  476.   box : TBox;
  477. begin
  478.   if not LoggedIn then
  479.     exit;
  480.   box := InvBox(InvSlot);
  481.   Result := FindDTM(LogDTM,x,y,box.X1,box.Y1,box.X2,box.Y2);
  482. end;
  483.  
  484. function GetLogArray(LogDTM : Integer) : TBoolArray;
  485. var
  486.   I : Integer;
  487.   InvArr : TBoolArray;
  488.   DebugLine : String;
  489. begin
  490.   if not LoggedIn then
  491.     Exit;
  492.  
  493.   SetArrayLength(InvArr,28);
  494.   DebugStr(3,'Finding which inventory slots contain logs..');
  495.   GameTab(tab_Inv);
  496.   wait(1000+random(100));
  497.   DebugStr(3,'');
  498.   DebugStr(3,'Logs Identified in inventory:');
  499.   for I := 0 to 27 do
  500.   begin
  501.     InvArr[I] := LogInSlot(LogDTM,I+1);
  502.     if I Mod 4 = 0 then
  503.     begin
  504.       if length(DebugLine) > 1 then
  505.         DebugStr(3,DebugLine + '|');
  506.  
  507.       DebugLine := '|';
  508.     end;
  509.  
  510.     if InvArr[I] then
  511.       DebugLine := DebugLine + 'L'
  512.     else
  513.       DebugLine := DebugLine + ' ';
  514.   end;
  515.  
  516.   DebugStr(3,DebugLine + '|');
  517.  
  518.   Result := InvArr;
  519. end;
  520.  
  521. function ClickLog(LogSlot : Integer) : Boolean;
  522. var
  523.   T : LongInt;
  524. begin
  525.   if not LoggedIn then
  526.     exit;
  527.  
  528.   DebugStr(5,'Clicking log at inventory slot ' + ToStr(LogSlot));
  529.  
  530.   MarkTime(T);
  531.  
  532.   while not (GetCurrentTab = tab_Inv) and (TimeFromMark(T) < 4000) do
  533.     wait(150+random(50));
  534.  
  535.   MouseItem(LogSlot,mouse_Left);
  536.  
  537.   MarkTime(T);
  538.   if (length(Players[CurrentPlayer].Pin) > 0) then
  539.   begin
  540.     while not (PinScreen or (GetCurrentTab = tab_Magic)) or (TimeFromMark(T) > 5000+random(1000)) do
  541.       wait(150+random(150));
  542.  
  543.     if PinScreen then
  544.       InPin(Players[CurrentPlayer].Pin);
  545.   end;
  546.  
  547.   MarkTime(T);
  548.   while  (GetCurrentTab = tab_Inv) and (TimeFromMark(T) < 4000) do
  549.     wait(150+random(50));
  550.  
  551.   Result := GetCurrentTab = tab_Magic;
  552. end;
  553.  
  554. function ReadyPlankSpell:Boolean;
  555. var
  556.   PlankMakeDTM : Integer;
  557.   T : LongInt;
  558.   TP : TPoint;
  559. begin
  560.   Result := False;
  561.  
  562.   if not LoggedIn then
  563.     Exit;
  564.  
  565.   PlankMakeDTM := DTMFromString('mggAAAHicY2NgYPjEBMGvgPglEP8C4i9AXMDIwFANxKVAnAfEuUCcAcRHpicCdTFiYFYgiQ1jqoRgCAAAGecKRg==');
  566.   DebugStr(5,'Selecting the PlankMake spell...');
  567.  
  568.   MarkTime(T);
  569.   while not (GetCurrentTab = tab_Magic) and (TimeFromMark(T) < 4000) do
  570.     wait(150+random(300));
  571.  
  572.   if not (GetCurrentTab = tab_Magic) then
  573.     begin
  574.       DebugStr(2,'Not in magic tab, possible random?');
  575.  
  576.       If FindNormalRandoms then
  577.         DebugStr(2,'Found randoms')
  578.       else
  579.         DebugStr(3,'Did not find randoms');
  580.  
  581.       GameTab(tab_Magic);
  582.     end;
  583.  
  584.   if not FindDTM(PlankMakeDTM,TP.x,TP.y,MIX1,MIY1,MIX2,MIY2) then
  585.   begin
  586.     DebugStr(2,'Failed to find PlankMake spell, attempting to resort spell tab...');
  587.  
  588.     SortSpells(true);
  589.  
  590.     if not FindDTM(PlankMakeDTM,TP.x,TP.y,MIx1,MIY1,MIX2,MIY2)
  591.       and not FindNormalRandoms
  592.       and LoggedIn then
  593.     begin
  594.       DebugStr(3,'Failed find plankmake spell. Either you did not start ' +
  595.                  'with runes in your inventory, or you ran out of runes.');
  596.  
  597.       Logout;
  598.       NextPlayer(False);
  599.       exit;
  600.     end else
  601.       FailCount := Max(0,FailCount-1);
  602.  
  603.   end;
  604.  
  605.   mouse(TP.x,TP.y,3,3,mouse_Left);
  606.   FreeDTM(PlankMakeDTM);
  607.  
  608.   Result := True;
  609. end;
  610.  
  611. procedure antiban;
  612. begin
  613.   DebugStr(3,'Searching for randoms...');
  614.  
  615.   FindNormalRandoms;
  616.  
  617.   if FindMod then
  618.   begin
  619.     DebugStr(1,'Found a mod! Logging out to grab a drink and calm down...');
  620.  
  621.     logout;
  622.  
  623.     wait(20000+random(5000)); //Make it seem like we had to walk away...
  624.  
  625.     SelectWorld(RandomWorld(true,false));
  626.     LogInPlayer;
  627.   end;
  628.  
  629.   DebugStr(4,'Might do antiban...');
  630.  
  631.   case random(750) of //TODO maybe raise it?
  632.     1..5:     begin
  633.                 DebugStr(3,'Performing PickUpMouse...');
  634.                 PickUpMouse;
  635.               end;
  636.  
  637.     6..30:    begin
  638.                 DebugStr(3,'Performing RandomRClick...');
  639.                 RandomRClick;
  640.               end;
  641.  
  642.     31..175:  begin
  643.                 DebugStr(3,'Performing HoverSkill...');
  644.                 HoverSkill(SKILL_MAGIC,false);
  645.               end;
  646.  
  647.     175..350: begin
  648.                 DebugStr(3,'Performing SetScreenMouse...');
  649.                 SetScreenMouse('rand',SRL_ANGLE_HIGH);
  650.               end;
  651.  
  652.   end;
  653. end;
  654.  
  655. function hasLogs(var logArr : TBoolArray):Boolean;
  656. var
  657.   TempDTM,I : Integer;
  658. begin
  659.   Result := False;
  660.  
  661.   if not LoggedIn then
  662.     exit;
  663.  
  664.   TempDTM := GetLogDTM(Players[CurrentPlayer].Integers[0]);
  665.  
  666.   LogArr := GetLogArray(TempDTM);
  667.  
  668.   for I := 0 to 27 do
  669.     if LogArr[I] then
  670.       Result := true;
  671.  
  672.   DebugStr(3,'Inventory contains logs: ' + BoolToStr(Result));
  673.  
  674.   FreeDTM(TempDTM);
  675. end;
  676.  
  677. function CheckOutOfMoney : boolean;
  678. begin
  679.   Result := pos('og into pl',GetBlackChatMessage) > 0;
  680.  
  681.   if Result then
  682.   begin
  683.     DebugStr(1,'You Have run out of money!');
  684.  
  685.     Logout;
  686.     NextPlayer(False);
  687.   end;
  688. end;
  689.  
  690. function PlankLog(Log : Integer) : Boolean;
  691. begin
  692.   Result := False;
  693.   if ReadyPlankSpell then
  694.     if ClickLog(Log) then
  695.     begin
  696.       Result := True;
  697.       logsPlanked := logsPlanked + 1;
  698.       Prog_PlanksMade := Prog_PlanksMade + 1;
  699.     end;
  700. end;
  701.  
  702. function removeFromIntArray(arr : TIntegerArray; toDelete : Integer) : TIntegerArray;
  703. var
  704.   newArr: TIntegerArray;
  705.   i:Integer;
  706.   found : Boolean;
  707. begin
  708.   SetArrayLength(newArr,length(arr)-1);
  709.   for i := 0 to length(newarr)-1 do
  710.   begin
  711.     if not found then
  712.       found := i = toDelete;
  713.     if (found) then
  714.       newArr[i] := arr[i+1]
  715.     else
  716.       newArr[i] := arr[i];
  717.   end;
  718.   result := newArr;
  719. end;
  720.  
  721. function InvToInvPoint(I : Integer) : TPoint;
  722. begin
  723.   Result.x := ((I-1) mod 4)+1;
  724.   Result.y := ((I-1) div 4)+1;
  725. end;
  726.  
  727. function InvPointToIndex(Point : TPoint) : Integer;
  728. begin
  729.   result := (Point.x)+Max(0,(Point.y-1)*4);
  730. end;
  731.  
  732. function randNearInvSlot(Slot : Integer; slotArr : TIntegerArray) : Integer;
  733. var
  734.   x,y,SlotCount,i : Integer;
  735.   actualSlots : TIntegerArray;
  736.   tempPoint,SlotPoint : TPoint;
  737. begin
  738.   SetArrayLength(actualSlots,8);
  739.   SlotPoint := InvToInvPoint(Slot);
  740.   writeln(SlotPoint);
  741.   for x := -1 to 1 do
  742.     for y := -1 to 1 do
  743.     begin
  744.       if (x = 0) and (y = 0) then
  745.         Continue;
  746.       TempPoint.x := SlotPoint.x+x;
  747.       TempPoint.y := SlotPoint.y+y;
  748.       if (TempPoint.x < 1) or (TempPoint.x > 4) then
  749.         continue;
  750.       if (TempPoint.y < 1) or (TempPoint.y > 7) then
  751.         continue;
  752.  
  753.       writeln(tempPoint);
  754.       writeln(slotArr);
  755.       writeln(InvPointToIndex(TempPoint));
  756.       if InIntArray(slotArr,InvPointToIndex(TempPoint)) then
  757.       begin
  758.         actualSlots[slotCount] := InvPointToIndex(TempPoint);
  759.         Inc(SlotCount);
  760.       end;
  761.     end;
  762.   SetArrayLength(actualSlots,SlotCount);
  763.  
  764.   for I := 0 to SlotCount-1 do
  765.   begin
  766.     SMART_DrawBoxex(false,InvBox(actualSlots[I]),clYellow);
  767.   end;
  768.   writeln('-----');
  769.   writeln(actualSlots);
  770.   writeln(SlotCount);
  771.   if SlotCount > 0 then
  772.     result := actualSlots[random(SlotCount)]
  773.   else
  774.     result := slotArr[random(Length(slotArr))];
  775. end;
  776.  
  777. function logArrToIntArray(LogArr : TBoolArray) : TIntegerArray;
  778. var
  779.   I,currLength : Integer;
  780.   intArr : TIntegerArray;
  781. begin
  782.   setlength(intArr,Length(LogArr));
  783.   for I := 0 to length(LogArr)-1 do
  784.   begin
  785.     if LogArr[I] then
  786.     begin
  787.       intArr[currLength] := I+1;
  788.       Inc(currLength);
  789.     end;
  790.   end;
  791.   SetLength(intArr,currLength);
  792.   Result := intArr;
  793. end;
  794.  
  795. function makePlanks : Boolean;
  796. var
  797.   currIndex : Integer;
  798.   logArr : TBoolArray;
  799.   InvSlots : TIntegerArray;
  800. begin
  801.   Result := False;
  802.   if not LoggedIn then
  803.     exit;
  804.   if BankScreen or PinScreen then
  805.     exit;
  806.   DebugStr(3,'Getting logs in inventory...');
  807.   if hasLogs(LogArr) then
  808.   begin
  809.     InvSlots := logArrToIntArray(LogArr);
  810.     gametab(tab_Magic);
  811.  
  812.     while Length(InvSlots) > 0 do
  813.     begin
  814.       currIndex := random(Length(InvSlots));
  815.       DebugStr(5,'Planking log at slot ' + IntToStr(InvSlots[currIndex]));
  816.       if not PlankLog(InvSlots[currIndex]) then
  817.         exit;
  818.       InvSlots := removeFromIntArray(InvSlots,currIndex);
  819.     end;
  820.   end;
  821.  
  822.  
  823.   {if hasLogs(LogArr) then
  824.   begin
  825.     Inc(Reps);
  826.     GameTab(tab_Magic);
  827.     writeln(':99999:' + tostr(InvSlots));
  828.     while length(InvSlots) > 0 do
  829.     begin
  830.       writeln('::' + tostr(InvSlots));
  831.       SMART_DrawBoxEx(true,InvBox(currSlot),clBlue);
  832.       currSlot := randNearInvSlot(currSlot,InvSlots);
  833.       if not PlankLog(currSlot) then
  834.         exit;
  835.       if CheckOutOfMoney then
  836.         exit;
  837.         writeln('deleting: ' + inttostr(currslot));
  838.         writeln(InvSlots);
  839.       InvSlots := removeFromIntArray(InvSlots,CurrSlot-1);
  840.         writeln(InvSlots);
  841.     end; {}
  842.  
  843. end;
  844.  
  845. function Bank : Boolean;
  846. begin
  847.   Result := False;
  848.  // ClickNorth(SRL_ANGLE_HIGH); testing disab
  849.   if not LoggedIn then
  850.     Exit;
  851.   if Players[0].Booleans[0] then
  852.     if not OpenBankChestEdge(SRL_bank_sw) and not Open_Bank then
  853.       exit
  854.   else
  855.     if not Open_Bank and not OpenBankChestEdge(SRL_bank_sw) then
  856.       exit;
  857.   PinAndBankTest;
  858.   depositPlanks;
  859.  
  860.   if withdrawLogs then
  861.     Result := true;
  862.  
  863.   CloseBank;
  864.   CloseWindow;
  865. end;
  866.  
  867. function findLodeSymbol : boolean;
  868. var
  869.   LodeBMP : Integer;
  870.   TP : TPoint;
  871.   acc : Extended;
  872. begin
  873.   LodeBMP := BitmapFromString(9, 8, 'meJxbVJs7KSivxDIYgoDsRbW5QHRl' +
  874.         'XtP0Cb2///wGijja2QFJCHtPZxNc5cPHD4GCQBJiApCEGwUUhyCgX' +
  875.         'jSp3VvXvzx/AEjCzYFIAQWBJMQuCBtiF0QWKA5BcC1AF0LcA7cdwg' +
  876.         'aKAxEAIBhsCQ==');
  877.  
  878.  
  879.   FindDeformedBitmapToleranceIn(LodeBMP,TP.x,TP.y,MMX1,MMY1,MMX2,MMY2,6,0,true,acc);
  880.  
  881.   DebugStr(4,'Found lodestone symbol with an accuracy of ' + tostr(acc));
  882.  
  883.   Result := acc > 0.27; //0.277777... was lowest i got by dropping stuff around the
  884.                         // portal on symbol, in case someone tries to make
  885.                         // the bot fail...
  886.  
  887.   FreeBitmap(LodeBMP);
  888. end;
  889.  
  890. function NearBank(Walk : Boolean) : Boolean;
  891. var
  892.   BankDTM : String;
  893.   BackupBankDTM : Integer;
  894.   TP : TPoint;
  895.   a : Extended;
  896. begin
  897.   Result := False;
  898.  
  899.   if not LoggedIn then
  900.     Exit;
  901.  
  902.   BankDTM := '80:79:3:1:7:117:75:1:7:89:44:3:7:123:91';
  903.   BackupBankDTM := DTMFromString('mbQAAAHicY2WAAHYgVoFiEFsfKq4IxKpAzArE/36' +
  904.                                  'wMKhEiIFxjCEPGOswMjCIMKBioBADExoGAwBZgAWs');
  905.   DebugStr(3,'Searching for bank...');
  906.   If not ObjDTM_Find(BankDTM,TP.x, TP.y, true) then
  907.   begin
  908.     DebugStr(3,'Failed to find bank on minimap... trying symbols...');
  909.     if not FindSymbol(TP.x,TP.y,'bank') then
  910.       if not FindDTMRotatedAlternating(BackupBankDTM,TP.x,TP.y,
  911.                MSX1,MSY1,MSX2,MSY2,Radians(-5),Radians(5),Radians(1),a) then
  912.         if not FindNormalRandoms then
  913.           exit;
  914.   end;
  915.  
  916.   Result := (Walk and (Distance(TP.x,TP.y,MMCX,MMCY) <= 72))
  917.               or (Distance(TP.x,TP.y,MMCX,MMCY) <= 16);
  918.  
  919.   if Walk then
  920.     Mouse(TP.x,TP.y,3,3,mouse_Left);
  921.  
  922.   FreeDTM(BackupBankDTM);
  923. end;
  924.  
  925. function WalkLodeToBank : Boolean;
  926. var
  927.   clicks : Integer;
  928. begin
  929.   Result := false;
  930.  
  931.   if not LoggedIn then
  932.     Exit;
  933.  
  934.   DebugStr(3,'Walking to bank...');
  935.   while (clicks < 8) and not Result do
  936.   begin
  937.     inc(clicks);
  938.     DebugStr(4,'Radial walking once...');
  939.     RadialWalkTolerance(5197908,112,85,53,-1,0,50);
  940.     FFlag(25);
  941.  
  942.     Result := NearBank(True);
  943.   end;
  944. end;
  945.  
  946. function TravelBank : Boolean;
  947. var
  948.   T : Longint;
  949.   HomePort : TPoint;
  950. begin
  951.   Result := False;
  952.   if not LoggedIn then
  953.     Exit;
  954.  
  955.   ClickNorth(SRL_ANGLE_HIGH);
  956.  
  957.   HomePort := Point(571,229);
  958.  
  959.   GameTab(tab_Magic);
  960.  
  961.   MarkTime(T);
  962.  
  963.   while not (GetCurrentTab = tab_Magic)
  964.     and (TimeFromMark(T) < RandomRange(5000,6000)) do
  965.     wait(RandomRange(150,450));
  966.  
  967.   if not (GetCurrentTab = tab_Magic) then
  968.     DebugStr(2,'Failed to open magic tab... Attempting to switch again and resort your spell book');
  969.  
  970.   SortSpells(false);
  971.  
  972.   Mouse(HomePort.x,HomePort.y,4,4,mouse_right);
  973.  
  974.   while not MenuOpen and (TimeFromMark(T) < RandomRange(5000,6000)) do
  975.     wait(RandomRange(300,500));
  976.  
  977.   wait(RandomRange(350,550));
  978.  
  979.   if not ChooseOption('ele') then
  980.   begin
  981.     DebugStr(2,'Failed to cast home port');
  982.     exit;
  983.   end;
  984.  
  985.  
  986.   MarkTime(T);
  987.  
  988.   while not LodestoneScreen and (timefrommark(T) < RandomRange(5000,6000)) do
  989.     wait(RandomRange(160,1000));
  990.  
  991.   if not LodestoneTeleport('edgeville') then
  992.   begin
  993.     clickmouse2(mouse_Right);
  994.  
  995.     MarkTime(T);
  996.     while not MenuOpen and (TimeFromMark(T) < RandomRange(6000,7000)) do
  997.       wait(RandomRange(150,300));
  998.  
  999.     wait(350+random(150));
  1000.  
  1001.     if not ChooseOption('ele') then
  1002.     begin
  1003.       DebugStr(3,'Failed to right click teleport from lodeStone screen');
  1004.       exit;
  1005.     end;
  1006.   end;
  1007.  
  1008.   while not FindLodeSymbol and (TimeFromMark(T) < 20000) do
  1009.     wait(RandomRange(300,600));
  1010.  
  1011.   wait(RandomRange(5500,6500));
  1012.  
  1013.   WalkLodeToBank;
  1014. end;
  1015.  
  1016.  
  1017.  
  1018. {$IFDEF SMART}
  1019.   procedure PaintProggy;
  1020.   var
  1021.     TPA : TPointArray;
  1022.     BMP,w,h,tw,th,I,II : Integer;
  1023.     DebugLines : TStringArray;
  1024.   begin
  1025.     DebugStr(2,'Painting Proggy');
  1026.  
  1027.     BMP := BitmapFromString(510, 133, 'meJzsvYdXW0m2PvpPdLuN3c6h' +
  1028.         '7baNSSbnnBSQkJCQEEIJlFFEiSQQIueckwETDMbYbme77e6enp65d' +
  1029.         '3ryzH2/996f8r6jA0IcsLvvXe/3aL+ltb6lJR3Vqdq1q+rbe9epUz' +
  1030.         'Xxu/97IogggvhvYvyH/4vE2Pf/59h3/wsYff9/ACPv/8sP8gr5L5H' +
  1031.         'swymPwLt/H42AzP05+4WhILBQf7kHiv5QKR/A8Lf/CoRfnn1hjgQp' +
  1032.         'xkE5/3saPlgRSrZH4uNKoGZy8N/A5qOmP1z0Qd1Sb/mwMNQ+ENC4R' +
  1033.         '/eEg9cPl3i0AIdk+DXKDyKIIA4jkPPJ8Usw4dt/Dr355+Cbf5DAd1' +
  1034.         'wJpEf/QD6Q+PXfP4KBV38LxO71wMz9rBswuv30ss8tftL2lUspmlI' +
  1035.         'KpcTuZz/Xr3/nvPeWRP36u65v/qP/5V8GXv6VSECp6QdM1T4XBcj5' +
  1036.         'KzVMJcmD5u8XSC/w9oOW6yPt4gdRL1/VDtTuKGYm7yVvJ7+QKQNrT' +
  1037.         'QoTWNZub/loH9hHQNfal40U7+0/qThkminG6NgHURBBfFogSWngzb' +
  1038.         '+atn6sW/+ubu197eq3BCsuv3Ysv7IvvXKtvOnY+an32c99L/4MeiT' +
  1039.         'I8/mfGza+Q7LdlCtv9hK/ROKWrR/wabv7EsAV8guBxReHcSBzH/Ee' +
  1040.         '4H8K0e3Zl66nfwJjk+UCEHK3oKOK2C9r+XXbwx9R4gVezeliUwjLC' +
  1041.         'ESpWux3X3bu/L7r8R+6v/mP3qd/giSEIfAbpqMoi2CqPSIKjFM+om' +
  1042.         'GSKsmK9L78KxQIAwRNBuZ5gAAPkV7fq781bv5ANNDaO2get3d985+' +
  1043.         'EwSJt1sF2cd3bbcTa1bcdj/4ADRNKfv7zbu18t+zW0Ue/Pc//Qt67' +
  1044.         'e+PevZ2P/7CvELTOngnof/0P9+bv6tYJYfxl+RviI90AF9t3fg/gi' +
  1045.         '7/1ARRUt/otAEMM4AsyxGfnkz8GygyBqabZ11uOfRwFEcSnBZKUQP' +
  1046.         'vMppli70Kxd54NtJCYw0/DzDc1809bH3zf4aPHnqf/CUIo711jkyk' +
  1047.         'DEnNbF7STj7RjWyWt8yzP7K8Bxztvnfumdes7ZN6NMf78Z4xuDG1y' +
  1048.         'RPe9/jtBL35jtPKGtC/V048qRx74qNtwCmAbgdMETMCXxaYzHPNZr' +
  1049.         'uVcifU8D6i5wLdd5NtiNa3W2cemmUfx+s5r4vrPGdVArLbdOPmwef' +
  1050.         'W1Z/1t09ob28Iz6/xT2+Jzwlgcslm7TAXr8PxncBFYiGRCvyd8mPz' +
  1051.         '9VrV+43vwdseT/wRjG2efWhZeqCd2XCuvYW6gUmTrurdryEgcID0f' +
  1052.         '4+FGskXINlKObRtmHrdt/0jYrCd/RCbIoWp0m9Iu+ukn0HDN/DN8E' +
  1053.         'ph/WrPwnKwgTCEYGDeiRrgXKcV964Gonn5iX3jWvv27rkc/QU6idW' +
  1054.         'D6ffzfcP/76pmnpDD8ziV+xzKB9iUf7op6VjS+biDsWhZ07qLU91n' +
  1055.         'WfQ9/AZXDm5qJHe34NnpX8/139sXn6vEdw+xT/eQOYJh7Kuy6pxx9' +
  1056.         'gOsQwLv1vQN+xfJrv5/gVwtpCI59HAURxCeEXXf0u/8Fbz+/biJc2' +
  1057.         'Xqebycp0Y+qsW3d6P36xW/cKy9Aj80b3+omd6JUrZRkJIqaphV998' +
  1058.         'IVzUf+S+Ik23yaYznLs50vdcRoWnXD63ULT5ruvfTef9fhIyKCVN/' +
  1059.         '8o/fFX6yLL5VjD7/kWkPYRgI+qgdOFhk+kv+HEFHp0QytaYfXz3LN' +
  1060.         '+PmZD0mGbvXgas3kln5ko2pgTT/1mOtdiFJ5L5XaSTtynme7JW1MN' +
  1061.         'vWUtC7oph7rxrehAZIM/aLC/yTJn+L5k1a15eEf9DPfKEa3TfMvtB' +
  1062.         'OPQICutffJ5v5sx7B55jFq3br5HhYnRt1KhiEkCurG7HdftD/8kWD' +
  1063.         'dJ38EOcPqXRI4/dU5x7MVe2YtM4+b1960IJOt70Dsop5VSq1Nc8+r' +
  1064.         'BtfOQHtFhn341CjsXEJ1YO/Ie2G1KfeCh6vHHzQuP/cgzeZ7wjqD/' +
  1065.         '1/8GbEGjBetYepDqk7Qdyr6VqA98ieaO/BfCIAWhPzR2vYc54h+ak' +
  1066.         'c5tA4YZr9huKeLmmdg5aO1HfHVPbCPquGN2sVvTFMPYSnU4w91E9s' +
  1067.         'wEx17aiHMli+WOfahFEQQnxBIagJrwa9WDD+4Lmn8bI8S/aDVTyi6' +
  1068.         '5k2DSzXjG67Zh8aJB/rpxydZxsMpTxQZ85zD4va5MLn780P/Honr5' +
  1069.         'S555xwyt03er194At+7bfsHkl7q19+ZF15EHDIxKOVLbs2vyZyCiM' +
  1070.         'omafu0rGP2isDuFy/N3CfrmJF3zMALhZUJr2r5iO04xTYzGiaqxzY' +
  1071.         'bl57BCLY9+B7+NmiHcP5J8j/45JGc4UHkYpp/zmu7m2oZqL//fajc' +
  1072.         'c0vWjKJV4LHR+665nbqFx/qxzZA9cxalbq8YuG+9+7J6Ytt97yVYF' +
  1073.         '9YBaoG7TjK/v0b0hgkYMufMdu38o4alZ4bJbVHPPYrmTXNPJd2LZz' +
  1074.         'mmzxh6SnVuyZsQNehHN3A7BEAM4rcpN2RNqdbB6pknyr5l6xhRBEw' +
  1075.         '/0Tq+KiP2gRE8XWz+kKrjdR3i9tnTbMOR3YAsJfD7zYp61eiWvP+e' +
  1076.         'dvIxyr2t8ISwTTG6Trj9HM+srPuurGcJ5iDLMWKASLARE9vGyW3L7' +
  1077.         'GOYLYgEQ3zsQymIID4V+B3+kff/Vbv6bZp1IFbfBZ//EGE2C5vHpM' +
  1078.         '2DqvZxQ9+Cqn+5om+NHLlg4CuiultyT1iVF/HC7coWbstsqXv0tqz' +
  1079.         'xVzL/lVKbsHFQ3jSg7Zq2jNyrndsBvWAgtz380TD9RD7ygMzniyIj' +
  1080.         'nEBwQqKpF8SIQv8nzK9wl9b1CRr6b0sb/OJlWPuE7iFB02hh7Rhc0' +
  1081.         '1/M5FRRdWX3gnV0DUbQvfwcnAznkyD/N/8YefdvytokUrcIXuAhV4' +
  1082.         '5ug8rClV6Yj8+IwMfkWHkj6VqAVa3qWazsWQwpqg5UGq1hQj2wYpu' +
  1083.         '4j4JgExFwmaZ2LgkcB9LUj+P26t5509BSzdi6dmitrGuFonlQZVnL' +
  1084.         'VAhTd2SLlHUtSzrmdL2EDMrRB5Q0uslHFd4JVdu4vnfOMrrqmt1Ba' +
  1085.         'Na0/hZBX2bN0EeaOE7bznePnD5Yo48Aye6o2+RD908VW05zrFAOLp' +
  1086.         'J+SLy+2zL/3LrwQty3UeSZy3WNintXIxRNvLYFxeC6YXwTykFUcuy' +
  1087.         'jKYggPhX4HX74q3CoQljGI8fpFyyDov9eia1dWNMia+yVtk1l2z44' +
  1088.         '6tPN3WxHd6K+nZLgFNt0jmc/7KvfqWxmW7w8Y2NFXZe6fQLkDwcY7' +
  1089.         'rR98Tm8yjMl1PTwRU992NX8BeaXu4uMTSxzS6JuX7xUQxe3to/XMv' +
  1090.         '05Xf9L7KQ/ydCdKdKVN48o28YM/Yv2yU142q2b77uf/LH/5V+G3/4' +
  1091.         'z0O3Hl/7X/2jc/AG0D59f2LOKaCWwIvBg2Z4Zfuu8avh+WctkCFN/' +
  1092.         'gNXrxqBqTecUrC3U4pja0o1sXAqIVsg05c2jssa+qpYRpKzsnhd2L' +
  1093.         'lGZf/oRr37wJENLcbM/ZxqAK2W1qpFNUeNgedNI5fAm5V7txEO+q6' +
  1094.         'fM5kW7o3XMwysgf9PUQ8XwZmBddrNlGvaZX+Nl27tPf8DcfAgXBE7' +
  1095.         'Yd/9PwqmQNfM7V6TDDy6UOmD9YQvQi+CcAJKBDXHHvKprFg1hHlo+' +
  1096.         '9tEURBCfCvaZ/+0/ncuvP8T8AN87R9PW0RWmEmOjwD1yU1L/oZRpx' +
  1097.         's4CvZvXPJ5h6s4wE8i09ObXjrO9i4qRbX7XvQNcQdcza4fyK2sKpX' +
  1098.         'puda2kvlvXPWObvO9a+EYztpXtOGBf7mjaYwJogYKzPNvXUvfHiSV' +
  1099.         'R25pXWVOgdrHcE5/t8Xy4rJFbOxCj8n72S8z/VZmzpGGo2NFdYm4W' +
  1100.         'OdoqPUPgZBAy3GAEKb3PDrj9wMCbf1rvvrQsvFCO75T1rPE6lkH1/' +
  1101.         'txOsgi3Fgwm7F4VdSyU1A2c55oDybOwblRQ31/ubJe7+8G64DdEW4' +
  1102.         'nVnQh8wqu8ZGhWUDvCc3bxTO4yWwu0V9EyIey4e8hv32HVdJyka1D' +
  1103.         'BI40mxzNbbO/i2jrl/WuUezVjD5gGN1Np4RnqYZo1HZPGoZWqgdV4' +
  1104.         'fVdgyqvl9czmObp7JsTnqwOxqhaa0QPmD9QqmvskTQN8yMhmwhS2z' +
  1105.         'PvNPai+rHcdrr514blj5W2KZYC8Dv8BZZV2rZR4poX1/RBM5u479t' +
  1106.         'EURBCfCkjmH3n/X6Asx/KrENbRs7JASnVHltSYXlLB0NXJ+1ZOMD5' +
  1107.         'IkmmG9tQybRJPkVamSS/XZ8nMDEsbXEcwQ7ZzNFTu8acEjTOcA5ky' +
  1108.         'SzyNl84pp8sNAmszfFf4b9Vj95UjDxjNc/ukwah2LL8+wTxQln76K' +
  1109.         'Rxa3fgWYJp+FKPrDPw3ydRrmNrRjm0BujEiTXnbTJpQnSmulnXfPb' +
  1110.         'dHL6HyZv3Uo3MHgwtQU75jSDm0YZh6pBndKutYyLEPXhI4wJ9fMlR' +
  1111.         '0XR1LbRfZW5VeQloEKd7777q/+Y+BV3/zP+oF3Ju/U449ZHrmQthU' +
  1112.         'vj3BNIRVeWnuGfvKO93EQ4axhVHtDqFrA/Vf4BxGeMLWOPhmd0VtJ' +
  1113.         '8qSd87B+hxI40IaDywyW21DMmHDgKB9kcr849s0g+ckXQ0SBpfGV/' +
  1114.         'dQ+P+auE7Rt8wwe6W995Dmiqg2rWZI1LvuXH1nnH6UV2XLKpWjdXj' +
  1115.         'GBnj+lZ2ziqGNQHWFV3r4bQv81lnoCqpm1o8lar351u4cles0UxvI' +
  1116.         '/Cdp6hylM0thk3YuqEc2I5StFLWEypt0Ezt++5hs6ks2dIm6lkrqB' +
  1117.         '2UDa36xEW6cKrZATqiuyNhcpLQWax3HPpqCCOJTgX8ievD13+1LLz' +
  1118.         '/C/FdLrZmKmrjCktzKmpKWmY+E8Kn69pgi0bXI+NDknESuNFthozn' +
  1119.         '6Txfv+rf+ZBFVLcKWySSB6kZ8elhSVnwhJ7esiqt3wXnT9S6AiBKr' +
  1120.         'D3iV8bp2+Nuk4+q/KO27ly61xBaVo8S0CtNVviXw3ziVJ6W8Oooui' +
  1121.         'KYLkSCuWBJfXHEnhxlHK8lX12ZbukCGwGWepXrqEcULvaP00E3edL' +
  1122.         'E+RaBMKVUm86vAV7Keu8mm3hC6Jl9pL5DoEKRI63v0vXPOmW3P2pu' +
  1123.         'uRz/tT/j43kFo3PyB3TIHwNv/4tDcyGe+FS8FDVNcz3SuypWjqAk5' +
  1124.         'WLt852ChxpVXrmZWmvgmYjaswjtxiV9z0DoM0TS1OWVVBRUalqoG/' +
  1125.         'n9p+wJ1xmZsK09dd5KmIjM/xTbLR7YDgwuA1zLLtLTL+lYpgQ9sH8' +
  1126.         'x3Ar0kiy8rUlqEjtZy71SMps1fBEy5ZuR+kaUtR2HNlBizq+yZCls' +
  1127.         'ivyqWWRbPkWRUt8bqOi4JXXDjT7FNIXR1fLHk67i0aFppusQs6rxL' +
  1128.         'Ke6a0Janc4vbZlPNvVmWHnH7bL6ukekakPetOu99i8iCTBat7Shsm' +
  1129.         'OJ3rkB1KDeNU55ZIjn20RREEJ8Kdpn/3b/B/La7+8x/mKY+p+tKm8' +
  1130.         'YTMJbF+mR9+0cmRmjOwcgC3oUbYXdofKFnMkHjxb2BCb5gmUo6lq3' +
  1131.         'zT9Nl1ssRCUj5dXRSdBY9kydla+ziup6K9llR13IgfZ0oMpR3LoCK' +
  1132.         'ScfVfx0Xowr4Z766eebqDXy5wjMF/htb5Q7P456+ch3/opSr4TE34' +
  1133.         '1Ij0nLj8lhp3Io8BTHtA+QrHTSj52yxIfDea+W14o65NIkpjl0Ryx' +
  1134.         'JH0wWhaflp4mo4qykaT5bEkC2sBNOWO9s0nVO2yftN91527Py+78W' +
  1135.         'fiTcR9t4w7X3517q1d7rJndLO5S+5NTH6LsrcOPjQNP9CPbJRZO+B' +
  1136.         'iaTULs8+kC0zpxaLYBNZSquwxlPeNEJhflgHmCFQH9xymlTPqWkrb' +
  1137.         'ZsPTACGB/NnVzn8yjnJMsmGH3Da7vqJFLglc9sWnhnnX1Bas2pwLY' +
  1138.         'lfeSeLlswshXEpsbVT8r9YYmHVdGQJlalCVaa8hl03VN46DYOL1g/' +
  1139.         'PoOeo61KqOy+X1ZIVP1mojGaUXQ6PjcjlII2oY4HSkW6LXbDRiXwl' +
  1140.         'x9WPBITaU/PQCoy60abtnxCtQGNw9WEuLYuv1BOPJJ1ziC4j0/OjM' +
  1141.         'guPfTQFEcSnAj/zD7z6m23xhZ/5QVN5dRPZzjF8+smK5hyI58owuq' +
  1142.         '+W1nyE+Qvs/WE5bJBtNEMYJW84nBIEyOtcrp55KumYjWFLLoZGfRU' +
  1143.         'RF5VRkM4Vg0vL6vu149s3ZQdm7NPNvQxTS7bcGrLnuO4yf8dCWG7x' +
  1144.         'qQtXTl28GpFf4ie3a+J6uIV5NX3heRz8debK1xdvhF+LikdwEZPLT' +
  1145.         'CkSwIOFLw2/PV+izRWpClTOKEUjRVTi9V6FO8/WJ2qfF7dNp4j0sA' +
  1146.         'KJXHkyT5HA4MNOwRUvs3lV7eM14xvulRcdD3/se/6zn/mJHTDe/rP' +
  1147.         '3+c/WhWfivjVB53K6bTAw/0tCZ1x1D6d5KlVsAE8m8ioptcuz96eX' +
  1148.         '6+ILudAMWJ1nqBc2Dl7iWQ8wv2MwR25JYvLTYCBESra5hd+6y8znf' +
  1149.         'A8+otTturGtDHlNoqbFn7l16U3bN3+K1XcHyqOefGxf+ZbSWJUDa4' +
  1150.         'iVbidlxuWzc0SqYkd3hqXvwAx/qQ3WM6NciwguUdt6Weg0zD7Tjj4' +
  1151.         'QNI+BuvOt3fqpb5yr78lFU4g7UkTViQI1rEPVwBriPkpxGcZONNn5' +
  1152.         'mxGh6bSrEfFXbt9B34gtEsEZYLhnmrZ+J+1Z0Y0/MEzulHXfk/Usp' +
  1153.         'oh0NxIy0LLXoxOPfTQFEcSngg8xP3wqtnex4+nPot71W3IPucQuut' +
  1154.         'KdrXIJW6YoPvypvYd6JFJ03tCsotOXvoqmC78W2j5iI8IUHm79cHy' +
  1155.         'J4npsKtw28FuR2l7qHq4afZDlGIFrt5t/sVnSfTdbakwr04QUKinM' +
  1156.         'fzubHXL+8unL16IKqT5/nM/nB+2fvx4Khz80IT0mh5HKLoMLzZAb2' +
  1157.         'WobR+fkaB1wp5n6huLGMUq9CCA3H85wrUn6tpLGkQypGU5mAp2XWS' +
  1158.         'JhKMD8Laq2sZqxdfcy8Z7pLvP7XunFJ77jCqKbktZ5ae9KkqHrjqb' +
  1159.         '9sz3bGqPt0I49KHL0hucUwzDFssoptcu19aUK1ZAZpiq/XA1pBXX9' +
  1160.         'VOa3D2ZJjXGFHPjk2aXyImOzn/n90IxuIrwKzDzJ1KMa3lSO7QQmu' +
  1161.         '6PpcK69pzJ//z146TdikmPy2IW6Rmb9aEH95AGjbOopqG7KVbnEXX' +
  1162.         'fTa4ZKu1dvyJpQUIS0DuaGUiNoGG4/QKj6UMc4xTLwGkdupdPQec5' +
  1163.         'du3npVsS1yDiEaZEZhZkyC7dxjOedLTR6kgVEcFFo70VvvJGQefFm' +
  1164.         'BIDExz6aggjiU8GHmJ8Y8mM7jVs/JlsGvt57t+tLjsUy9418aDNwt' +
  1165.         'N5WeM6XOgKvJGu9tzKYBPMzhDfK7B9fMHOKZSyuH04p00XnFKVzyl' +
  1166.         'nGpqqh9QsHXyjIdw7RjZ54Gi8JXvEh5ofPD9o/+xURYlzhmQ8wv7I' +
  1167.         'pilYKUr0SFn0zPi06m5HGLssXa9gae6nZXe5sq6jtFLs6wN4lJnex' +
  1168.         'vSuzpu9j0tL1Jxj6dGOXuG0GLm6Gj/mFNR5l66h1dK3Rx/z+5T2Bz' +
  1169.         'G9ffF41fF/Ws5TrGJINb4MeCe419wva5uEVh2UVXbgVef7r20cyf0' +
  1170.         'qpMiqzMJFeAmtFiF3Xd5j5MysMsfnsJAYPgQzT4D6C+Ufup0nMJwM' +
  1171.         'yP83QZFU5YMop9VVNPqHUWtG/ApMKxzuJJ5d134VLH3LQ0J9gGtSj' +
  1172.         'W6bpxyVti/AQTuw9PgiT1IKfz7OrqSoljekh9cIW5Fs6Y9jSs9dvf' +
  1173.         '3n5OsgcnjxijTtZtPiC4mS2qEDbkGXtlXQtpAqIxy5FdSPlbdOQDe' +
  1174.         '0L7cG4H/toCiKITwUfYv6wKm9Jx7J+9lmuazxweBrmXlTPPQ+8wm5' +
  1175.         'ZCGT+CFWrpGvRz/yhYidBmMzqSyXmr0qtF7lmil99osh4S+ZGLJ/M' +
  1176.         'r0wtFsFlzbUPBhLXeZ5N3rucVWGITMtL4EgPM39Efgn8QxBFHFt8i' +
  1177.         'PmbY4pEVyNib8SmRGUUEJ6zWMPVu8TO9krPkLp9Qts1remcAnXLGn' +
  1178.         'tLXd2VA6vs5ulzXCuVlJiGkyzT7nYTfDvIP09dlymoROAgsDYrvSO' +
  1179.         'W0dWGpWdt2z8cYP73/0Uw/4s/e7e+t8w8Ug2sVA1uqMceSAYI06ka' +
  1180.         'fyRqnY7M5567dgusdSk0Mr5YQpntAfOD4iB5Io2bI1CwVDX82l4K8' +
  1181.         '+fZBzIqqmNyi5AGYQiz2s3zzh3N/AUBzE9TJZSqimsHTxxsjiRzH5' +
  1182.         'X5+1YQN127k5Qps3Kap09zqMoJr/IymmdD5Z5LQlfg9dsVrowjmf8' +
  1183.         'oQOc0ey9o/8trt9BzwOSg/fCUnLh8Now1Ypk8kYqurS3vmKe5hmEC' +
  1184.         'MiUmSc+yoHU2rrjiyu07aP0LN8KOfTQFEcSngg8x/y25BzF71dhOq' +
  1185.         'MITOEJFfRs1y28Dr1iX3lB8/sq+FYL5iekXXq65Q9S5CF8xX11HrP' +
  1186.         'BU2Mpap8k1+V+wTJeEzstlxJQOxz2RIlQlFwkY+sYvWQfe+ixunim' +
  1187.         'ydWVKjIk8RbrUcrLwADdKe1dSRPoIUFN0ciJXdoVHXdsTz5GC9sEh' +
  1188.         '8YUckCfxBNnZrmobMw7crRlbt03et01sWEbuabvnJC1jgoZ+rqsXh' +
  1189.         'oZZPxYmrf/8AytXTxeb+M0TOTJzoVTPNzUqmgfNQ8v1i8Smc71P/z' +
  1190.         'T4+u9+5h9++8/+l3/pevRT8+rrmslNeceMoGlUNbIFIXVjDzJklq/' +
  1191.         'j0i7fjkJIcj06MZmY51cf4fNnFCQUcrNK5UVKC9/VQ3nCizQZYn1M' +
  1192.         'LhNpMkoqoECuZ/bAE166DkFKitgQyPynaMrw/JJYjjxe7Qks8dSh1' +
  1193.         'afy3pWwHDY0LO2cP8Pdf8EZzXeKbbpe0eCfv6LEAlHy+gyZ9TDzR6' +
  1194.         'raD6uU1zKbLrNeuH0n5PxlhG9Xw2Pg7cPVz+RJabJqtFpJdR3iMrR' +
  1195.         'OTk0/GohW3STrXiywDyTxK2/EJCMkAf8f+2gKIohPBR9i/hM+L1fU' +
  1196.         'u05vmg0coZLBLcPCS//Pi3y7df4p3PLANHTnYFgeNyyrKIYpwsBML' +
  1197.         '9dlinXJrLK4guKY/OIMiamiY/6a+MDeC3TXECgugcalaVwhvldNL5' +
  1198.         'Q6EHcQ+8bMPhV2LIra53me6dLWOUrIkGodyDR3Mx29MQwhTMOVQ6s' +
  1199.         '6cREcEp1FT2WXgUNIF900tOSc2YaX7l554V5+DtLWDa8pBtbErVMi' +
  1200.         'V1exxQsx8rX15W2zrIaxOE3LqUM7FKUbO7Nl5hyRkqNzSht6Df2Lt' +
  1201.         'XM7lCX95JvR+Nnz9D9bN9/XLzwxDt6taB5VDW98UWSU9KykibSQ7W' +
  1202.         'Z8WmhCekRaLgg8hLq2pz9FQDA/zBYxk1Nl5jm7rpTaAok9w9wDkxq' +
  1203.         'dzQBPEu9E6OpZjROBCb5k6tIqDDEsceBsD6zA7Wz2zbRCbv3QicNP' +
  1204.         'NwIg611GVJUkUGdbegNlI7b1C1gXeuGg9QcipHUINM6z9ZR5ftXIJ' +
  1205.         'roZJfFlgVPombiZXgiH4eKNcBjrmBwGYcgUJvJdBrm7HxC5h8RdS4' +
  1206.         'yGcbati2H2ple3pYt04am50GHwCW8QQfx6fGSeHyjrXTcG8DyQaOy' +
  1207.         '9VtHg/5mk9WZW2il+XbLWm8BXMu09xXVD6RJTbAEHlJ7M5CfSS+Ly' +
  1208.         'WLE0Xr6uMVJxYOlOsrYVFA3HNa+SWNNOfVlg7zHr0fMGdH2BYyCuW' +
  1209.         'JLMr7zKt1KYHxfJZZzwHlmqGnCIrnvGMbVF7rfTtv0DgC+GyW3t5K' +
  1210.         'Oq4U2Rd5Lv6mYorZmCyrQyTTK/Kq3CWOaduix0BhYaJqkDUWeUSMD' +
  1211.         'G5c42Xde0Y/oBsaT/8R8GXv7Vf76Af6q/Y+f3TauvUK66c1rgHr1e' +
  1212.         '7ippmc1RWGPz2SBtVDyRxs2tpK7nB/OnCtVRmYWE91siYciNJfbOr' +
  1213.         '8tdgfrJtPTmKB0xUGxuURq3AnxImS47U6SLK664QxcEMv/XwprwPO' +
  1214.         '7Zr8PieVUJAWt+jmT+eL5S0Dz+kc3ZjkS0ogGBBpg/0EBAhiylM98' +
  1215.         '+cLjETHNXfEnlhVAiAgpLzkaHKZBoyXfHNB2Thr4FmFdN92x563SG' +
  1216.         'pRfWk+3ozjS250KHeazItDzY0GMfTUEE8ang48zP71iqWXh+eN7bD' +
  1217.         '07jGGjhPPvAOo0sU2eSUHtL5LgqcsFtzlU6M8X61OLyZGYpPP+cKn' +
  1218.         't5+1xR84FQIs3QnsCVRabnZ8tMFPb7NaA5B4n1lkf5/P7ZkhyBAv6' +
  1219.         '5zN1nHFyqW3jccv9d5yNiw2Gg69FPlllig2JO62JR0zScUq6zF24/' +
  1220.         'ZL6TRYvKZeVq6lONBxZA3hA5UoWa5CIB2KnU7Fa2jtaMb/iX9BM79' +
  1221.         'u8t6SfdfpTSuvVdw92nltFVSetkvK6twDUC/zyDJ00rFqVzxdmlco' +
  1222.         'a+gfIOL7NhPEflggHKrKiGTWToGzmu3sjK5gPWuWcN+sxW2NJFWsQ' +
  1223.         'plf33Lh+cbz/L0kE5FOa/zDVFFfDPfnUjLIfNaxz9yBvZysF1GPc0' +
  1224.         'Q8d/t1GiZPXJIj36xkXBfjhwsqAqoVQlapm4JaPus/FFkYHnHo3nV' +
  1225.         'd6IS9td4qu0ip3toH3z8AqMJsI02+T9qp7FYs+stH+NVz+Ya+ku1L' +
  1226.         'iSWUJYdtxy7KMpiCA+FXyc+Zn1Y/l6N2Uq2I+QIoOgaTSmWEph/hR' +
  1227.         'da1KZLlxSi4vnSmpY7glZ990CXSN8WnxW9q0oRh58ybUGuoIc90R8' +
  1228.         'sQSeXkZF9f+E+V1DxOs/XBnJ/ORU1alic5K2lZgtIdfGiJQ8Q32lZ' +
  1229.         'wjc27j8HK4+ubU+0PvsZxg4zcTjHNd4lLr9uri+tGOxanCNZmjOqj' +
  1230.         'BkVxKm6pLgwHKjOwo3oom4gmIYFK7epWgaMA8tNyw921/YSR7U5Xs' +
  1231.         '/mnzOC/vSsvFt7fwjcFdh7WiyoZNT006XGwslOppUz6w0FVu95EzX' +
  1232.         'FVFdmm9LUtvKW8XAmrRnWdq7LOu7p+hfrRq+H7hDBXQIgTneeZ53t' +
  1233.         'qLzLr91NlTeTFHOV6VW35towsCH46foKly5eDPiSmR8Snl1ovaDex' +
  1234.         'Y57n1bNbRO2TTjM9+GD4na1gS1J0HlSdR4I1Xe/Y7hm/C/JbLDATj' +
  1235.         'POtA3wPxhedxoVgW3fviLQ3lGqlrFbdOxRaKYHEZWqZyw1I29xM5I' +
  1236.         '0w9gNN0rL6Bh/cgGTHO+awRhSKGjn2lwZ5bKESAgbjr20RREEJ8KP' +
  1237.         's78NNdwpryG1TB2JC1EyuqjGKIb6QwK8ydrvUki3f5Kfrr+PN+WpG' +
  1238.         '/Ptw/m2AauB0wWkTjDtYpbp2MYwtCEdDiuN0XOI4vzkTmxf68PllP' +
  1239.         's/aNVGK6haEYZbMfhJ7xgfvjtSQxefrmab2pUekdqxtZ3nXPfpvqD' +
  1240.         'b/4x8PKvtrsvq8YeBm5lCZsVo/Ik69rwSW49EQhm3UgiVx6dTcxFs' +
  1241.         '1Q10voeQ/9i/cKT3Ye8b/7hZ35yzoc4ZebZzx0Pf2xefa0dXhf1rF' +
  1242.         'wvdwncIzxLM7e6FraDZ2zgu3rIjZT9u9MQk+eBM110PWXLhX18eDY' +
  1243.         'M7npsUTn0E8j8ITQVzMHViNhrkcR7UqWeicPPMkg0bP6YYOhBueBz' +
  1244.         '2OvzPPsloTNG085vGk8UqMPzOKHZ7AS+khOwAx6Jm2W2xKOYPzSrK' +
  1245.         'OTy17Fcebal57DAHPdkhtQcV1iCIIg0qYjRaud2mlZfIUzzrL+tXf' +
  1246.         'wGcU2ufbC8fTbPPsC2ePPK1Yib4gs5xz6aggjiU8HHmb/QNZwhswg' +
  1247.         '9k0fOBhTY+64l515Pzqcyv86bXF59gbKo48PURKsdhtt5Iz79Znxa' +
  1248.         'SmkVp2GkxDvLaZ4GipuIPW3KOhZYDeMwQJymycAnvFmOEcvCS0X/P' +
  1249.         'b57NCKPG8euoK7q9DF/dBad3HmAnJaxTWyARjof/Z48SwsOOepuX3' +
  1250.         'oVyPwfl/mmtFHcPhPHKo/KKEhjlzGrzGJXR3XfPPz51s33B5jft2N' +
  1251.         'n4KNexBqmqYfqsQcnGNUV3csi95DI0Sqyt4qd7cLGwQ9tof8/xpcc' +
  1252.         'i7Bl8g6NH8OkMn88R3ozLvVWfFpkJi27yp5h7j6ydRQj2+SeooGIh' +
  1253.         'Z9fqj53Izzk/OWT5y7dzmYXN44fZv4EgeYw8yMxbrmVThN5JxFeUX' +
  1254.         'KGk0Duqrfr8/tm56BYj+/UsLYH3yNu0o9uMhomalffZVr7S+ydhbL' +
  1255.         'qTJ4UYd2xj6YggvhU8HHmL3AOJfGrkoSa2xW1lHENBi6pH7oan3Uz' +
  1256.         'jUad7dG3pooNCR+YI6Ig1dxf0T4bTSu9ficBPn9sfnG21JCvchRqi' +
  1257.         'B11citrMisMqUJ1YokirrgiTWIKXNUZo+usHFxPEmjCsoouh8fEss' +
  1258.         'qP8PmFKuIdWJawUKITWJtV7eO2yfv+R7Hk+a3w/F333iiGt058yKM' +
  1259.         'OwCWBHVyaLNSEJmXvMn+lKZD5Qe8U5ifnfMgVnt1P/ti0/lY1tHG1' +
  1260.         'zAniKm+dljYPgt+A8ubRX8P8X3JrBN2rV0RUzjwMhCqsOuItuWsxy' +
  1261.         'TFM0ZmAbTNP0lTJ/MrwlJzI9HxiFU25tqJj/mzJEQ90/G9SB0LQOh' +
  1262.         'Oexz118eqpC1dOX/oqIr/kSJ//qNkeJbGT0uVrF0OjEnhV3IaRw0t' +
  1263.         'n0wyduSpXlqCSrbZJ6ruhWNfsQ/IsMARN4H/j5Lagc8m1/n2cppVf' +
  1264.         '28uoMucIFClFgmMfTUEE8angF3x+5xD4IbaoPO/Qy61fC2piiqUhl' +
  1265.         '64jeKes3EvRt6WIDWUtkwWOwQ/NIZC8hPwlnXPk1ivEqvvU3PiC4j' +
  1266.         'SumNhIx7ejTrawMo1THl/IvZNFC0vOBv9f4hzYV03asxxRwDt3PdT' +
  1267.         '3JpckUtZAYf60Mk1sPjutWESXG8psLZqOScfU1v4inLc+5n/zj45H' +
  1268.         'f9BP7Uj618IrPUdy75dc6xfM6qhKt8AzAdr/Oi6NfCmYnO0BQRn6F' +
  1269.         '+sWHh+Y7Qk4n2V3W7w3/+h7/jPCDdP0Tryu8zTHAudf1jZV5R1Rek' +
  1270.         'cqvBPhv+IIy0hVm235tX7iQYzKc8R2Ez5cFdWmm7pgoaDb63GpVyN' +
  1271.         'ioZzU6o4A5ldDM5A/Lp+dzORn8KQ0QzOj4YDffvhoNhK3pI0wWKFZ' +
  1272.         'zDNXvibfoUMPKfFMUXrIjTIbQj+KV3CyUBlVyL9wI+xSaCSivHSJK' +
  1273.         'd1EjTVgC/ieyUJ9I1NpLXe2abum7ZObTfdeEsy/8/v27d+ZZh5pJh' +
  1274.         '4VeeYS9R2Chn6W2p4nUqGJj300BRHEp4LAvTpdK2/OFPsO6Wbq4Xy' +
  1275.         'epGszje0ppVXxLDGnbijEt93KLgqUiVX1GPtfXr4ensO+yFQH/huv' +
  1276.         'qI9jV8QwhHDRRa3T4P9wad2lElOYpC5J25pr6wchM2qHy9tmM2XWe' +
  1277.         'HZFaHLOzbhU+J8xucxUdhlGMbxotsYOMKvMBRItAn9cTyjkpgnVpw' +
  1278.         'uJbc3gspJllTQMRxaUXLl951pUfAJHcoVTHeLbeJlEtKw2Q6RNYvL' +
  1279.         'JHYbJ5ZfOme2WjW/hexML78H83/6LJGTP/ffGyYfy3iVhx0Kqoeuq' +
  1280.         'wEbu2wx2vcK3FjoHJR1zaRXGGGYZKOtGTDIEhkjEztLVtbtPeO8+J' +
  1281.         'V/j3X3CG3gm48E5H9vCs3zXCFRNrxut7JrXdBIHb8nap2+IHNA8oX' +
  1282.         'yG9iRdQ9SCpvZX9qSv4jTXsKhtNkNmAW1yGkbSjZ23yh1nWbqTNOW' +
  1283.         'XDM01QU2yvo1VOwRRY5mim4mZCKYgLZRzlq4Moe1q5lKxPlOsS2Tw' +
  1284.         'oFgoJ79czdDVy3uWUw2diZrWOE3LbbEzUlaPQq/wTImallM01S7oq' +
  1285.         'nxrVzxM8O0YcD75fnQSV0Z39BKZ09RoHTQBPm/wjUll2ssszWn8pB' +
  1286.         'NViKl0s1wDZHyHFocpT+FXittmr/Ktu9Xcw02Ro7R5nKGrI7ZFah+' +
  1287.         'vGVtvXH5Onv8O2Oaf6qceXSq1FUIV7iGuvo4m1WfypMc+moII4lNB' +
  1288.         '4P78HTs/Wee+0Q2vy7vmy9xDHGtrgcqRVCQkdgbgShN5ikSuLJ4jj' +
  1289.         'Ssmdi2+Q+Nfi04i9j1OyIgvrkgpVaYK1alCDT6JXXMzCsOSsiIzac' +
  1290.         'm757PoiNXve8DPNJEW0URUFh3DH4hMzyd2TvbRPrFHgdldZvOKHG3' +
  1291.         'CGg/P2AATwJAbwU45Zco8hTVHbsmsMCCHFIESRd9OyQlNSEe8EFvA' +
  1292.         'yRRX51bW5CvtQF5lDbHJG7cCbnlBBbFpA/HKVd8C5ZUrgFx7A0pxr' +
  1293.         '7ywjG3IO6bhSXKcPYq+Fc3olqRrIbvKjgr6ysol58ZRHARO54rJTd' +
  1294.         'vU7RPE44OAVZ1HHMXuX+fz/OfWrR+ss4/1o5vaoVXD0DKk0vfOqbt' +
  1295.         'mUDQ8fyi/xNHFNLhRi4yKalTTp3w5AXzhKSBJWGoeLGYss4zcRBpe' +
  1296.         'Nz7xnTiDAG3EKiftKQKT20mZkWl5cYVcQjmKPeUorJmlCnB+rkhJk' +
  1297.         '1VD5xx9HaemlWVuYegboDo0UxK/EhlG04Xw0iMLeEBUAR/fI/K4X9' +
  1298.         '1JJDmftNfJbFGuwkJkW2XLkZlxL7oBIWRaQQyjzHcsAiFVAvoPWxy' +
  1299.         'eXgDtEa+eFXJSOeIcuRlNRrSpxJherkezontkSY15ihp6lXl/c4y7' +
  1300.         'T9FqUC+xROr+d+bpHe3welX3gqx5CGlg1lGRYx9NQQTxqSDwTC44q' +
  1301.         '61b39UvfmMaWlZ4hkrNTXS5Ef52SpEggcaNzWfDBGDA3smigagj0n' +
  1302.         'IxfvElOoseV1AM7zGZJSRQJMB3DOr4gmIAN+InvO4kZik+8R1X4go' +
  1303.         '5ZG4xOQwgzrfbGMHPEi1H6yCPfMV4V7WN4RPutKS+W2RvhTkAexcp' +
  1304.         'rYWy6hyRMr2kAmXFF3LBwCgIOaRzyrOFlfkVmkKpvkCiyxNrkAyEg' +
  1305.         'GyJzZ9tLVUtI5aRe4Rn/uB7ck6GeOXq3b/9eyx41t+6Zh9W985LG3' +
  1306.         'tLTG5mdWOB2pUtNcTTeP5ag0VRZVQQtF8o0cEwyd395Du8LTAoZCj' +
  1307.         'x7b/857AH6nnX7X/5V3J5PwyNa27HNnkfUpmGlowDdwn+75iUNw1A' +
  1308.         'CcQkRrkaPjl0RZSelofSSQEAKB+sC6MJYg9NzCCB7zC4uEj862+dP' +
  1309.         'BahHK44p6wqX6KF9kjAT4Y9ZSmtiFlAngiIRI5WgdXD0bnwbwZPCt' +
  1310.         '1GZRQgW4QM8NIRVZGbIYPwyZeOCc73xVMwrHSFiam04BNFEMssWUL' +
  1311.         '0CpQelVmITPCJKpDvrJHNjcbKEVYW7MmDVssWKNK4YrIXkTN+kA16' +
  1312.         'ULaOgvnRLb2+VzC6Hv8B/I+oDVcsI6uajsmK2s6S6jqY4GMfTUEE8' +
  1313.         'akg8Bxe0u9tWn1ln9zUdc/AQ+abGuFNFRA72CtzBIrsUjmGOSg6rV' +
  1314.         'gE/xzA+CX8Rt+BUGASGkG5WjjnuIL0BISV+E78FFbiJ+wIonLkgBu' +
  1315.         'JTHwvMZGzDcTWBMYG8sxBEKB5aBnjnaTE6r55bdc0GIC0AmADnqEe' +
  1316.         'ZA5nlSyLoPcKDcY+ogPwGP4FFXB0TnLKCPYCsYPM3afvmSVmjFdf7' +
  1317.         'R+h8u7fxLNX/x4LvpetrKNr8OHFrg6SAwlGKhYR7yDDivleRsZP1A' +
  1318.         'W0CYGl9T3kwcGg8f29On2Pd/20T+p5f2Jtb7YfVOZefg6T4ZjaQsi' +
  1319.         'AclFf8L+mcwrWBDKz1bZ8sSazRJLCEoItSQEI0EsI+L4nFHIJOxsA' +
  1320.         'XMF1pIfJJqxhqRyZEO8LaB3QDNoUNhSSE+tIidiqBTqHYqF2aLjSM' +
  1321.         '1RR14XrpBeNmiIr2A6QNmgcICx1HgsXiWmiUjlsH3kKJEwzbAeaBv' +
  1322.         'lD5+gJaHFITjQ0ugoamlOOtkbrQ3WQB41FyGNsEFiaAAiGn7hI9B+' +
  1323.         'xBp9kf0BzQxs14xvkMfewzsSbd4//0Lb9A9rRObMNdcGgo2jkcOyj' +
  1324.         'KYggPhVQfdEnfwQdEd7U6Cox8+zuI51tECn4k9zNHiMdzhiYASBmC' +
  1325.         'bQO/Is08BuBUh+rkGvUifQ65/6NGjuxE36VGQOcLjcAIE/8xHUMW5' +
  1326.         'GjDXQHhidf2KxbeAwSBuoXnhDcOP0A3Ii/DH0LEKyyZRiUS8qGe1F' +
  1327.         'iqW+CCCQGgwWx8QnSAHuLne34omge1HVNg1pJ15HwzH2Pdw/ssfDi' +
  1328.         'z2BjYsX43A7sDiIO5AYe2zUxYg2YME+kIk0MqkNaE9D+Li9tfUfMI' +
  1329.         'Pm2bvBP9Ryt6rf/RDIYmo6HP8J3JTYO8tUR4cZuNYeWIS3YGDqBbq' +
  1330.         'E0CIByYeb2IdYcgb2/kBjkCQ2jjSAqwcyONugBGoYqkDO+QHh8QpN' +
  1331.         'wm2FqjYNLKBdEiiZAGpJLiaKletQaNA4LAuALoQQwc6WJOC/A2gxL' +
  1332.         'gUxgK9EuqvZx0nZAOegD6CoQAE0MEL1FaUVb4y5olWisui5IAt4G/' +
  1333.         'Dbd36BkzjBGEAkMTzzh3f4BDQfbingNJgDtCLXD5qJLwGyhPxz7aA' +
  1334.         'oiiE8Fh31R+MOetTe184/Ak3C2MaKJgemni8ZeklTBigC+4Ar+RRo' +
  1335.         'MUgLeEYx9JCZXKvrhv4uYVbC3YowTM/m+dewYs7gFvAHywUAGDZKv' +
  1336.         '7ZDrt/Hp9b3Cg4uN8JDnH8EuwDARu7j4NlgG7QAoFwwGHobMoAJ84' +
  1337.         'ju5CTO+EDtzjm/AmqBqu+9w7e2lTL5sRTznff13UAr8dhTkmt2Bld' +
  1338.         'H66BfmAzwGstplJEsTWBS1hmmADAgiwD+QEI6o/yhG0uE/kvn3Vf3' +
  1339.         'iz7AUKI6o3dobMBtMALJC9UF0NWPrqAWIFDr3nSDgRbmwbnwfSn0g' +
  1340.         'vGWftd2Hz38mr0NmyAmFQ/mEcjqnoBPoAUoGIDm5Ew5CKjQ0aoEqk' +
  1341.         '9YHpgcXUXeSw8mid6u/b2RbIBVyhhKIAG14BerFjRAb5gOxFa5DdW' +
  1342.         'hZ8gQEgOgwdV24gruQM6qGZJAH9wIQCfmgBUkrQFoEoksM3CU1TO6' +
  1343.         '2Adrvf/kXqA4tRc75wDdAAgiMVj720RREEJ8QKCtPiDH18EcwLcYU' +
  1344.         'yQOgWWJ4Di0D5HT0Lm/sUYdl5B7YA6MeIKcsyJR+EGyDu3zPMf2ED' +
  1345.         'OALhj8ywS0Yv2BmECDxIO/hjyBSeMUQBp9kgI+BD55EyA+e9JsAEA' +
  1346.         '5R4ugqueUyOBMM5gPhPyNPXEQyXAF7oFLIGRn6t9PcXXK/t96edMV' +
  1347.         'RCooAA+NeklJAUyAi2Bd8gtPgkJOmhHi39N5L2CaS9klrQpnhD9Rz' +
  1348.         'oKphaEjy363X1neoGvmaKvIklY8iIACUBkXBBEMMlL6L9nHCze6YJ' +
  1349.         'OBTJvkdF3ev+0we2B45QDmkEqBhAKrzkTwBfCc3RkCVUTQ+YYCQhj' +
  1350.         'CvI/fQNKgsciOeufgsO76Q5xrs5jy+ATkRSeGu3Y1PScs1TgRo0BK' +
  1351.         'SQX4ShFHuX0RnQM7oV0iG0nEvgBKJzjZ5n+hsvs5DWhNcJGh/41uy' +
  1352.         '4YiX717/HcAXImgC+e/NmKGtj30oBRHEJ4TAlSck+4FvQUckx2I4g' +
  1353.         '2bJiRdi7gXjdOEJyR4kjeAKsd0xOfB9Yx8/d1MGYuEJbvFzMgmSqJ' +
  1354.         'EJimhefU0s23v4I8gQPjnEIMc4CfwknL3nP2O8I9KnuMpk6fDVcQU' +
  1355.         'sAYDEkCGuIAERQWx8C2olnManf/LP8/gpmkL+pD+J/HEvyWO7k/Cj' +
  1356.         'q/jEd0gOmVFii89IQWDydeDdIGJvSc+Rqt4vy7ealNw1iLBuT/4I8' +
  1357.         '4GqkUvWd5XvI1KoyG/F/MBPAPzsVyYB/PRj+gFU7Sd2aANKQKVIkC' +
  1358.         'oidOWLrVAiyoV+yNKRAOnRjiQhE48hyHInNkhLSpD23M6uyVh/S+Y' +
  1359.         'AtG3/QEi+/pbYY+fuU6KfzJGhxA75hegwC0/I/bGJxkLpm+8pYR3Z' +
  1360.         'YYjM/b1i5/e7tP/mH/5XMMiWgsbIF3tx77EPpSCC+LRAZb9XfwPHk' +
  1361.         'ptYgtnIEY3xRYLwTn0OKjlmiYvbPyCZH5T0+3dtvic4x0c7fnj3mI' +
  1362.         'd8eEdw/qu/Ea/W+lbdQB4C+PLu3+TyS3LI75oA3zIPf7nEwo9HPxH' +
  1363.         '8SeLRTySVkQtCkJ7MnEL7B1628lWf8MZ91ce9kI1kFdKo7doXcB1p' +
  1364.         'pHzTzqTAv0j7R6iarNGeXSPnMVA0CI1UPhkL7BI1fPK1N2BCgPxOu' +
  1365.         'Ogke++BvOK/TuqWaB3fYkhIS+5NumtlfCAvokSUu1v6s5/3I5G9MO' +
  1366.         'RA0XuZk69W+aMzcgbe322IRve1eCB2+4yvw/hF8od1pN0hews+8Z3' +
  1367.         'YT5VUMvnCtW/7a7JL7LbUiz/7e8Kxj6Mggvi0QGU/nzsKQiPdbGJE' +
  1368.         'BwJjPBDPfiZIg+SNPerYTxlwC0YoOcaJ8U7CN+pJ2iEDef/o3p2KC' +
  1369.         'QB5ytW+CfARJlkiWTpJnrhIYpdIfSCuv/rb7jJOMnPKYvvAbRZ8+R' +
  1370.         'Pmz8cqkJO0IIR9odgRX2BCmJK9RwaUbD+u6t1zu779F+nHolDStAX' +
  1371.         'GOCSX+iOCA/BTdwAOXCTV+2xXOYRaXv2NwJ5+/Bojd67bBUr31X03' +
  1372.         'GDloKfz5BzYcoVsyNPNlTt7rn6mjwH8jkgWKtDuBH9jBnu2mIV19U' +
  1373.         'sn+RzOHO+qxj6Mggvjk8CFG2qejD4NME4gPJvbP3vjG++5PXw5+J/' +
  1374.         '9ICg0k50AT4JeQ3IGHfCd3F3t06r8emDnV4T+cue/efRI+aGJI4cn' +
  1375.         'M/WLvW6u9DClVOFyX/RL92AtwdgXwMZufGw/Db+mOAKlhUr2Bynl7' +
  1376.         'oLGoegso2k/mvyrzPYVTbqTK6W/6vZ5DsXr72Mv8QMc4yhMgczj2Q' +
  1377.         'RREEJ8iKFMf5OA6jAM05cOvTEYht/3JnEDaDCDMX5Bwj6gDQWGGI/' +
  1378.         '7yk/xB7j1C7IMMfNicHabNwEp9rNDDOBjdUJiNYggCTWeg9aRY4SM' +
  1379.         'E2wOF/z+UkmJDAwMTaikH/z1s4g+IGiDw4UwoIgXq83DjUrrTsY+g' +
  1380.         'IIL4dHGEa/r/Io6iuCM95P+94h3lNFJc3yMJ8EjupZLbHqdRuOuwi' +
  1381.         'fxI9Y8McD7ohx/yog/QaUCNjqxIoIPtF/toK0Ch94A47sh5pI/gaP' +
  1382.         'k/rD2qaQ6Qym9wj33sBBHE/w/woZmK/334/0DCgTf/atr6Eeh79bf' +
  1383.         'eF3+pX//Oee9t/fq7Lt/6HP9kOIVFe57/pWHju9rVb133vkV65/Jr' +
  1384.         'x/Ir+9JL292XtsUXfriWX7f7VqEEzmNT/FsKp31oasvP/wNv/une/' +
  1385.         'F3d2nuUfrjowyXuk+pBT7v7+Z9R2V35ffkArpU3HTs/kc9fDuRwSA' +
  1386.         'N+S9H19E9Ql3PlDZmDT5jDqnjuh2PpZfP99/j0/XwRCOfyq7btH9s' +
  1387.         'e/ggxSEn8c/v+5zLkNKCf3vEFrYa2QF26n/1MmS089iETRBBB/NZA' +
  1388.         'Eik4Xzv1xLTwwjT3zDj71DT/TNh9TzW6bb/7op3Y+/0HcBTolGChZ' +
  1389.         '/uz+uA6ce+quG+9pG2RQCuwQIKLz7bF0s4lcd9a1cgDzdiWde5J0/' +
  1390.         'pb4mD3re8dPkoEMYIeQZKue286fSv/SWbzP84OJH+/tOO+pbYQuHr' +
  1391.         '2abF3HuB3LvE7lvntS3u4K+pZIYuzLTyzzj+tWQhg17svQad+u4Dv' +
  1392.         '+uknqEIgDDPfaMe3LbNPAOvcNwD00Prgd+RqH4haB3MDkt/jedSie' +
  1393.         'vqxce4Z9HaGY7kkcN6QNERUeuJ0namWvhzHCL1xkuOdF3avyAbvq8' +
  1394.         'Z3oGEUUTV8n9e2IOxaFnTuotT3Wda9AnUBlcObmokdSFIz/6zl/ne' +
  1395.         '7K5Egw7OfO5/8kTA0hHX+rv0x8d04+4154YV6Yse18pqUk3y9C/o8' +
  1396.         '9j4WRBBB/Kbgd6FBpKB9unuG5Zlzrb6L1nbEV/dYF1+oRzbr7j4zT' +
  1397.         'z8CC6nHH+ontpt9a/XJlaIgUrDc575TGj+O8EpPec891eCac/6Jae' +
  1398.         'phjNobwjL4UVA7al941u5b0PjxVaaktP2v/2FaeE5rmPpQcQn6Tu3' +
  1399.         'wevXY5hm2b3tt1gGAbHUT202+9fZgde3kI8rttevf1yy9CpW5iXt9' +
  1400.         'QD7m6R2P7/UH++Jz3dTjr0S1ISzjHgwniwwZ1gGQOb78GoWcYBrCF' +
  1401.         'J4vWEby52mOJfDfkKJq5HOOZ4vWtuc4R/RTO6qhDeitYYV4oQ/Ws3' +
  1402.         'bltXZiRzGyBVujGX8IC+tcfZds7s92DJtnHpMrS8klwdDnsXezIII' +
  1403.         'I4jcF/2Prrqc/g830009TrYO3FZ4QtilG1ynsXuW2zCp6l+W9y3Av' +
  1404.         'sxwjhpknyqH16vEHhslty/Qjw+TDUwfPrPkQiFN02WZR15Kse6Gqb' +
  1405.         'ylkjx6j1O0VA/etd19Wj201Lj8nzhbcfP+hN8vG9171bdz8QTf15P' +
  1406.         'TesbyHEa/vkHfOKbrmz3JMh1n3lrzJMPNYP3q/dv6RfmwTfjJ5HUx' +
  1407.         '7Q9YEDTRs/hij7aBQsXpgxTmz7Zx9pBreSDH3UvK8LHSpx7YVffcO' +
  1408.         'KwTKvFpej5qm1wwxmmaFPWuqicc1y2+bH/7hi0PnOfrV9fnB7zcr6' +
  1409.         'quGN6v6VuzT28ReFkvPERQgyEq1DNRtfB8q99ySEUfMK8e2db56ka' +
  1410.         '8Pk/o89m4WRBBB/Kbg59KG+99X9K2d9p3kfpJN0NF1SSNBodXdloU' +
  1411.         'XcP7FfRtFnrlc16i4dzVC0cRrW5APrFX23wMl/voTcr8oMog674pa' +
  1412.         'pkKY+gMn2tePV/UuWcfWQa0Nd58esZtEwDPovtd/N809y7QNfaTcO' +
  1413.         'G27sGGgzD38oWMcy7pWJJ3zur6Fqp5F5egDSpqG+7+jpIfAktZJdd' +
  1414.         'eMrGuB652jpD9VbJb2r0k65mQds6d/nSkktPEB2v+QLbijbtONbyu' +
  1415.         '65kxDy9bxjaqBVfnwFgx0uNILq0oc7MU2OVbeSLoWYPKUvYumkVXH' +
  1416.         '1Fb9wpNj72ZBBBHEbwrje7vS1a5+m2jojtZ2+KnmiqgObiS/c0U6/' +
  1417.         'OBCqeOLIiNswTme/TyfgGRgQ9wxJ2mfvcSz/rfORo+q8pQ2jZ1kHC' +
  1418.         'BkWt2Y2DOmbBur7pu3jq6RB4sH7iDn30eINFJVY9sniqjHWX4ecFh' +
  1419.         'wnMbLMrdwatpCAgra9c+ZBuBKWa1qZFPkHipvGqkc3qQy/+aPlMxP' +
  1420.         'MrS82l5B47BicO3MwWN5cW9R40RZ81hFfY+wcfA069eawvO8o091/' +
  1421.         'AjKe5aFjUMVzaPithnd5A6CskA9IGBBXMb2zPBb51XD9yXeCW3nlG' +
  1422.         'lo6di7WRBBBPHbgf9pKfzq+vX3pvnn8OrPlNTseqRFxrLedXH/hnX' +
  1423.         'huWPlbYplgLz+JbeG7p4p7Vop8UyXukc4nplYffdthWeXIYsM54qN' +
  1424.         'Z1jVp+Bs0/WHjynHRfPc07NcayBRF7iGSxxdwpoWWWOvpnOKOHBk4' +
  1425.         'cn+rtF7m8jhs+/V30xzTxOquwPZ9Wp5PbN5DlKFsHe96FhVS77STt' +
  1426.         'O4Quiaz30++WEW5Xpmix3dXFunvH/tl5mfrimytlcNrkWpWil/pZp' +
  1427.         '6Sur6OYYGYs/tmjYK858rqdk9PvIwaJrPKSft0vW+4xfVlOt+pBi7' +
  1428.         'SuqHVMMbsoENYc8qr2MZVL8vpC+IgF2GRRB1LPAcXeWONkXTwLH3t' +
  1429.         'CCCCOK3g/GAHTK7vvlPw8xj1dh2tmtsl2TM/ammbnH3Mt89Kh9Y95' +
  1430.         'MnnMxTxRZQum7iYbGjh1Y3GqFqDa/yXhK6TnOsGZaePG1DWpkmS2G' +
  1431.         'raJ81TD5kuKcp9KWefEK5ku8cpOvqGZUmnqFeUt+t2ztbfP+kGPK8' +
  1432.         'gPf/1bDxnXpi59yeefrM9+yY37bAb501TD3SjW8x68cStd6Cmh5CB' +
  1433.         'pkJzP8ZXQ8rFl/dQ+H/a+I6Rd8K09wq7b33mc9IpdUMiXrXnavvOp' +
  1434.         '7+TJEwXNbIrOkobVugnIp+S9ZU2X+Prq3L850CwNA3nGHpA9Pgljx' +
  1435.         'tPYRJEShJpAqJQ97TRNpcdd1p5sFz2Glq6C1DZpF0Ek57hJJqZULl' +
  1436.         'TZqxhz4bR7VlxCPjKi/NPWNfeYemYRhbCmTEMQTBk1mCCCKIQOwzv' +
  1437.         '+/URe/W977FhNtp1oEcx1DlwGqxs5dVPyIfWAMZwq8mGSZa21HYMM' +
  1438.         'XvXOF6pukm72mGNpC70gwdyfzKGzEpNxIyYhjCdKmlrIPKltKhBxT' +
  1439.         'WyrP3Z8vMGTwpTVbNN7srPUO757YfPB2y9+VfjbNPY3Wdfqc6VOHR' +
  1440.         'jG7CG89V1GRKjNlVDjBnsu9o4MiMQhBsCF1Nln6KbZaPbAcGGgCvZ' +
  1441.         'ZZp7ZD1rVIkDPT54UKn24cFXSvl3cvG+ReByc5wreLOhQIQO7cihS' +
  1442.         'VMKxYVqBwU5kdklFKqvBmXdj06kTyx8VZ8WlhSVnhKThJPkWloj9V' +
  1443.         '1wGgi1DrFNp2kqWKKRF/dSYosKEmrMIk671IEu17RwGqcoNeNlrQv' +
  1444.         'fXFovusz3xqhgoYpNE2uypVSXJ5RUgF7dOw9LYgggvjtINDnJ8/bb' +
  1445.         'Vh6UdV/TzGwKnCPFlu8+TJjgb6R2TDWtP0TfGawExxjEItl8ZV64h' +
  1446.         'H80lx17ck9at2d+qhuj2NXXL4ddelWxKXQSPCYtGeJQl9gYApf5dr' +
  1447.         '6UoSquEJOFl/GVtsq6rqq++YPnAjve8mrfv27iv71wLmUizwr296Z' +
  1448.         'VaZKE6oz5TXsuqHytpk0sSGWWRaanJ3Mr7rCs5Cln2SZZMMPOG13/' +
  1449.         'SbM57G7bQvPKHxOYX5m8xzMXNs3f2p++MeynjX/9c/puuKGkexKe0' +
  1450.         'x+sf/Q5NzKmrPs6gPM3zyVyJVdi4y7EhZ9NTzmWlQ8cVxvYgZxRHs' +
  1451.         'Bp0DflGrovFxWS07XnyxURhXyL4RGhWWzUkTVokNGM0xSnyG3ZlfZ' +
  1452.         'Oc1TiLBi9F2U5x1oI9P8C/XwBtPenVAs9p0IXHrsPS2IIIL47SBwn' +
  1453.         'n/g5V+7Hv+hZeNb2/SDqu55aWM/V19XINHmKazS7kVm00zT1u+kvf' +
  1454.         'd0xHrOnbLue/KeuyDYZIEqhKY6wPz6tmhG2YUbYee/vn0lMj6lvJr' +
  1455.         'rmaLQl3HhJZX5rT3xHGlkWl5KkQBuf5nNq+2adkw/gDzkVP/Qm392' +
  1456.         'P/8zHP5sx/CBGX6BjaZxZYp1wpbJRG3rZaHTMPtMN/ZA6JmIY5Uj+' +
  1457.         'sBFf+nWpTcg8Fh9d2DR6snH9pVvP8L8X7BMdPcM7r0hdZ/ce46Ai4' +
  1458.         'zakXSpOSwlLzQhPTw1NzqbkUgvyauynWUb/CVeLnNJ++6Bq2NZ4hh' +
  1459.         'mWSyrPL5YkshTpAiUxGyP0kl3DOinnzpX38NX9zG/KlmkS+Ary71T' +
  1460.         'VQNrEVUtFMEyjJ1QL2xrSfMkt2UW0Vngv5eEzrjqHk7TZIrYAAtyM' +
  1461.         '4E4ej46i37sPS2IIIL4TcG/tmfw9d/9J62bR+6p2sZEjja2xl4grS' +
  1462.         '7UN5Y0TfBaZ2kmb2qZNlNhK7T35qjrQtPy49iSkELlgdkeYydBO7R' +
  1463.         'SIKVMV942e11cF8hOJ4sMppnHcJgDL+ZYe0CMt+LT4guK88vVAkuT' +
  1464.         'qn3cPrnpWXuDSIQ4ouvZz+b557y2xYKGycAb0009tOomhB7irrvpN' +
  1465.         'UOl3as3ZE2QJ0JaD08bPv+pgJAkydSrHn2gHNsJzOGOpsO59v4jzP' +
  1466.         '+ZbxEOyP8AxwocIu9kZEEJ3Pivo5PCkrLg9sNsFahd54oNgQpBTU/' +
  1467.         'SVNDSPvCTpg6hq78s0lP0QCQuVALE9UMPeU+xDPzGUYQD0XRhvqWz' +
  1468.         '0OCJ13ij1O3kv19ya2K07dqxLaajF2nOXw+9cvsO4ouItNxj72ZBB' +
  1469.         'BHEbwrkhM/I+/8iT1rv2Pl98+pr1+xDQ/9iZcuwyN7K0TnpVRaG2Z' +
  1470.         'tl7ZN0L6YK1fBXWfXEqsJYZhk8WArzIzqguYZya3ozTJ1xKs/pYuq' +
  1471.         'S9ShFY5bSebKgKvAuMD8sBSgU/JkjrOSbGpWto7aJDQjT+YhY21m3' +
  1472.         '9s409+yy0OVfvUPiBNOgHt0yTT8uaVuEQ35ibxo/TFKbyJWD+QNDk' +
  1473.         'tNMXb6+KaaqiUKqqkNPnA+v7aGA2zwVz6u6EBp18Ub4taj4sORs2K' +
  1474.         'yMkgqGvvE810Rd1UnXHwnU5dzhhZ10/WHOJ41CvqUrliM7fzMiPIf' +
  1475.         'NrOlEKJFp7pYOP4DJI+yauV/QOpdUpg3NZJy/EXbu2q0rYdE341Ij' +
  1476.         '0/OPvZsFEUQQvykETvUPvPob3P62B9+7V144ph8YB+6CfiX13fDAi' +
  1477.         'y1ececizTVcoG/MkpklPcuCttlEniKxREFhfj93EbTGt18tr78la4' +
  1478.         '5UtcdV96RaBiKULUxHX4JATWV+S3dUIf/6nYToLHp2qZxnqK9qGak' +
  1479.         'Z3yCW9xDHvvxkmHlS2rUCt5bCh+FVXkbzbKjcc0noCrx+u6LW5/NX' +
  1480.         'HmB+ujpdYuY2jJw46Gknmfs+xPxnebabsuYEQ29e3QSvc1kx+tBy9' +
  1481.         '3Xzw59E7fOxXPnZr8PgWoP5I9PykpmleSIV2+I9zzX/yvX87Jb5I5' +
  1482.         'j/KJzjWmn23hi29My10NOXvrocHhOZx0ngSIXeycrBtYr++4T9Gn+' +
  1483.         'EMCQ8p/jMla/PfnXj0q2I69GJ4am5cfnsY+9mQQQRxG8K/ql+0u3v' +
  1484.         'f/mX7id/bN36DuQPz98yuqrvmVV6Ryrqe3j1gzm2fnnfCt3okfXcL' +
  1485.         'XAMpJVpEAJQ5vl35yXY5tMcC4lTxWZYgS9Yps+ZhiRda2KpKqKAf7' +
  1486.         'LwCOYHhd7JomWVyrnVtYg4rKNrjcvPYYkcSy/N88/PBKzkRG6n2Kb' +
  1487.         'rFQ13NLtzHZRYIEpeT8yowzAFiHeKro7nSJOEmnhNS2Dppw6tkPxF' +
  1488.         'n/8Es5pu64lhS0DCIFgYrHSumC43cO0dF0ssgczvm+1Rk3M4BGgq/' +
  1489.         'LxZ7sp3DCkGNwKXp5KAlTxcHK9lNl1mvXD7zsnzl0HsYHXER5EZha' +
  1490.         'kCZZ66rnJgDdXRjD1IExu+upN48WbEldt3kCAiLTe+kINI5Ni7WRB' +
  1491.         'BBPFbg3/rnpF3//aTf9v2D561Nw13nzpnti0j98D/Eu+4uGuJ0TDO' +
  1492.         'dnQzLW3p1e3ZMlNmhSGEpj5yduLwZEWcpqXMMxGWww7P41KZ3zfbA' +
  1493.         '58fzJ/Jk3J0TkXTgHl4hdh8ZvW1buJhQd1EIJ2e59sD12deKHVQio' +
  1494.         'uQ1ceyxOD5wJAEViC2qDwij1vSSHX7fw3zBy4K+sw3686uHUzkK0O' +
  1495.         'TsmJymTBYLKWV7+y+xLOGsM0x2g5u+5J16Y1l7kmWwhZXXEHI43u8' +
  1496.         'C4sJveXIzIXVTec5RspDAdXIZgjLQCn6ssAp9EzcTC88dfEqooyvI' +
  1497.         'uJuJ2XG5DASGbxsqUHWs/RFkQGtk8yvuhmfRq4disooSKSXQCqG3H' +
  1498.         'jsfSyIIIL4rSFwJzSS/Ade/pXYi/gRccw6yf+O6QeGwWVx20yGtU8' +
  1499.         '1vMFx9maZOgpUzrzKmrOso+el99mMoQ+X1tNtvSnl1ZEFJXCSowp4' +
  1500.         'Jw/OEYH5o+lCuKkE85dI2Bq7tKHX0L+IuMM09VA7sXOaY/1IEYcRX' +
  1501.         'dmIDEG2gcx/o8yOK1cj4+H2Jxx0+3+R+T+n6co6FvAZePEc11LqmY' +
  1502.         'CnHU/jZYP5VTX82l7KdhaijkWEHl9FxJNLOm/Fp0Wm58fmsRLoJSD' +
  1503.         '/8xxDoAk7WajKVtXm2wcOy5Zp7orjVl64FQmHH9wORSUzS7P4slyx' +
  1504.         'lmn2Xhc5SjzTmRIjzAECkLg8VgpLmFtWBWMksDYfex8LIoggfoM4Q' +
  1505.         'P7v/2v4LXHMLnnMOsn/TauvaucfKfuWOZ5Zaf86v3Ekt6aHaXDTNL' +
  1506.         'XkS7J+grot9+Ta+nNregudg+yGsbL2eZF3GpwfTRdcj00B+125fSe' +
  1507.         'GKaI+F64bTaswJXBlaSJtXpWNbfYIGwZk7dOq/uXK/tVsx8c2ZzsS' +
  1508.         'UfL6yAIeyD+woCs8M3xvCAADxGscPcH4ZeZHcJFiGRD1rst6lpPFx' +
  1509.         'niVh8LJ10S1FR3zOVX2bGEV8cKss+sS/wDzc5unfMxPrOe/FhkHnz' +
  1510.         'wyLS82tyiRxkXQBOa/KNgPWGAQkwQaUcvELZmbIhK8ep57NJ5XeS0' +
  1511.         '6OSwpK6GQC3+eJqsGt7Mt3jiNt8A5XKhxpXHFacUixE35Yg0MaJnN' +
  1512.         'W+kZOvYOFkQQQfw2EXjQMOn8+/m/+5v/6Hj4o2f9rWHsvmp0K981I' +
  1513.         'vRM0JwDHGsryJ/C/OnGzlSxAawbkV8SUcCLopWCZsH5cHfJN1hBfY' +
  1514.         'm83en3K6K6NOtgoqnXtvxG3ndP0rMk7VmW9d1TDKxVDm1UDW8aZ5/' +
  1515.         'qJh+dKKLOflwT1yXp2hI1LQlqT6LGG6ny+v8iJ/xvlTvC87hRhfxA' +
  1516.         '5ifn+UG/12NTU8urA5f6/6LPfzJfEcksL6kfOldCjT4ilC2K3qVCX' +
  1517.         'SNNYeLa2i/zawKZn9cym6mwxbErYovK49j+2Z5q0P7h2R4wf0QhP4' +
  1518.         'Zdwa0f/oJJlSpS1Spum45hlCFqIFaQVmiKtY5Ss5vv6sl3DidXd7L' +
  1519.         'MLYWy6kKJjqEwcXROkb21smUYodOx964gggjiNwvKQfPkoa7+yR+Q' +
  1520.         'f8PKy6qBtVzHkLhjPt8xCP8W3iaF+VOr26MZZeeu3zpz9ca5azcv3' +
  1521.         'owgV7yTrztFZRbG5DDAe+SmCv6NdIiJ+oMrHk8UGXFRPfkk0dj7Od' +
  1522.         'MAPv+Saz3Ps18SOmO07ULvdFqFEWYF9J5Qqua4JygcfrPMFpbDhum' +
  1523.         'hMH8iV3YjJhmIZ4lLPROnWEdsgHCY+W8rPMr+lWtJeRE0Iath7LC9' +
  1524.         'SLUOgPwLVA6WyXPlIPNT1/PvLeaH3r4s0lOe8IL5UaMvv7oZy1VkW' +
  1525.         '3oOF1TsnkiTmGLy2XDs6XIDz9ggdraLmobLOu9eFzl59YNck5tbXc' +
  1526.         's3NYocbfD2q/vm7ZObx961gggiiN84KAedk5M/IH94/m0Pvq+e2GY' +
  1527.         '0TNStvcus6RfU93Ns7SF0LYX5Y4pExDu810NB+19FEPMbEWm5MbnM' +
  1528.         'RHpJGrsskyct9G2h+WueC+e4xk8e2sQ+TuNNl1qu3Uk++9WN05e+C' +
  1529.         'sstLm4c/zXMD76Fyx2aSLzZGpXNyK6yZ5i7jxTjSJ//anzW5ZjUMs' +
  1530.         '94jOaI5Te5tr5cRQ1NU3ultOZ/vJ6f8PnzS05duHIrnS7yTl4X11N' +
  1531.         'KOc+3lbdOpwqUaVwxQ24UWJqkDb2SlrGqoY0TDL24a6msoV/kaK2o' +
  1532.         '7VQ0Dei6pq2ja8H9+YMIIohfCYrzT77n1fXoJ9PMI0Hnsmv9+zhtW' +
  1533.         '5l7CG5/CIPK/HFsYi79Slj09TsJ5O4BSQxeZomE2MpSbmSpajjWVt' +
  1534.         'z1i1P3cPKPvF7WPo8iLt4IR0yByCKqgMdpOsLnJ2d7zjD3xYPvnVK' +
  1535.         'qhBmKyiiAJcoo11Z0zJ89NHtzNPMXKK4l5X525sIdZrnQM3FpbzXR' +
  1536.         'dUljtnNMOvRAM7qVr67LVzrA/L/GqH3mW016mPkJma/euBgalcCr4' +
  1537.         'jaMfH7oYUSaoTNH6cjgy+Hzg/ll7j5l23hF++xVoSPD2g97IW0ehL' +
  1538.         'evbp8wDi45ph+4V14ce3cKIoggPhUEPvYd/vZf5PYOvlNrHxd55hL' +
  1539.         '1HWLPaGltbwh1r872RK78RkzyzbhU8jWidE55vljDUlp5xgaRnXBH' +
  1540.         'Re7hMLn7v/vQlsQtmVvSOXeHxr90KwIxxeXbUbGs8pJDWwPdKLOBQ' +
  1541.         'qMZZan69gDmJ7ZHjs4mdldLZvIzeDKaoZnRcCBeOM+3XxQ4G7eozH' +
  1542.         '+arr6RSvvs1Jkz10ITS1VZll5KiZ/TdbmWboa1/arA9iuZ/4LAeZj' +
  1543.         '5ITPqdSk08uu4tDSJKd1EjUpgC/ieyQJtPU1h4psaiRMNOiblnXNx' +
  1544.         '2vbTHItqdEvaOgna1/fOWUZXa+d2PGtvjr0vBRFEEJ8WKNs7OO6+0' +
  1545.         'E8/viywF9aOSLwTZQ39N8vsIXSt//CRhKrGJJ4CfvWdLFoijZvJkx' +
  1546.         'LT0YZ6sasDjig4St8zW9k5e6PcGcLUAScZe/cSJ5Ko9t51IqG+wDE' +
  1547.         'l69tPM7Q+aE4xNIW23hSR7npc6tWIWMQUN+PTkkrkdEdviO9AE2IW' +
  1548.         'nU583uCboumCGEbZWTqxgQN53Mklti5DpE2gcVNYwiy+jIhBdPXyn' +
  1549.         'uVUQ2eipjVO03Jb7IyU1QO6kftf8cyXONXnWLowsUPavVTqHvl/2r' +
  1550.         'sTn6rOPIzjf8csmWSSaWfpEpembhUVkE0ElB2UVZaL7DvIJlQEFQT' +
  1551.         'rUncqdcEKVlRaq3QsdnRqnWZsOul0Jpm/Zb7v+V0ul1t0bDsThuRJ' +
  1552.         'Prk53HvOuxxunt97LnB4NTz+l7/5/a9fWfbm1iyW1kw8aKjOr7ZV7' +
  1553.         'Ow//ween/fvV8r88/KmxixezW1j3Z7ac9Z3bPyljIZfJFX+3Nttla' +
  1554.         '8nuf3oqsRs5vXK6g3L1m8OyyzJ6x95ObPRf3JmvZrTmtVzMrGijWJ' +
  1555.         'a2OWSv3RwNKbl6M+2VW9tP1F8aKTy8AgL/ubT452jH/WOzyz6u0hE' +
  1556.         'lpZ5t3eY/qb/5hcs+6vevV7+zpXdh84V7j2S1TaY2tTv/YZnW2xJU' +
  1557.         '2Re9brEzLXxqaRrdHZxUmm9fSJRMXCu/thlsqj13I3G0xO7j1wuGr' +
  1558.         'iQt+9kxp5Bjo3ztUTkVW3I9tkdIXgMyyzdsKPM/QcTj90vaH1mydr' +
  1559.         'kvNfDormgeP2tCPv1yA0puTHFDXG+1tjS5uiihsj8GvanHKyI2LIy' +
  1560.         'Ip7wDM+t5MnNu+qiCms2peWHp+VF7yjZWljFZUhqVUdqU9/2+t7Eq' +
  1561.         'i4GzxjoevX2vDcSslfEpS+PTV0Wk8Lj8ti0ZdHJL61Y/fLyVWTyys' +
  1562.         'itG7N94blVTk6FNzyH7Yj86s2FtQwD9MiX7n+yZHnzyihm/HaXTjp' +
  1563.         'iSJEFtTyyzTM8z1DXpuQv3xS3LCyKurl2S8rGlNzoXfUxJU1uXgW1' +
  1564.         'dMeeTIcuYosbWfP7k//Q2eojF8uGL5UOXfINXWSb2G84MdZ69sOui' +
  1565.         '3d6Jx4s+rtIRJaWuds7ePfzHLrz1/4bj7qv3Gs5+6Hd2Ce/YyCrvi' +
  1566.         'e5vDWhqDY2d/fmrKLI9AIe3Sc8ZU07mvYVv320evgCmd8xOsWBPVc' +
  1567.         '/7Rmb7rgw1XTqGuWgoGMwtbItLr98Y/LO1XHJJN7K8Dgi/Y2ILWy/' +
  1568.         'uTnhzahEZ3PCG5Hx9hJ4aU1c8oZt2XS0Jb88obguydeQWFK3paAyK' +
  1569.         'rt4Y0rOW4kZVB+sT8qk5fD0/MisoqgdJTE5vi0FFdSjtKq27Ma3c/' +
  1570.         'f057T2ZTfuYwzxu6oj0gvWxKfSy2trN7Hw/u2KNUQ9Fxe/W7nmlVV' +
  1571.         'hr68Ld3+EFbMtLClzU2ouO9MsfYVty16XkL42Po2rCbrbkLyTVzel' +
  1572.         '5fHS+qQsGlwVk8SAGT+Pq6ITV8dudzsnpDNIO5CJ219ggY118WmMO' +
  1573.         'co7h+63NHdVc36YF22Gbd8BNqJzfFZVi7qPVA6erz9+pfHkNU4pj4' +
  1574.         '3vfgBOeNvIre7Ld/uuf77o7yIRWXJCPvAZuP0ly8jO9z9uOjVOpPv' +
  1575.         '2nyjsPLyzeX9GTWdyeQtxlFRSx3I6rbrd/WJh7/Ga4VEWn3sv3+Wo' +
  1576.         '/slHB29+0X/j4b5rn3WOftTw7tWyA6fy9hxIrWglkCMzCkk8cvUtU' +
  1577.         'jEhfX1iBtuGbdiTBH54ai4XFKzb6TGzvjunpc9leEsf2ykVrYlFtW' +
  1578.         'RmzM5SxOaU0XJCUY2Niv1d5jf00CmZyeApXiX7jlG/OHabr4HSsIn' +
  1579.         'CsTUtENdwPxqI3U7XvES/NJhYXMfOTJa++JKjCGrKEI/WaVzubh7Z' +
  1580.         'mUlxFFdAYUlZjNz96y4qUVpeBMUovYDHcO9vr5g4eIln7JIkeXczp' +
  1581.         'zSrvht2bumUvpiaFa/06o68toOMv+bI+3wv9pyfJOrbRm5yVQW2+R' +
  1582.         '69ffWPnO1FfwuJyJLz/ft5Hpj8M5HSfuF208lrxE75wTOEJ/lPnFI' +
  1583.         'Cdjb3ksOFXUNl/Se5LnC/XuKtPCkZHMtVw+BHf6GFfR/cb3/vVv2x' +
  1584.         'y2QXCZZR28U1AhFt4UZyOmzMx6tbd1WTugQ4FxQFnYMUl90HTpcfO' +
  1585.         'ssjw+AZxpBZt5fSwz7EI9tEPaOiNDBCdijueYeKUzX0Xu3RSwyAQX' +
  1586.         'L1wbUJwyZjaTy+oJIwJ7ejvDAnihmM/cGsFQ5riv3pi2SmLyoOWe2' +
  1587.         'Ut1DIDF/SGtWBJKdNBs8j2zTFTA3bjvek+90nX2Nq5R5Xm9oO7uoe' +
  1588.         'ZnZgwP55eVWAc8UFS377IV5iFqzwLee7Ln0CNmybayuq7cFbjxf9L' +
  1589.         'SQiS86C9/NkJdlz9VPW7aznWboTnlWHRygBpD3cT3KH3ms4McYStP' +
  1590.         'vKvb4P/8Qhw3efUjhAC1Y+aIHIqj9+hdwmeIkywo1Mc3+XuhCe51X' +
  1591.         '7BSFW7HRELxzOirf59DhliBjnGVcCeo+zA8hMykFpr1vbk/YMrHLw' +
  1592.         'PNWKsbWcuc7wqD48cnjdsUvkv63/Lc8JWBezNZ1WO1y/HQM0SFMMu' +
  1593.         'HLgHGiQCweepNLxqiGlDeO0ixHqDiMPoGbxjGHb+GuTF/i0SeOMkx' +
  1594.         'kxQSoU83I/ye11fblJ9R7nS1vtMwUuqajFXEk5H9x3rn22f+IBJ5k' +
  1595.         'zv+hvIRFZikJ+vZMMH5h60j/5qHd8hmBnhUmAUwIsftF8ZmLP+Un/' +
  1596.         'pw2Tj1zs3/va/SP1z/7ubgpx/1tXPj7+ipfYoWN0iv2JuOrhC2Qvu' +
  1597.         'U1EWwUhY4196Y/ugXPsyf6EHqHt7ud5+S7D4NEbiYtxihE7EOaWnH' +
  1598.         'zpBkaBODPBOG2FzCGWkDxyLMNwVezEWM3wqEV6YABzJWN41BWak9e' +
  1599.         'oGu5DFaZ8ZoIlt104MCry2fi3D49wVIXXGvPyT+3AKdsOYVOzKxHa' +
  1600.         'pHEindrKUBmbm9eZibl5ecOwk0wB3T/7SRpIe3Po9mMruIv+/hGRp' +
  1601.         'Sh42e8Pf+9+PmQLgUPskJ/kj8UvesamidO+658fvPWY5T05z8XCiQ' +
  1602.         'f/cHeECLopBC+RVBzO/iQYQUecEqpEHOkdiie93Cbu2LPr4h33acb' +
  1603.         '4DBcUFnSMhB7dSMamWQOzg/9zj4t39nqjcj9fHpu2tTF7uqi89Zgp' +
  1604.         'gMMZBi91XfrEYtZS3bicd/XiZvuF27RmP6e2pbWbtdcXR3mXDyFuM' +
  1605.         'lqrEf55LYSXrAv7rJ60tzV878QDxskEA2c4MC+bFPvYwn7g9pd8Oz' +
  1606.         'ifwYY+ecq3iYusRX//iMgSFfwnvS78739LdLOetM/tSR7yM7DgJFE' +
  1607.         'ti+wTHot9Lhk4PHBHOBf+n/6NHTic/ftvPCTESHJLVDLt+2yJ7tKe' +
  1608.         '3L7x0PUy9cQizmEkH3/FMzzvCsGNh36Tj/yjcv/ey+U8+7An+9M72' +
  1609.         'QgOt0LGbjTe6yVtYBj+fr0ctqW1a+T2l4FZu6Lj5XNviPEZN6PAJz' +
  1610.         'DP502NRqyW2Yrd8jxkXuzAo/88Tz1xEyHhp7+xD9PchrdNgbbrrEV' +
  1611.         '/84jIErXwzTzvf0u8kDOs6l2EEqTm3tc848KH5Jn5jmLhMt/uBTT/' +
  1612.         'jkD+CkL2erntisjUE8fL1VAk9mwY+he0099YvhnLPUtyqwWOt73A2' +
  1613.         'LwDKUCwY90s7j4NHYlnXr93n7KnsVlbXxbR83CUJ7ipZ/HvPFuS3C' +
  1614.         'BnAzwwr0BfNq/gM2CfpM3Dmfeusxb9zSMiS1fIzdzsZv6uBMx8Z1F' +
  1615.         'jKWr8yfP5P/1L/Yf/CtwLNLSCzHxn2euPuMCqdUGW2IGsmw03G0mg' +
  1616.         'NX+Ds0IHFnJg0CwWHom3HSgxgdkFz9qOmjvwxwrUo7lBzs5rbnhB8' +
  1617.         'wqeC+czhF1kLfo7R0SWupD8D3yA86zYCc784BYC+T9XRIIC/Hlm95' +
  1618.         'zrYj7rfa7BZ0di8DVI6IHP6HfBmQb39Z/H/2JTC5ndgn0tPJf5Aqd' +
  1619.         'dROQnCl7AzxWC72VOSOYv2ELIp0Av5Bm9PGskzx/bDxjG85t9wcH/' +
  1620.         'qNn90Ok8/+SLiPxEPzFznp9aL+LHNfW/GMl/3YuPbdHfBiIiIiIiI' +
  1621.         'iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi' +
  1622.         'IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI' +
  1623.         'iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi' +
  1624.         'IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI' +
  1625.         'iIiIiIiIvL/5t9IV97O');
  1626.  
  1627.     GetBitmapSize(BMP,w,h);
  1628.  
  1629.     SetArrayLength(DebugLines,4);
  1630.  
  1631.     TPA := TPAFromBox(MCBox);
  1632.  
  1633.     DebugLines[0] := 'M34t''s Lunar Planker';
  1634.     DebugLines[1] := 'Planks made: ' + IntToStr(Prog_PlanksMade);
  1635.     DebugLines[2] := 'Xp Gained: ' + IntToStr(Prog_PlanksMade*90);
  1636.     DebugLines[3] := 'Time Running: '
  1637.                        + MsToTime(Integer(GetTimeRunning),Time_Formal);
  1638.  
  1639.     {for x := 0 to w-1 do
  1640.       for y := 0 to h-1 do
  1641.         FastSetPixel(BMP,x,y,10337999); }
  1642.  
  1643.     for I := 0 to length(DebugLines)-1 do
  1644.     begin
  1645.       TPA := TPAFromText(DebugLines[I],'LoginChars',tw,th);
  1646.       for II := 0 to length(TPA)-1 do
  1647.         FastSetPixel(BMP,Min(w-1,TPA[II].x+15),Min(h-1,TPA[II].y+(25*I)+15),1);
  1648.     end;
  1649.  
  1650.     SMART_DrawBitmap(True,BMP,Point(MCX1,MCY1));
  1651.     FreeBitmap(BMP);
  1652.   end;
  1653. {$ENDIF}
  1654.  
  1655. procedure commitStats;
  1656. begin
  1657.   DebugStr(2,'Commiting stats...');
  1658.   if stats_Commit then
  1659.   begin
  1660.     markTime(CommitTime);
  1661.     DebugStr(2,'Committed stats succesfully');
  1662.     DebugStr(3,'Mahogany Planks made since last commit: '+IntToStr(logsPlanked));
  1663.     DebugStr(3,'Magic XP Gained since last commit: About ' + IntToStr(logsPlanked));
  1664.  
  1665.     stats_IncVariable('Mahogany Planks Made',logsPlanked);
  1666.     stats_IncVariable('Plank Makes Casted',logsPlanked);
  1667.     stats_IncVariable('Magic EXP (Gained)',logsPlanked*90);
  1668.   end;
  1669. end;
  1670.  
  1671. procedure ScriptTerminated;
  1672. begin
  1673.   DebugStr(2,'Attempting to commit stats one last time...');
  1674.   commitStats;
  1675.  
  1676.   SRLRandomsReport;
  1677.  
  1678.   DebugStr(1,'Script Ended At ' + TheTime);
  1679.   DebugStr(1,'Ran for ' + MsToTime(Integer(GetTimeRunning),Time_Formal));
  1680.  
  1681. end;
  1682.  
  1683.  
  1684. begin
  1685.   AddOnTerminate('ScriptTerminated');
  1686.   {$ifdef SMART}
  1687.     Smart_Members := True;
  1688.     Smart_Server := 100;
  1689.     Smart_Signed := False;
  1690.     Smart_SuperDetail := False;
  1691.   {$endif}
  1692.   DeclarePlayers;
  1693.   SetupSRL;
  1694.   LoadObjects;
  1695.  
  1696.   SetupSRLStats(945, SRLStats_Username, SRLStats_Password);
  1697.  
  1698.   repeat
  1699.     if not LoggedIn then
  1700.     begin
  1701.       LogInPlayer;
  1702.       wait(2000+random(4000));
  1703.       ExitSquealOfFortune;
  1704.     end;
  1705.  
  1706.     PaintProggy;
  1707.  
  1708.     writeln('makeplanks');
  1709.     makePlanks;
  1710.  
  1711.     If not Bank then
  1712.     begin
  1713.       DebugStr(2,'Failed to bank, making sure we are at edgeville bank');
  1714.  
  1715.       if not NearBank(true) and ENABLE_WALKING and not FindNormalRandoms then
  1716.         TravelBank;
  1717.     end;
  1718.  
  1719.     antiban;
  1720.  
  1721.     if TimeFromMark(commitTime) > 6 * 60 * 1000 then
  1722.       commitStats;
  1723.  
  1724.     if (FailCount >= MAX_FAILS) then
  1725.     begin
  1726.       DebugStr(1,'Failed too many times... Swiching players');
  1727.       Logout;
  1728.       NextPlayer(False);
  1729.     end;
  1730.   until AllPlayersInactive;
  1731.  
  1732.   ScriptTerminated;
  1733. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement