View difference between Paste ID: yYdvfMJ4 and SJA7MNxJ
SHOW: | | - or go back to the newest paste.
1
program ArmouredZombieKiller;            //By ~GGzz~
2
  {$define SMART}
3
  {$define CrashSmart}
4
  {$i srl/srl.simba}
5
  {$i srl/srl/skill/fighting.simba}
6
  {$i SRL/SRL/misc/paintsmart.simba}
7
  //{$I srl/srl/misc/debug.simba}
8
9
var
10
  Food: TStringArray;
11
  WhichFamiliar, WTP, WTE, WTD, WaitFight_Shield, WaitFight_Damage: Integer;
12
  Potion, SStatus: String;
13
  NoSS, Debugs, Paint, Closed, Permanent: boolean;
14
  SaveMe: Boolean;
15
  StartExperience: Int64;
16
  ItemCheckList: TStringArray;
17
18
const
19
20
  PickItems = False;  //Set to true if you'd like to SEE/TRY picking up Items.. It is in BETA but will do you NO harm.
21
22
                                 //Fill in your username, etc..
23
  Procedure DeclarePlayers;
24
  begin
25
    HowManyPlayers := 1;
26
    NumberOfPlayers(HowManyPlayers);
27
    CurrentPlayer := 0;
28
    with Players[0] do
29
    begin
30
      Name        := '';
31
      Pass        := '';
32
      Pin         := '';
33
      WorldInfo   := [27, 42, 45, 46, 48, 52, 59, 70, 72, 78, 79, 87, 104, 115, 117];
34
      BoxRewards  := ['XP','xp','lamp'];
35
      LampSkill   := Skill_Slayer;
36
      Active      := True;
37
      Strings     := ['ffigy', 'harm', 'eath rune', 'lood rune', 'oul rune', 'rune', 'essence', 'ak plank', 'eak plank'];   //Items to pickUp. DOES NOT WORK PERFECTLY.. Needs work badly!!!
38
      ItemCheckList   := ['bones', 'gp'];  //Items to right click to check for the above.. DO NOT TOUCH!
39
    end;
40
  end;
41
42
43
44
45
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
46
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
47
///                                                                                                                ///
48
///                                             By: ~GGzz~                                                         ///
49
///                                                                                                                ///
50
///                            ALL CODE STARTS HERE!! DO NOT TOUCH IF IN-EXPERIENCED!                              ///
51
///                                                                                                                ///
52
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
53
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
54
55
const
56
  Version = '1.93';
57
  Colour = CLBlue;
58
  Shaddow = False;
59
  Font = 'StatChars';
60
  VersionChars = 'UpChars';
61
62
type
63
  Skill = record
64
    ModAtk: Integer;
65
    ModStr: Integer;
66
    ModDef: Integer;
67
68
    Atk: Integer;
69
    Str: Integer;
70
    Def: Integer;
71
end;
72
73
type
74
  FoodStruct = record
75
    Item: Integer;
76
    Uptext: TStringArray;
77
end;
78
79
type
80
  ItemPickup = record
81
    Color: Integer;
82
    Tolerance: Integer;
83
    Speed: TExtendedArray;
84
end;
85
86
var
87
  SK: Skill;
88
  LProc, FFinder: String;
89
  UpTextF: TStringArray;
90
  PLevel, TimeToDrink, RCTS: Integer;
91
92
const
93
  LadderColour = 536409;
94
  LTol = 4;
95
  FFS = True;         //FlagFailSafe.
96
97
var
98
  QP: Boolean;          //QuickPrayer..
99
100
101
Procedure DebugTPA(TPA: TPointArray; BitmapName: string);
102
begin
103
  Smart_DrawDotsEx(True, TPA, CLBlue);
104
end;
105
106
Procedure LastRun;
107
begin
108
  writeln('~ Last Run Proc ~');
109
  writeln('Last Proc: ' + LProc);
110
  writeln('FFinder: ' + FFinder);
111
  Writeln('Prayer Level: ' + ToStr(PLevel));
112
  writeln('Uptext: ' + ToStr(UpTextF));
113
  SStatus:= 'Not Running';
114
end;
115
116
var
117
  AZK : TForm;
118
  ZombieKillerLabel : TLabel;
119
  Panel : TPanel;
120
  Bevel1 : TBevel;
121
  Familiars : TLabel;
122
  DPotions : TLabel;
123
  UseSS : TLabel;
124
  WTDPots : TLabel;
125
  WTRP : TLabel;
126
  WTEF : TLabel;
127
  Bevel2 : TBevel;
128
  Developer : TLabel;
129
  PSmartLabel : TLabel;
130
  Label1 : TLabel;
131
  Label2 : TLabel;
132
  Familiar : TComboBox;
133
  Potions : TComboBox;
134
  WhenToDrink : TEdit;
135
  SoulSplit : TComboBox;
136
  WhenToPray : TEdit;
137
  WhenToEat : TEdit;
138
  PaintOnSmartX : TComboBox;
139
  Debug : TComboBox;
140
  FoodBox : TListBox;
141
  Save : TButton;
142
  Start : TButton;
143
  Timer1 : TTimer;
144
  SaveDialog1 : TSaveDialog;
145
146
Procedure InitializeVariables;
147
begin
148
  if (Length(Food) = 0) then
149
  begin
150
    SetLength(Food, 1);
151
    Food[0]:= 'none';
152
  end;
153
154
  if (Potion = '') then
155
    Potion:= 'none';
156
157
  if (Closed = False) then
158
    TerminateScript;
159
end;
160
161
Procedure SaveInfo;
162
var
163
  I: Integer;
164
begin
165
  WriteINI('Familiar', 'Key', ToStr(WhichFamiliar) , ScriptPath + 'AZKInfo.INI');
166
  if (Length(Food) <> 0) then
167
    For I:= 0 To High(Food) do
168
      WriteINI('Food', 'Key[' + ToStr(I) + ']', Food[I], ScriptPath + 'AZKInfo.INI')
169
  else
170
    WriteINI('Food', 'Key[0]', 'None', ScriptPath + 'AZKInfo.INI');
171
  WriteINI('WTP', 'Key', ToStr(WTP), ScriptPath + 'AZKInfo.INI');
172
  WriteINI('WTE', 'Key', ToStr(WTE), ScriptPath + 'AZKInfo.INI');
173
  WriteINI('WTD', 'Key', ToStr(WTD), ScriptPath + 'AZKInfo.INI');
174
  WriteINI('Potion', 'Key', ToStr(Potion), ScriptPath + 'AZKInfo.INI');
175
  WriteINI('NoSS', 'Key', ToStr(NoSS), ScriptPath + 'AZKInfo.INI');
176
  WriteINI('QP', 'Key', ToStr(QP), ScriptPath + 'AZKInfo.INI');
177
  if (Debugs = True) then
178
    WriteINI('Debugs', 'Key', '1', ScriptPath + 'AZKInfo.INI')
179
  else
180
    WriteINI('Debugs', 'Key', '0', ScriptPath + 'AZKInfo.INI');
181
  if (Paint = True) then
182
    WriteINI('Paint', 'Key', '1', ScriptPath + 'AZKInfo.INI')
183
  else
184
    WriteINI('Paint', 'Key', '0', ScriptPath + 'AZKInfo.INI');
185
  if Permanent then
186
    WriteINI('Permanent', 'Key', 'True', ScriptPath + 'AZKInfo.INI');
187
end;
188
189
Procedure LoadInfo;
190
var
191
  I, J: Integer;
192
  Temp: String;
193
begin
194
  WhichFamiliar:= StrToIntDef(ReadINI('Familiar', 'Key', ScriptPath + 'AZKInfo.INI'), 0);
195
  SetLength(Food, 12);
196
  For I:= 0 To 11 do
197
  begin
198
    Food[I]:= ReadINI('Food', 'Key[' + ToStr(I) + ']', ScriptPath + 'AZKInfo.INI');
199
  end;
200
  For I:= 0 To High(Food) do
201
  begin
202
    if (Food[I] <> '') then
203
      J:= J + 1;
204
  end;
205
  SetLength(Food, J);
206
  WTP:= StrToIntDef(ReadINI('WTP', 'Key', ScriptPath + 'AZKInfo.INI'), 50);
207
  WTE:= StrToIntDef(ReadINI('WTE', 'Key', ScriptPath + 'AZKInfo.INI'), 500);
208
  WTD:= StrToIntDef(ReadINI('WTD', 'Key', ScriptPath + 'AZKInfo.INI'), 0);
209
  Potion:= ReadINI('Potion', 'Key', ScriptPath + 'AZKInfo.INI');
210
  NoSS:= StrToBoolDef(ReadINI('NoSS', 'Key', ScriptPath + 'AZKInfo.INI'), True);
211
  QP:= StrToBoolDef(ReadINI('QP', 'Key', ScriptPath + 'AZKInfo.INI'), True);
212
  Temp:= ReadINI('Debugs', 'Key', ScriptPath + 'AZKInfo.INI');
213
  if (Temp = '1') then
214
    Debugs:= True
215
  else
216
    Debugs:= False;
217
  Temp:= ReadINI('Paint', 'Key', ScriptPath + 'AZKInfo.INI');
218
  if (Temp = '1') then
219
    Paint:= True
220
  else
221
    Paint:= False;
222
  Permanent:= StrToBoolDef(ReadINI('Permanent', 'Key', ScriptPath + 'AZKInfo.INI'), False);
223
  if Permanent then
224
    Closed:= True;
225
end;
226
227
Procedure GetInfo(Sender: TObject);
228
var
229
  I, J, K: Integer;
230
  Error: Boolean;
231
Begin
232
  Error:= False;
233
  Case Sender Of
234
    Familiar:
235
                WhichFamiliar:= Familiar.ITEMS.IndexOf(Familiar.TEXT);
236
237
    Potions:
238
              Case LowerCase(Potions.TEXT) of
239
                'none':
240
                        Potion:= 'none';
241
                'superset':
242
                        Potion:= 'ss';
243
244
                'superattack':
245
                        Potion:= 'attack';
246
247
                'superstrength':
248
                        Potion:= 'strength';
249
250
                'superdefence':
251
                        Potion:= 'defence';
252
253
                'overload':
254
                        Potion:= 'ovl';
255
256
                'atkstr pure':
257
                        Potion:= 'atkstr';
258
259
                'atkdef pure':
260
                        Potion:= 'atkdef';
261
262
                'strdef pure':
263
                        Potion:= 'strdef';
264
265
              end;
266
267
    PaintOnSmartX:
268
                Paint:= StrToBool(PaintOnSmartX.TEXT);
269
270
    Debug:
271
                Debugs:= StrToBool(Debug.TEXT);
272
273
    FoodBox:
274
                begin
275
                  SetLength(Food, FoodBox.Items.Count);
276
                  K:= 0;
277
                  For I := FoodBox.Items.Count - 1 downto 0 do
278
                  begin
279
                    if FoodBox.Selected[I] then
280
                      For J:= 0 To High(Food) do
281
                       if (Food[J] = '') then
282
                        begin
283
                          if (InStrArrEx(FoodBox.ITEMS.Strings[I], Food, K) = False) then
284
                            Food[J]:= FoodBox.ITEMS.Strings[I]
285
                          else
286
                            DeleteValueInStrArray(Food, K);
287
                          break;
288
                        end;
289
                  end;
290
291
                  K:= 0;
292
                  For I:= 0 To High(Food) do
293
                    if (Food[I] <> '') then
294
                      K:= K + 1;
295
                  SetLength(Food, K);
296
297
                  K:= 0;
298
                  For I:= 0 To High(Food) do
299
                    if (Food[I] <> 'None') then
300
                      if InStrArrEx('None', Food, K) then
301
                        DeleteValueInStrArray(Food, K);
302
                  writeln(Food);
303
                end;
304
305
    WhenToPray:
306
                begin
307
                  if WhenToPray.TEXT = '' then
308
                    exit;
309
310
                  if ExecRegExpr('^[0-9]*$', WhenToPray.TEXT) then
311
                    WTP:= StrToIntDef(WhenToPray.TEXT, 50)
312
                  else
313
                    begin
314
                      ShowMessage('You must only enter digits!');
315
                      WhenToPray.TEXT:= '50';
316
                      WTP:= 50;
317
                    end;
318
                end;
319
320
    WhenToEat:
321
                begin
322
                  if WhenToEat.TEXT = '' then
323
                    exit;
324
325
                  if ExecRegExpr('^[0-9]*$', WhenToEat.TEXT) then
326
                    WTE:= StrToIntDef(WhenToEat.TEXT, 500)
327
                  else
328
                    begin
329
                      ShowMessage('You must only enter digits!');
330
                      WhenToEat.TEXT:= '500';
331
                      WTE:= 500;
332
                    end;
333
                end;
334
335
    WhenToDrink:
336
                begin
337
                  if WhenToDrink.TEXT = '' then
338
                    exit;
339
340
                  if ExecRegExpr('^[0-9]*$', WhenToDrink.TEXT) then
341
                    WTD:= StrToIntDef(WhenToDrink.TEXT, 0)
342
                  else
343
                    begin
344
                      ShowMessage('You must only enter digits!');
345
                      WhenToDrink.TEXT:= '0';
346
                      WTD:= 0;
347
                    end;
348
349
                  if (WTD > 10) then
350
                    ShowMessage('WhenToDrink is 10+.. Pots will be drank when "[SkillLevel < (SkillLevel + WhenToDrink)]"');
351
                end;
352
353
    SoulSplit:
354
                begin
355
                  QP:= StrToBool(SoulSplit.TEXT);
356
                  NoSS:= Not StrToBool(SoulSplit.TEXT);
357
                end;
358
359
    Start:
360
                begin
361
                  if WhenToPray.TEXT = '' then
362
                  begin
363
                    ShowMessage('When To Pray is Blank! Please Fix it. If you don''t want to pray, Set the value really high.');
364
                    Error:= True;
365
                  end
366
                  else
367
                    if (ExecRegExpr('^[0-9]*$', WhenToPray.TEXT) = False) then
368
                    begin
369
                      ShowMessage('You Must Enter A Value for When to Pray!');
370
                      Error:= True;
371
                    end;
372
373
                  if WhenToEat.TEXT = '' then
374
                  begin
375
                    ShowMessage('When To Eat is Blank! Please Fix it. If you don''t want to Eat, Set the value really high.');
376
                    Error:= True;
377
                  end
378
                  else
379
                    if (ExecRegExpr('^[0-9]*$', WhenToEat.TEXT) = False) then
380
                    begin
381
                      ShowMessage('You Must Enter A Value for When to Eat!');
382
                      Error:= True;
383
                    end;
384
385
                  if WhenToDrink.TEXT = '' then
386
                  begin
387
                    ShowMessage('When To Drink is Blank! Please Fix it. If you don''t want to Drink Potions, Set the value really high.');
388
                    Error:= True;
389
                  end
390
                  else
391
                    if ExecRegExpr('^[0-9]*$', WhenToDrink.TEXT) then
392
                    begin
393
                      WTD:= StrToInt(WhenToDrink.TEXT);
394
                      if (WTD >= 10) then
395
                      begin
396
                        ShowMessage('WhenToDrink must be < 10.. Pots will be drank when "[SkillLevel < (SkillLevel + WhenToDrink)]"');
397
                        Error:= True;
398
                      end;
399
                    end
400
                    else
401
                      if (ExecRegExpr('^[0-9]*$', WhenToDrink.TEXT) = False) then
402
                      begin
403
                        ShowMessage('You Must Enter A Value for When to Drink Potion!');
404
                        Error:= True;
405
                      end;
406
407
                  if (Error = False) then
408
                  begin
409
                    Closed:= True;
410
                    AZK.CLOSE;
411
                  end;
412
                end;
413
414
    ZombieKillerLabel:
415
                begin
416
                  Permanent:= True;
417
                  SaveInfo;
418
                end;
419
420
    Save:
421
                SaveInfo;
422
  End;
423
End;
424
425
426
procedure InitForm;
427
begin
428
  AZK := TForm.Create(nil);
429
  with AZK do
430
  begin
431
    AZK.Left := 371;
432
    AZK.Top := 56;
433
    AZK.BorderStyle := bsToolWindow;
434
    AZK.Caption := '~AZK~ Armoured Zombies Killer';
435
    AZK.ClientHeight := 436;
436
    AZK.ClientWidth := 386;
437
    AZK.Color := clGray;
438
    AZK.Font.Color := clTeal;
439
    AZK.Font.Height := -11;
440
    AZK.Font.Name := 'Courier';
441
    AZK.Font.Style := [];
442
    AZK.Visible := False;
443
    AZK.PixelsPerInch := 96;
444
  end;
445
446
  ZombieKillerLabel := TLabel.Create(AZK);
447
  with ZombieKillerLabel do
448
  begin
449
    ZombieKillerLabel := TLabel.Create(AZK);
450
    ZombieKillerLabel.Parent := AZK;
451
    ZombieKillerLabel.Left := 112;
452
    ZombieKillerLabel.Top := 8;
453
    ZombieKillerLabel.Width := 165;
454
    ZombieKillerLabel.Height := 19;
455
    ZombieKillerLabel.Alignment := taCenter;
456
    ZombieKillerLabel.Caption := 'Armouzed Zombies Killer';
457
    ZombieKillerLabel.Color := clBackground;
458
    ZombieKillerLabel.Font.Color := clTeal;
459
    ZombieKillerLabel.Font.Height := -16;
460
    ZombieKillerLabel.Font.Name := 'Calibri';
461
    ZombieKillerLabel.Font.Style := [fsBold, fsItalic];
462
    ZombieKillerLabel.ParentColor := False;
463
    ZombieKillerLabel.ParentFont := False;
464
    ZombieKillerLabel.Transparent := True;
465
    ZombieKillerLabel.Layout := tlCenter;
466
    ZombieKillerLabel.ONDBLCLICK:= @GetInfo;
467
  end;
468
469
  Panel := TPanel.Create(AZK);
470
  with Panel do
471
  begin
472
    Panel.Parent := AZK;
473
    Panel.Left := 8;
474
    Panel.Top := 32;
475
    Panel.Width := 369;
476
    Panel.Height := 393;
477
    Panel.BevelInner := bvRaised;
478
    Panel.Font.Color := clTeal;
479
    Panel.Font.Height := -11;
480
    Panel.Font.Name := 'Courier';
481
    Panel.Font.Style := [];
482
    Panel.ParentFont := False;
483
    Panel.TabOrder := 0;
484
  end;
485
486
  Bevel1 := TBevel.Create(Panel);
487
  with Bevel1 do
488
  begin
489
    Bevel1.Parent := Panel;
490
    Bevel1.Left := 192;
491
    Bevel1.Top := 8;
492
    Bevel1.Width := 169;
493
    Bevel1.Height := 233;
494
    Bevel1.Style := bsRaised;
495
  end;
496
497
  Familiars := TLabel.Create(Panel);
498
  with Familiars do
499
  begin
500
    Familiars.Parent := Panel;
501
    Familiars.Left := 24;
502
    Familiars.Top := 16;
503
    Familiars.Width := 88;
504
    Familiars.Height := 19;
505
    Familiars.Caption := 'Use Familiars';
506
    Familiars.Font.Color := clBlue;
507
    Familiars.Font.Height := -16;
508
    Familiars.Font.Name := 'Calibri';
509
    Familiars.Font.Style := [fsBold, fsItalic];
510
    Familiars.ParentFont := False;
511
  end;
512
513
  DPotions := TLabel.Create(Panel);
514
  with DPotions do
515
  begin
516
    DPotions.Parent := Panel;
517
    DPotions.Left := 24;
518
    DPotions.Top := 48;
519
    DPotions.Width := 88;
520
    DPotions.Height := 19;
521
    DPotions.Caption := 'Drink Potions';
522
    DPotions.Font.Color := clBlue;
523
    DPotions.Font.Height := -16;
524
    DPotions.Font.Name := 'Calibri';
525
    DPotions.Font.Style := [fsBold, fsItalic];
526
    DPotions.ParentFont := False;
527
  end;
528
529
  UseSS := TLabel.Create(Panel);
530
  with UseSS do
531
  begin
532
    UseSS.Parent := Panel;
533
    UseSS.Left := 24;
534
    UseSS.Top := 80;
535
    UseSS.Width := 84;
536
    UseSS.Height := 19;
537
    UseSS.Caption := 'Use Prayer';
538
    UseSS.Font.Color := clBlue;
539
    UseSS.Font.Height := -16;
540
    UseSS.Font.Name := 'Calibri';
541
    UseSS.Font.Style := [fsBold, fsItalic];
542
    UseSS.ParentFont := False;
543
  end;
544
545
  WTDPots := TLabel.Create(Panel);
546
  with WTDPots do
547
  begin
548
    WTDPots.Parent := Panel;
549
    WTDPots.Left := 24;
550
    WTDPots.Top := 112;
551
    WTDPots.Width := 131;
552
    WTDPots.Height := 19;
553
    WTDPots.Caption := 'When To Drink Pots';
554
    WTDPots.Font.Color := clBlue;
555
    WTDPots.Font.Height := -16;
556
    WTDPots.Font.Name := 'Calibri';
557
    WTDPots.Font.Style := [fsBold, fsItalic];
558
    WTDPots.ParentFont := False;
559
  end;
560
561
  WTRP := TLabel.Create(Panel);
562
  with WTRP do
563
  begin
564
    WTRP.Parent := Panel;
565
    WTRP.Left := 24;
566
    WTRP.Top := 144;
567
    WTRP.Width := 137;
568
    WTRP.Height := 19;
569
    WTRP.Caption := 'When To Renew Prayer';
570
    WTRP.Font.Color := clBlue;
571
    WTRP.Font.Height := -16;
572
    WTRP.Font.Name := 'Calibri';
573
    WTRP.Font.Style := [fsBold, fsItalic];
574
    WTRP.ParentFont := False;
575
  end;
576
577
  WTEF := TLabel.Create(Panel);
578
  with WTEF do
579
  begin
580
    WTEF.Parent := Panel;
581
    WTEF.Left := 24;
582
    WTEF.Top := 176;
583
    WTEF.Width := 119;
584
    WTEF.Height := 19;
585
    WTEF.Caption := 'When To Eat Food';
586
    WTEF.Font.Color := clBlue;
587
    WTEF.Font.Height := -16;
588
    WTEF.Font.Name := 'Calibri';
589
    WTEF.Font.Style := [fsBold, fsItalic];
590
    WTEF.ParentFont := False;
591
  end;
592
593
  Bevel2 := TBevel.Create(Panel);
594
  with Bevel2 do
595
  begin
596
    Bevel2.Parent := Panel;
597
    Bevel2.Left := 192;
598
    Bevel2.Top := 288;
599
    Bevel2.Width := 168;
600
    Bevel2.Height := 68;
601
    Bevel2.Style := bsRaised;
602
  end;
603
604
  Developer := TLabel.Create(Panel);
605
  with Developer do
606
  begin
607
    Developer.Parent := Panel;
608
    Developer.Left := 112;
609
    Developer.Top := 256;
610
    Developer.Width := 122;
611
    Developer.Height := 19;
612
    Developer.Caption := 'Developer Options';
613
    Developer.Font.Color := clRed;
614
    Developer.Font.Height := -16;
615
    Developer.Font.Name := 'Calibri';
616
    Developer.Font.Style := [fsBold, fsItalic];
617
    Developer.ParentFont := False;
618
  end;
619
620
  PSmartLabel := TLabel.Create(Panel);
621
  with PSmartLabel do
622
  begin
623
    PSmartLabel.Parent := Panel;
624
    PSmartLabel.Left := 24;
625
    PSmartLabel.Top := 296;
626
    PSmartLabel.Width := 102;
627
    PSmartLabel.Height := 19;
628
    PSmartLabel.Caption := 'Paint On Smart';
629
    PSmartLabel.Font.Color := clYellow;
630
    PSmartLabel.Font.Height := -16;
631
    PSmartLabel.Font.Name := 'Calibri';
632
    PSmartLabel.Font.Style := [fsBold, fsItalic];
633
    PSmartLabel.ParentFont := False;
634
  end;
635
636
  Label1 := TLabel.Create(Panel);
637
  with Label1 do
638
  begin
639
    Label1.Parent := Panel;
640
    Label1.Left := 24;
641
    Label1.Top := 328;
642
    Label1.Width := 42;
643
    Label1.Height := 19;
644
    Label1.Caption := 'Debug';
645
    Label1.Font.Color := clYellow;
646
    Label1.Font.Height := -16;
647
    Label1.Font.Name := 'Calibri';
648
    Label1.Font.Style := [fsBold, fsItalic];
649
    Label1.ParentFont := False;
650
  end;
651
652
  Label2 := TLabel.Create(Panel);
653
  with Label2 do
654
  begin
655
    Label2.Parent := Panel;
656
    Label2.Left := 24;
657
    Label2.Top := 208;
658
    Label2.Width := 84;
659
    Label2.Height := 19;
660
    Label2.Caption := 'List Of Foods';
661
    Label2.Font.Color := clBlue;
662
    Label2.Font.Height := -16;
663
    Label2.Font.Name := 'Calibri';
664
    Label2.Font.Style := [fsBold, fsItalic];
665
    Label2.ParentFont := False;
666
  end;
667
668
  Familiar := TComboBox.Create(Panel);
669
  with Familiar do
670
  begin
671
    Familiar.Parent := Panel;
672
    Familiar.Left := 200;
673
    Familiar.Top := 16;
674
    Familiar.Width := 152;
675
    Familiar.Height := 21;
676
    Familiar.Style := csDropDownList;
677
    Familiar.ItemHeight := 13;
678
    Familiar.TabOrder := 0;
679
    Familiar.ITEMS.Add('None');
680
    Familiar.Items.Add('Bunyip');
681
    Familiar.Items.Add('Unicorn');
682
    Familiar.ITEMINDEX:= 0;
683
    Familiar.ONCHANGE:= @GetInfo;
684
  end;
685
686
  Potions := TComboBox.Create(Panel);
687
  with Potions do
688
  begin
689
    Potions.Parent := Panel;
690
    Potions.Left := 200;
691
    Potions.Top := 48;
692
    Potions.Width := 153;
693
    Potions.Height := 21;
694
    Potions.Style := csDropDownList;
695
    Potions.ItemHeight := 13;
696
    Potions.TabOrder := 1;
697
    Potions.ITEMS.Add('None');
698
    Potions.ITEMS.Add('SuperSet');
699
    Potions.Items.Add('SuperAttack');
700
    Potions.Items.Add('SuperStrength');
701
    Potions.Items.Add('SuperDefence');
702
    Potions.Items.Add('OverLoad');
703
    Potions.Items.Add('AtkStr Pure');
704
    Potions.Items.Add('AtkDef Pure');
705
    Potions.Items.Add('StrDef Pure');
706
    Potions.ITEMINDEX:= 0;
707
    Potions.ONCHANGE:= @GetInfo;
708
  end;
709
710
  WhenToDrink := TEdit.Create(Panel);
711
  with WhenToDrink do
712
  begin
713
    WhenToDrink.Parent := Panel;
714
    WhenToDrink.Left := 200;
715
    WhenToDrink.Top := 112;
716
    WhenToDrink.Width := 153;
717
    WhenToDrink.Height := 21;
718
    WhenToDrink.Font.Color := clTeal;
719
    WhenToDrink.Font.Height := -13;
720
    WhenToDrink.Font.Name := 'Courier New';
721
    WhenToDrink.Font.Style := [];
722
    WhenToDrink.MaxLength := 0;
723
    WhenToDrink.ParentFont := False;
724
    WhenToDrink.TabOrder := 2;
725
    WhenToDrink.Text := ToStr(WTD);
726
    WhenToDrink.ONCLICK:= @GetInfo;
727
    WhenToDrink.ONCHANGE:= @GetInfo;
728
  end;
729
730
  SoulSplit := TComboBox.Create(Panel);
731
  with SoulSplit do
732
  begin
733
    SoulSplit.Parent := Panel;
734
    SoulSplit.Left := 200;
735
    SoulSplit.Top := 80;
736
    SoulSplit.Width := 153;
737
    SoulSplit.Height := 21;
738
    SoulSplit.Style := csDropDownList;
739
    SoulSplit.ItemHeight := 13;
740
    SoulSplit.TabOrder := 3;
741
    SoulSplit.Items.Add('True');
742
    SoulSplit.Items.Add('False');
743
    if QP then
744
      SoulSplit.ITEMINDEX:= 0
745
    else
746
      SoulSplit.ITEMINDEX:= 1;
747
    SoulSplit.ONCHANGE:= @GetInfo;
748
  end;
749
750
  WhenToPray := TEdit.Create(Panel);
751
  with WhenToPray do
752
  begin
753
    WhenToPray.Parent := Panel;
754
    WhenToPray.Left := 200;
755
    WhenToPray.Top := 144;
756
    WhenToPray.Width := 153;
757
    WhenToPray.Height := 21;
758
    WhenToPray.Font.Color := clTeal;
759
    WhenToPray.Font.Height := -13;
760
    WhenToPray.Font.Name := 'Courier New';
761
    WhenToPray.Font.Style := [];
762
    WhenToPray.MaxLength := 0;
763
    WhenToPray.ParentFont := False;
764
    WhenToPray.TabOrder := 4;
765
    WhenToPray.Text := ToStr(WTP);
766
    WhenToPray.ONCHANGE:= @GetInfo;
767
    WhenToPray.ONCLICK:= @GetInfo;
768
  end;
769
770
  WhenToEat := TEdit.Create(Panel);
771
  with WhenToEat do
772
  begin
773
    WhenToEat.Parent := Panel;
774
    WhenToEat.Left := 200;
775
    WhenToEat.Top := 176;
776
    WhenToEat.Width := 153;
777
    WhenToEat.Height := 21;
778
    WhenToEat.Font.Color := clTeal;
779
    WhenToEat.Font.Height := -13;
780
    WhenToEat.Font.Name := 'Courier New';
781
    WhenToEat.Font.Style := [];
782
    WhenToEat.MaxLength := 0;
783
    WhenToEat.ParentFont := False;
784
    WhenToEat.TabOrder := 5;
785
    WhenToEat.Text := ToStr(WTE);
786
    WhenToEat.ONCHANGE:= @GetInfo;
787
    WhenToEat.ONCLICK:= @GetInfo;
788
  end;
789
790
  PaintOnSmartX := TComboBox.Create(Panel);
791
  with PaintOnSmartX do
792
  begin
793
    PaintOnSmartX.Parent := Panel;
794
    PaintOnSmartX.Left := 200;
795
    PaintOnSmartX.Top := 296;
796
    PaintOnSmartX.Width := 153;
797
    PaintOnSmartX.Height := 21;
798
    PaintOnSmartX.Style := csDropDownList;
799
    PaintOnSmartX.ItemHeight := 13;
800
    PaintOnSmartX.TabOrder := 6;
801
    PaintOnSmartX.ITEMS.Add('True');
802
    PaintOnSmartX.ITEMS.Add('False');
803
    if (Paint = True) then
804
      PaintOnSmartX.ITEMINDEX:= 0
805
    else
806
      PaintOnSmartX.ITEMINDEX:= 1;
807
    PaintOnSmartX.ONCHANGE:= @GetInfo;
808
  end;
809
810
  Debug := TComboBox.Create(Panel);
811
  with Debug do
812
  begin
813
    Debug.Parent := Panel;
814
    Debug.Left := 200;
815
    Debug.Top := 328;
816
    Debug.Width := 153;
817
    Debug.Height := 21;
818
    Debug.Style := csDropDownList;
819
    Debug.ItemHeight := 13;
820
    Debug.TabOrder := 7;
821
    Debug.ITEMS.Add('True');
822
    Debug.ITEMS.Add('False');
823
    if (Debugs = True) then
824
      Debug.ITEMINDEX:= 0
825
    else
826
      Debug.ITEMINDEX:= 1;
827
    Debug.ONCHANGE:= @GetInfo;
828
  end;
829
830
  FoodBox := TListBox.Create(Panel);
831
  with FoodBox do
832
  begin
833
    FoodBox.Parent := Panel;
834
    FoodBox.Left := 200;
835
    FoodBox.Top := 208;
836
    FoodBox.Width := 153;
837
    FoodBox.Height := 25;
838
    FoodBox.Font.Color := clTeal;
839
    FoodBox.Font.Height := -16;
840
    FoodBox.Font.Name := 'Calibri';
841
    FoodBox.Font.Style := [];
842
    FoodBox.ItemHeight := 19;
843
    FoodBox.ITEMS.Add('None');
844
    FoodBox.ITEMS.Add('Raw Lobster');
845
    FoodBox.ITEMS.Add('Raw Shark');
846
    FoodBox.Items.Add('Shark');
847
    FoodBox.Items.Add('Lobster');
848
    FoodBox.Items.Add('Tuna');
849
    FoodBox.Items.Add('Sardine');
850
    FoodBox.Items.Add('Rocktail');
851
    FoodBox.Items.Add('Bass');
852
    FoodBox.Items.Add('SwordFish');
853
    FoodBox.Items.Add('MonkFish');
854
    FoodBox.Items.Add('CaveFish');
855
    FoodBox.Items.Add('Turtle');
856
    FoodBox.Items.Add('MantaRay');
857
    FoodBox.MultiSelect := True;
858
    FoodBox.ParentFont := False;
859
    FoodBox.TabOrder := 8;
860
    FoodBox.ONCLICK := @GetInfo;
861
  end;
862
863
  Save := TButton.Create(Panel);
864
  with Save do
865
  begin
866
    Save.Parent := Panel;
867
    Save.Left := 200;
868
    Save.Top := 368;
869
    Save.Width := 57;
870
    Save.Height := 20;
871
    Save.Caption := 'Save';
872
    Save.Font.Color := clBlue;
873
    Save.Font.Height := -11;
874
    Save.Font.Name := 'Courier';
875
    Save.Font.Style := [fsBold];
876
    Save.ParentFont := False;
877
    Save.TabOrder := 9;
878
    Save.ONCLICK:= @GetInfo;
879
  end;
880
881
  Start := TButton.Create(AZK);
882
  with Start do
883
  begin
884
    Start.Parent := AZK;
885
    Start.Left := 96;
886
    Start.Top := 400;
887
    Start.Width := 57;
888
    Start.Height := 20;
889
    Start.Caption := 'Start';
890
    Start.Font.Color := clBlue;
891
    Start.Font.Height := -11;
892
    Start.Font.Name := 'Courier';
893
    Start.Font.Style := [fsBold];
894
    Start.ParentFont := False;
895
    Start.MODALRESULT:= mrNone;
896
    Start.TabOrder := 1;
897
    Start.ONCLICK:= @GetInfo;
898
  end;
899
900
  Timer1 := TTimer.Create(AZK);
901
  with Timer1 do
902
  begin
903
    Timer1.INTERVAL:= 1000;
904
    Timer1.ENABLED:= true;
905
  end;
906
907
  SaveDialog1 := TSaveDialog.Create(AZK);
908
  with SaveDialog1 do
909
  begin
910
  end;
911
end;
912
913
procedure SafeInitForm;
914
var
915
  v: TVariantArray;
916
begin
917
  Closed:= False;
918
  setarraylength(V, 0);
919
  ThreadSafeCall('InitForm', v);
920
end;
921
922
procedure ShowFormModal;
923
begin
924
  AZK.ShowModal;
925
end;
926
927
procedure SafeShowFormModal;
928
var
929
  v: TVariantArray;
930
begin
931
  setarraylength(V, 0);
932
  ThreadSafeCall('ShowFormModal', v);
933
end;
934
935
Procedure LoadDTMs;
936
begin
937
  WaitFight_Shield := DTMFromString('mrAAAAHic42BgYOAFYgEg5gdiHiBmB2I+IGaBijECMRMQs0LlQOJcUBqkl9XUCS8mBBgJYBgAAK0nBH8=');
938
  WaitFight_Damage := DTMFromString('mbQAAAHicY2VgYNBmhGAdINYDYn0glgZiBSBWBmI5IJYA4nQ2NoYEPj4wns3DA6a5gPrRMSMWDAYAIPEEVA==');
939
end;
940
941
Procedure FreeLoadedDTMs;
942
begin
943
  FreeDTM(WaitFight_Shield);
944
  FreeDTM(WaitFight_Damage);
945
end;
946
947
Function FindObjectMM(Colors: TIntegerArray; var Dist: Integer; Width, Height, tol: integer; Click: Boolean; Speed: TExtendedArray): Boolean;
948
  var
949
      I, CTS, X, Y: integer;
950
      TPA: TPointArray;
951
      ATPA: T2DPointArray;
952
953
  begin
954
    SetLength(TPA, Length(Colors));
955
    CTS:= GetToleranceSpeed;
956
    SetColorToleranceSpeed(2);
957
    SetToleranceSpeed2Modifiers(Speed[0], Speed[1]);
958
959
    For I:= 0 To High(Colors) do
960
      FindColorsSpiralTolerance(MSCX, MSCY, TPA, Colors[i], MMX1, MMY1, MMX2, MMY2, tol); //Find colours starting from the middle outwards..
961
962
    SetToleranceSpeed2Modifiers(0.2, 0.2);
963
    SetColorToleranceSpeed(CTS);
964
    FilterPointsPie(TPA, 0.0, 360.0, 0.0, 74.0, MMCX, MMCY);  //Filter them so they are on the MM itself..
965
    ATPA:= TPAToATPAEx(TPA, Width, Height);                  //Group TPA into cirles by Distance..
966
    SortATPAFromFirstPoint(ATPA, Point(MMCX, MMCY));            //Sort the colours from the closest to the center.. AKA Me..
967
    if(Length(ATPA) < 1) then
968
      Exit;
969
970
    MiddleTPAEx(ATPA[0], X, Y);                       //In that 2D Array, Pick out the closest to the middle a.k.a. the first one..
971
    if Click then
972
      MMouse(X, Y, 5, 5);                               //Move the mouse to the colours found..
973
974
    Wait(randomrange(200, 500));
975
    begin
976
      if Click then
977
        ClickMouse2(True);
978
      Dist:= Distance(X, Y, MMCX, MMCY);
979
      Result:= ((X <> 0) AND (Y <> 0));
980
    end;
981
    if Debugs then
982
      DebugTPA(ATPA[0], '');
983
984
    FFinder:= 'FindObjMM';
985
  end;
986
987
Function FindObjectFX(Colors: TIntegerArray; Uptext: TStringArray; X1, Y1, X2, Y2, Width, Height, tol: integer; Click: Boolean): Boolean;
988
  var
989
      X, Y, I: integer;
990
      TPA: TPointArray;
991
      ATPA: T2DPointArray;
992
993
  begin
994
    SetLength(TPA, Length(Colors));
995
996
    For I:= 0 To High(Colors) do
997
      FindColorsSpiralTolerance(MSCX, MSCY, TPA, Colors[i], X1, Y1, X2, Y2, tol); //Find colours starting from the middle outwards..
998
999
    ATPA:= TPAToATPAEx(TPA, Width, Height);                  //Group TPA into cirles by Distance..
1000
    SortATPAFromFirstPoint(ATPA, Point(MSCX, MSCY));            //Sort the colours from the closest to the center..
1001
    if(Length(ATPA) = 0) then
1002
      Exit;
1003
1004
    MiddleTPAEx(ATPA[0], X, Y);                       //In that 2D Array, Pick out the closest to the middle a.k.a. the first one..
1005
    MMouse(x, y, 5, 5);                               //Move the mouse to the colours found..
1006
1007
    if Debugs then
1008
      DebugTPA(ATPA[0], '');
1009
1010
    Wait(randomrange(200, 500));                      //Wait for the uptext to show..
1011
      If(IsUpTextMultiCustom(UpText)) then
1012
      begin
1013
        if Click then
1014
        begin
1015
          ClickMouse2(False);                              //If it finds it, click the object/item..
1016
          wait(500);
1017
          if ChooseOptionMulti(UpText) then
1018
          begin
1019
            Result := True;                               //If it clicks the object, return true..
1020
            Exit;
1021
          end;
1022
        end else
1023
          Result := True
1024
      end else
1025
        Result:= (((X <> 0) and (Y <> 0)) and (Click = False)) ;
1026
1027
      FFinder:= 'FindObjectFX';
1028
      UptextF:= Uptext;
1029
  end;
1030
1031
function AutoColourLadder: Boolean;
1032
var
1033
  arP, arAP: TPointArray;
1034
  arC, arUC: TIntegerArray;
1035
  ararP: T2DPointArray;
1036
  tmpCTS, i, j, arL, arL2: Integer;
1037
  P: TPoint;
1038
  R, G, B, fx, fy: Integer;
1039
  X, Y, Z: Extended;
1040
begin
1041
  tmpCTS := GetColorToleranceSpeed;
1042
  ColorToleranceSpeed(2);
1043
  SetColorSpeed2Modifiers(0.09, 0.26);
1044
1045
  if not(FindColorsTolerance(arP, 2509141, MSX1, MSY1, MSX2, MSY2, 5)) then
1046
  begin
1047
    ColorToleranceSpeed(tmpCTS);
1048
    SetColorSpeed2Modifiers(0.2, 0.2);
1049
    Exit;
1050
  end;
1051
1052
  arC := GetColors(arP);
1053
  arUC := arC;
1054
  ClearSameIntegers(arUC);
1055
  arL := High(arUC);
1056
  arL2 := High(arC);
1057
1058
  for i := 0 to arL do
1059
  begin
1060
    ColorToRGB(arC[i], R, G, B);
1061
1062
    if (R >= 68) and (R <= 103) and (G >= 57) and (G <= 88) and (B >= 29) and (B <= 46) then
1063
    begin
1064
      ColorToXYZ(arC[i], X, Y, Z);
1065
1066
      if (X >= 4.18) and (X <= 9.38) and (Y >= 4.37) and (Y <= 9.85) and (Z >= 1.83) and (Z <= 3.91) then
1067
      begin
1068
        for j := 0 to arL2 do
1069
        begin
1070
          if (arUC[i] = arC[j]) then
1071
          begin
1072
            SetLength(arAP, Length(arAP) + 1);
1073
            arAP[High(arAP)] := arP[j];
1074
          end;
1075
        end;
1076
      end;
1077
    end;
1078
  end;
1079
1080
  SortTPAFrom(arAP, Point(MSCX, MSCY));
1081
  ararP := SplitTPAEx(arAP, 20, 20);
1082
  arL := High(ararP);
1083
1084
  for i := 0 to arL do
1085
  begin
1086
    if (Length(ararP[i]) < 10) then Continue;
1087
    P := MiddleTPA(ararP[i]);
1088
    MMouse(P.x, P.y, 5, 5);
1089
    Wait(100 + Random(100));
1090
    if (IsUpTextMultiCustom(['adder', 'up Lad', 'limb-up'])) then
1091
    begin;
1092
      Result := True;
1093
      Break;
1094
    end;
1095
  end;
1096
1097
  ColorToleranceSpeed(tmpCTS);
1098
  SetColorSpeed2Modifiers(0.2, 0.2);
1099
1100
  if (i = arL + 1) then
1101
  begin
1102
    Writeln('Failed To Find Ladder.');
1103
    Exit;
1104
  end;
1105
1106
  GetMousePos(fx, fy);
1107
  if Result then
1108
  begin
1109
    ClickMouse2(MOUSE_RIGHT);
1110
    WaitOptionMulti(['adder', 'up Lad', 'limb-up'], 600);
1111
  end;
1112
end;
1113
1114
function AutoColourAltar: Boolean;
1115
var
1116
  arP, arAP: TPointArray;
1117
  arC, arUC: TIntegerArray;
1118
  ararP: T2DPointArray;
1119
  tmpCTS, i, j, arL, arL2: Integer;
1120
  P: TPoint;
1121
  R, G, B, fx, fy: Integer;
1122
  X, Y, Z: Extended;
1123
begin
1124
  tmpCTS := GetColorToleranceSpeed;
1125
  ColorToleranceSpeed(2);
1126
  SetColorSpeed2Modifiers(0.10, 0.45);
1127
1128
  if not(FindColorsTolerance(arP, 2895164, MSX1, MSY1, MSX2, MSY2, 11)) then
1129
  begin
1130
    ColorToleranceSpeed(tmpCTS);
1131
    SetColorSpeed2Modifiers(0.2, 0.2);
1132
    Exit;
1133
  end;
1134
1135
  arC := GetColors(arP);
1136
  arUC := arC;
1137
  ClearSameIntegers(arUC);
1138
  arL := High(arUC);
1139
  arL2 := High(arC);
1140
1141
  for i := 0 to arL do
1142
  begin
1143
    ColorToRGB(arC[i], R, G, B);
1144
1145
    if (R >= 28) and (R <= 95) and (G >= 21) and (G <= 66) and (B >= 21) and (B <= 64) then
1146
    begin
1147
      ColorToXYZ(arC[i], X, Y, Z);
1148
1149
      if (X >= 0.92) and (X <= 7.42) and (Y >= 0.87) and (Y <= 6.54) and (Z >= 0.86) and (Z <= 5.59) then
1150
      begin
1151
        for j := 0 to arL2 do
1152
        begin
1153
          if (arUC[i] = arC[j]) then
1154
          begin
1155
            SetLength(arAP, Length(arAP) + 1);
1156
            arAP[High(arAP)] := arP[j];
1157
          end;
1158
        end;
1159
      end;
1160
    end;
1161
  end;
1162
1163
  SortTPAFrom(arAP, Point(MSCX, MSCY));
1164
  ararP := SplitTPAEx(arAP, 20, 20);
1165
  arL := High(ararP);
1166
1167
  for i := 0 to arL do
1168
  begin
1169
    if (Length(ararP[i]) < 10) then Continue;
1170
    P := MiddleTPA(ararP[i]);
1171
    MMouse(P.x, P.y, 5, 5);
1172
    Wait(100 + Random(100));
1173
    if (IsUpTextMultiCustom(['ray-at', 'haos altar',  'altar'])) then
1174
    begin;
1175
      Result := True;
1176
      Break;
1177
    end;
1178
  end;
1179
1180
  ColorToleranceSpeed(tmpCTS);
1181
  SetColorSpeed2Modifiers(0.2, 0.2);
1182
1183
  if (i = arL + 1) then
1184
  begin
1185
    Writeln('Failed To Find Altar.');
1186
    Exit;
1187
  end;
1188
1189
  GetMousePos(fx, fy);
1190
  if Result then
1191
  begin
1192
    ClickMouse2(MOUSE_RIGHT);
1193
    WaitOptionMulti(['ray-at', 'haos altar',  'altar'], 600);
1194
  end;
1195
end;
1196
1197
  //Written By Flight..
1198
  Function FoundSymbol(Ident: Integer; var X, Y, Dist: Integer): Boolean;
1199
  var
1200
    B: TBox;
1201
    TPA: TPointArray;
1202
    L,i,CTS: Integer;
1203
    ATPA,ATPA2: T2DPointArray;
1204
  begin
1205
    FFinder:= 'FoundSymbol';
1206
    CTS := GetColorToleranceSpeed;
1207
    ColorToleranceSpeed(2);
1208
    FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMX2, MMY2, 5);
1209
    ColorToleranceSpeed(CTS);
1210
    if Length(TPA) < 1 then
1211
      Exit;
1212
    ATPA := TPAtoATPAEx(TPA, 8, 8);
1213
    L := High(ATPA);
1214
    SetArrayLength(ATPA2, L+1);
1215
    for i := 0 to L do
1216
    begin
1217
      B := GetTPABounds(ATPA[i]);
1218
      with B do
1219
      begin
1220
        if (Ident = 1) then
1221
          FindColorsTolerance(ATPA2[i], 16514299, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5) //Prayer Altar White Symbol..
1222
        else if (Ident = 2) then
1223
          FindColorsTolerance(ATPA2[I], 1244922, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5); //Prayer Altar Yellow Symbol..
1224
1225
        Result := (Length(ATPA2[i]) > 0);
1226
        if Result then
1227
        begin
1228
          MiddleTPAEx(ATPA2[i], X, Y);
1229
          Dist := Distance(MMCX, MMCY, X, Y);
1230
          LProc:= 'FoundSymbol';
1231
          if Debugs then
1232
            writeln('FoundSymbol: True');
1233
          Exit;
1234
        end;
1235
      end;
1236
    end;
1237
  end;
1238
1239
function round2(Number: extended;Places: longint): extended;
1240
begin
1241
  result := round((Number*pow(10, places))/(pow(10, places)));
1242
end;
1243
1244
Procedure ResetEverything;
1245
begin
1246
  ColorToleranceSpeed(RCTS);
1247
  SetColorSpeed2Modifiers(0.2, 0.2);
1248
end;
1249
1250
procedure PrintOnSmart(TP: TStringArray; Placement: TPoint; Colours: TIntegerArray);
1251
var
1252
 x, y, bmp, I, B, H: Integer;
1253
 ATPA: T2DPointArray;
1254
 Canvas: TCanvas;
1255
 Colors: TIntegerArray;
1256
begin
1257
  GetClientDimensions(x, y);
1258
1259
  Bmp := BitmapFromString(507, 163, 'meJzsvXdwG9e352n7JwJoMCfJ' +
1260
        'UbZly5KVmUlkgMhEJHIgco4Ec85BFDMUqJxlZVGS87NkW372++Xw0' +
1261
        'syb92Z239TW1Gzt7rya2trZ3dq/9oLXbLfAIJKWTIU+9S0W2Gjcvt' +
1262
        '1ofPrcc+8996WXcMMNN9xwww033HDDDTfccMMNN9xwww033HDDDTf' +
1263
        'ccMMNN9xwww033HDDDbdkk1WJBxoDQ221dBqFQCCsd3Vwww033HB7' +
1264
        'IiYS8j850v35sb7PjvXPHuySigTrXSPccMMNN9wes5HJZJFIdGio4' +
1265
        '+qhwZP9sWN9dWcG67Zu3bre9cINN9xww+1xWn5+frShaWKg80h/01' +
1266
        'h7NObQdbU1dTRE1rteuOGGG264PWZTabVtbS1TnbXDTcHBOldLrb+' +
1267
        'hqy/S2JyamrreVcMNN9xww+2xGYNBb64Lt/hrDjQH++o8DS5dsLY2' +
1268
        '1NAUa20rKSlZ79rhhtvzYAQCQSCys9hV610R3F5o27ZtW0+tpztk8' +
1269
        '1Zz6s3SgE5ktxj0dpfN44s0tag0mvWuIG64PfOWnp7OYEdffbNx05' +
1270
        'tRvsBBIpHWu0a4vaBW43XZYk6LTlbNKq5mFRlF9JDHZrE77P6Qv7b' +
1271
        'eYrOvdwVxw+2ZN57Es+mN2MY3AvmvufNf81bQI6+//sZ6Vwq3F86A' +
1272
        '42FvbpR5OpgyM3PfB+U73pUwyjqD1qhd57YaXT6/3eVe7zrihtuzb' +
1273
        'Uxm5aY3InmvufJeteVsNOZuMm583VdG8eN+Pm6/sFVyuaGxYZV9gC' +
1274
        'NsoDPLCyiFFXyWXMz26WVDMVcs5LW5XOtdR9xwe4btPWDb6/Nf9+W' +
1275
        '+agGoz85XZedV526qyX89IBCa17t2uL1AtmHDBqPNHhjtH5g90XL+' +
1276
        'sHe0U9XkpVRZK0RmpcNUF7IHfC6L3bHe1cQNt2fVCAQCnR3Z+GZd3' +
1277
        'qvWnHxNVp4iM0eUmSPMztcAbz93k4tCZa53HXF7UayouJirqwkMdE' +
1278
        'SO9LdcGI8dG4qdGlY6OinURrm7PdhXb7GYFdXV611N3HB7Vk0oNr+' +
1279
        '6uT3/dVdOvhpwPj2LnZpRkZZBycwV52zU52607SoIvrV583pXE7cX' +
1280
        'wjIzM8srKrqOT/lGO7vOHGo7MT14/dTgzVO1U5O18bG65pBCqSwuL' +
1281
        'l7vauKG2zNpZeW0Vzd35L3mS8tWkdJ5xFQagVyaQtpDIO0mpVWkZw' +
1282
        'tzNhmy86x8UQC0tde7sri9EAbutO4ThzrPHew4PR3c3+PqbnF0Nnj' +
1283
        'H2tpPjjvt5hqTAU+ehhtuazOe0LfxzVjOphpypjSFzP4VqexXxL2/' +
1284
        'Iu76FWFnCqkoNZOdmSvN2WjK22R5550t611Z3F4IS8/IqBucVNsaH' +
1285
        'N3N/okOV3+zsSGsawrVDbZZddV6rWq9K4gbbs+kpaenf7gnmveqI2' +
1286
        'eTPiuvKjWDQSAXphC3AxGRneT0koxsTkY2LytXlp1noNE4611f3F4' +
1287
        'IA8DvO3nE4G6XaWP+4f7waK+nv8M90OHzWa169dt4dBE33NZkO3ft' +
1288
        'zn/NnbNRn7NRnZUrychmp2VSyGn7EkovTMuomAM+EDczWyaW4kMjc' +
1289
        'PslDPghHQcnAoOd7t62yOiQr6/T1dOqrwtwOLjLgRtuazcevzp3kz' +
1290
        'V3kwF4+Nn51Vm5VRk5/LQsZloWIz2LlZFdCf5NKJubniWgMvHBz7j' +
1291
        '9Epaamto4Mhgc6HV1Nde01OoaAqbmiNmN+xu44fazjMpwzA28NOcA' +
1292
        '5m/UZOXJM3NFAO8J5fAycgRzEs4N3RFu2WrIz89f7yrj9vzbhg0b2' +
1293
        'iZH5F6r3GMVeUwin9HZ01yt0653vXDD7Rkw8PMpKCjJzs5J2p6Tk/' +
1294
        'PeB/a8V+25m0w5G7UJDz9PAvz59Cw2EAzmpAMnP5uXkQ38fEF6loT' +
1295
        'OrFxYfnZ2Nj6AB7fV2iuvvLJwI7iRcnNzwR119ft79o46a0ddZKK/' +
1296
        '4fBI95nDBz++FmyIbdq0qbyCQqPTyWTyL19n3HB7yo1AIFQp3Pln/' +
1297
        '7z9/t9WDk2WMtkonDdu3PjuVl/eq3MhnY3q7DzFXEiHl57FmhN77i' +
1298
        '8Tvs7I4qRlCmn0n4Ko77z3Hs/ro3w0+0HbZaFItk7nh9szaenp6bU' +
1299
        'NDY2trXQGA70h+SJxQ3PLmS++aekZ2H905vT9T498NXvw8+vxz6+d' +
1300
        '+e6LSz/cm756yR+ubdo/MXhwpmNgGMB/fc8CN9yeNktNTVVU6V7Vx' +
1301
        '7P/+N/z/+H/zPvd/0YdOPXa66+/NPej27mvNjG7FgI/fyHwmT8qkw' +
1302
        'GUncfbtv3Dl+YGUYgPzGz+0/+88T//P1n3/8sWTr1Ga1zvE8XtWTJ' +
1303
        'fJNp28PjQxGTvyIHuwWGTuWbz5s37T5xt6+qZvDLbMDim19d4I7GO' +
1304
        'qTHg2J/67rNjn8829w/UWF1Gg6VtLN47ebC9f7BjdKKgsHC9TwU33' +
1305
        'J4uq+RyKcW8PFZn5kd/yvvyX3Mv/dfC+P3X30ikwSypaM19tSZnky' +
1306
        '47X5mVJ8nMFSbCOFn0OTHSMmlzYiSUQU/PZr275T1Ae+7MJ3nf/o+' +
1307
        'N//x/ZU7/8Fahg1JUXlBYtN5nidszY2aLhSFV+adPtQ4Odw4M9o+O' +
1308
        'Hzl9ZjB+pP/Y2aa2jpaRiY4jZ4xmm85o0elrHP5QbV93jdtjMNgcL' +
1309
        'r/F4mibmqnrGXD7gwMnzl9+8M3EyWNShRxP8Ycbbqjx+fzyAlbmZk' +
1310
        't63d3c0/8u78L/Unb+j//pv/wfVdKB7HxNVsK3l2TmCOdG4zDTMql' +
1311
        'zoqRmVMAcCz+Sn1xx/zf/zvPr/5rz5f+bP/tvafpjb77Bq2SxCwoK' +
1312
        '1vv8cHtmTK3VllZQduzZKwk1BftHW7q6+8cm+kYOeBo6embO1DY0h' +
1313
        'eqbes9ft7gDaq3JbHU5vcGewf2NbV0Gs91sAciP9Jy95gpHTVZb/e' +
1314
        'BY28TBL/7+T1/++z+fun3dHQy8/fbb631+uOH2VBiVSi0vZma9pkt' +
1315
        'v/Dz32F9yz/9r0ZX/tJfXnpVVlZUnm3PvRRk5APisObyjwC+fU0Vq' +
1316
        'aln2u5IPL/9L7pf/d/6t/57KnXg9q1CpkL8+Fx3CDbdHWmZmpkano' +
1317
        'zBZFQwmlcHYQ2Go6zqdwcjA2HhzZ5fRE+48dMIbCttcHm97n7u1V6' +
1318
        '0xekO1zV3dFk+kb2x6cuaY2xfyd/QHBsYUKvCmKdJ/QO8MDhw++Nn' +
1319
        'f//Gzf/jDV//0d5e/+iItLW29TxQ33J4K27VrF51SmbfFmt76V7ln' +
1320
        '/ynvzH/KKohlZYiy8uRZedLMXHFiKGYWKz2TPg/8chT4yIY9mfL+j' +
1321
        'ff/v7zr/y1TPPnOa4UarQZPaYLbCu2DbduUGg2bL2Tx+IxKrt3rp7' +
1322
        'HYRSKlMRDpGd5fY3dXyTUN0yd0Fpu8WqUwWr2Dk50Dw8fOn2/o7Of' +
1323
        'KLBprePrEqeljxzsPHjM1dnFEEqFI7OoarjY6lCrdyc/u3P3z7z7+' +
1324
        '+9998re/LyzCo4u44fajlZSWFu0peX23O6P/h7yz/5K6t5WQQiOmc' +
1325
        'UhplaQ0NjGNTkytIKaWE1NLCeSSFHJxClI497co5VfF2c1f5t79H3' +
1326
        'nVh95/c49KheczwW2lBnx7pVYLUC9WKLmiKpXB6IvWGm32HYXFVRa' +
1327
        'n3eMTVSmEIqm7Z0Tt8osMVkfPgfjZ89PHj48fnnGF63jyGrne0zE4' +
1328
        '3NY3ODI9PXD4mKvngNBoMzX3CmWqigq6p6H+xu++v/Hbv57921/Xu' +
1329
        'PD5Wbjh9pNVSSQle4s2l/myjv5ThvX6yy9JXiZUvkxgv0xgvJRCfZ' +
1330
        'lA+xWJ+TKB+lJKxUspZS/9qvilDSUvv8wkF3fnXP1vr2snd7y3t6q' +
1331
        'qCu8jw23l9sorr2j1+kqBqEpZbbI73aFwsK7eaHOwuLwCFq9SKGVX' +
1332
        'CgSCKpXdZ+mbtLYPdB0YG5qYdoWbqjT2Gk9EqnVJ1Tart5Yj1lepz' +
1333
        'P5Y44EjRwNDU8pwM4XKLC2llFPpM5/euvLbB+f/5stYd9t6ny5uuD' +
1334
        '1FBtwttUZTVlD8Hr82s6SvrNzN4noqaCZWpZlCr3n7fX32RvW7W3V' +
1335
        'lFCOVoS+jGsoojj173FmUyXetU8W7izhs1ltvvbXeJ4HbM2YEAqG5' +
1336
        'rb3G6a5r6/BFY55I1BkI6i3WIhqjkMah0Vh0Bocnlgd6huvb2w02u' +
1337
        '87qqzZ5RdXWSqlZVG1j8KoZXJXK5DW7w9HW7oHxyeGpaW+ssbikoq' +
1338
        'CwZF9RSc/Jw+d++KuDX16z+laUAOSNHQW4cL0IemsXaEdHyopKK4r' +
1339
        'LS4q4dofb5fY7XX6Hywf+2h1+jc5prnFZrE6jyeZw+tzeIFBZmbyi' +
1340
        'mFq0dx9XZX+/mL7uZ4Hr2dKbOwvYVVKnPwjce0846gqGrR6fzevji' +
1341
        'sTbCoqpdHYFlSlTajoGBpu7e0wOZ/fw/sHxyd6RUeDYcyVGKkdudg' +
1342
        'bb+wfaBwf7xsb7Rsebe3pjLa1cgXgfwH0FpX5i/8zntyZmLxXyBCu' +
1343
        'sUvzud7hwPd+a/vi3x7/5Xyc+/tcyk7+CxuRweFy+RCiSicQKoUhe' +
1344
        'JVHJFVqFUieVqflCGZPFr+SKhEI5aIrz+UIqlb6XJTA3xYcv/2n85' +
1345
        'm/jd9b/dHA9K4r1j4rkCrXBpDaZTHYn8OFVRpPOYmPxBXvKqHRmJU' +
1346
        '9QVdfWHmtrByRv7Oxq6emrb+/sOzDmjdTtLWZ+uLvM7PT1jBxo7Op' +
1347
        'u6x/oGtoPdgvXN4ImQ3FJeUFpWd3EyOjV8+M3L8fvPnhkZXDg43oR' +
1348
        'NHn7+5l7/zb98X9uOXo/tzP+Tk0dO9GUrmQwuSw2H7yg0TkUKgv8p' +
1349
        'dLYFRRGRQWjrJwG/mWyeCwaa4spnONrkzlaW2e+7jn725Grf8GZj2' +
1350
        'slah4/ojKaq5TVLB6fzRPINVq10SRWKA1Wm1hjKKJzSsuowO3vGBq' +
1351
        'ONLVEm1sCdfXR5tb2vsGO/qFgbb3W5tF5It5IrLGjs6W3DzwLEo+D' +
1352
        'to5IYzN4oTXWFLPonScPDV45eeD65ZXUBwc+rude03ceTH3yH0Zv/' +
1353
        'vPQxT9ZBi6Qm0fTQvECprissKS4pAKAvaSUWlJKAX/LyungB1hcAl' +
1354
        '5TCovKCgpLSwuKdjEkqZHpDH8bU+WOjtxoOvhl1+nfjF77m3U/L1x' +
1355
        'PuToOn1WJq6plMoVGJ1VpSsope4uKKwUisVwplsmFRpvGHWRy+L2j' +
1356
        'Y+39g42d3UA2r98TCseaW1r6BgdOXdo/e6/n2ue952+0jk4BzoPt4' +
1357
        'KEQa2mra21v7uq1ury6qLft1HTnxUMjV6+tpEo48HE99xq5en/89v' +
1358
        '/Uc/Y3zVOfVHUeRdrjqaEj+b7ufTRWSVFJUVFxYWHx7j0Fu3cX7Nl' +
1359
        'buGv33j17wYt9e/cVgDf2sbi5zl5yMJ4W7CyRmO0tRyIj1xumP+s6' +
1360
        '+ddTt9f/1HA9zXK5/EoaTVBSwikrE/AELB6vuKxi245dAoXG29pnb' +
1361
        'e6ZuHnP4g/VtrQ1dHQBeaMxfU2NN1rXeejE6N37nVc+U0dbKWKFsW' +
1362
        '2w+eyt1mPnoz2D7mDYG44EYnUWj1cglVuiodrDg10XDh24cmclVcK' +
1363
        'Bj+v51tTtb4eu/H7g0p/rpz7xtB5ltMVJzdPpvnhq1+FMjndjLuvN' +
1364
        'dzhbt9F37irbtXvfjp27d+7a9+GOkg8+pL2zhfX6q+wsY2Nq08E07' +
1365
        'yQ5NlBuCKk9PbaWI6GhK/WTnwxceHTIFNcLq97D56QUmqCsrLK4mL' +
1366
        '5nT+n27bTS0nIao5RROXj+zsjlz4Yufdx38rLV6zM73TUuT43T5Q5' +
1367
        'FLNHGzguz/bNfu4fjxczKLe9v3fLee+9sea+YIzC2D8WOX4lOnbCF' +
1368
        'YyKJVFKtYvEFBp8nfLCv59zRydn7K6kVDnxcz7emb383cu0fWo7cA' +
1369
        '6C21k3sbZkgRSfSPRNprePED0wpBNGGVFlKqpSUzs/IYWTnMzJy+E' +
1370
        'iGhJAqSSFXbUiRINL6tKaJNOcBJDZc4e1QuTqUnu6axnhg8HLTwU+' +
1371
        'm8Ug+rsU0evlTvVTB3LuPuW8fq6CAumcPZfeuirJyucUFUJ/Y507C' +
1372
        'W+g7eUWh0ykNBqVeL1Fr6+IngVfvHJgsF0g3b3lv1569NDZbIJHRW' +
1373
        'JwPtn+4ZesHJVyRur7TP3lSbKgpraAUl1P0YW/s6PDAxbMrrBgOfF' +
1374
        'zPtwCTu09+7eo8pQ0N6cPDm1vGyJGp9OBkWmyYmK8gkoXEdAlQSqp' +
1375
        'gA5mzAeESUsWENCkxTUxMExEJInJlJK19Ks09SWqY2BfuVTs7ZI42' +
1376
        'pafLXD9VN34dBz6uhZq6dd+oUDN276YXFtD37gXM5xQUCJjMcN/Yw' +
1377
        'p2toZhIruCLq2ztA4DkIrPjw92gmbmrjELliaukKjVfIhUrqhmV3H' +
1378
        '3FxVvee//d97cyqw2mzhGeUlNUWqauc9Ud3b//2kcrrBsOfFzPvRq' +
1379
        'nrukiIwpnu9TXk1M3kOranx4eS3V2EtPFxNQfgU9IExBS2YTUSgLg' +
1380
        'fFoVAD4hTUgkipACZ1rbeJpjPym0f1uou9reKrE2yxytgPmB/hPrf' +
1381
        'mq4nkL1zsy09Hb0Hp4cvnTSEw3w9u5R8gX1Y0cX3bl1+iSdzVZ4I8' +
1382
        'aO/eVs7i7wmGBxBFXSBO2r1RpTjaRaJVYoeVUSjkBIYTD3FZe8v/W' +
1383
        'DMn6V2FPLlMqMHcHYzNDQlQsrrBsOfFzPvXpOfqGLHKgyxRjuttTY' +
1384
        'EKB3WmyUrKojEPkJqv8IfP488IUA+AD74BFAJIlIW4xpzaNprhFSY' +
1385
        'OTdSI/c0iSuqa+qaVC4uhsnzq/7qeF62nTg8u1bf/ebG3/4m8u//v' +
1386
        'boF3e6jsYlArHS2yyI9LcfX2QgzejVz8UWlyzcUsbh7dq9p7CkjC+' +
1387
        'WCCWJgT0qg1FtNAHmqw2mar0BePtCmZzF5e3eV/De+1v3UDmVNod3' +
1388
        'oq3x6IGh6xdXWD0c+Liec91+0Hfhj5bmw2J9pNDRRAr0ptX0p9XvR' +
1389
        '6guAoGboPpPwGcRUjkA+IQ08a8QQeItsoiYX50W6U91DSGuwTdrB4' +
1390
        'zR0Wp3t9zRbmk81Dh5ffr2t+t/grieGoH74cjd2U/+9veXvr138ou' +
1391
        'PR69e6DgZZzhD+9Q+obt5arG7ZfrOA6EtUFBB27l7T0kFpYJGrxSI' +
1392
        'RDKFQCKrFImYPH4plV5YWkZhsRlcHosnYHC4ZVTa9p07d+zbK7AbI' +
1393
        'zMDbacmO88dm7h5byU1xIGP6/nW5OzvO0/92tJ0UGqKfehqIrq7Uk' +
1394
        '3daXVDpG16AhED/NSfgP8KSfjeNsV7H4h+RUr4/6nOjlRXP2Lpzov' +
1395
        '2WTuO60PDSne3veVoaOTmyOWv1v0Ecf1iGjh5ef/5W8tPaL3+629v' +
1396
        '/eavz9z/LH7nWvfpI9HRfpbJvI1T3Xv21lIfqR2Om8ONEq2JymQXF' +
1397
        'JfuKy4BhAd/d+7bt3X7h2+9/e7rb771/rbtH+7evXXHjq0ffvjhrt' +
1398
        '1FZeUSncbRVecf7+g4N11TF3KE66bv4DNtcb3g+uuxm/+u5cj9moa' +
1399
        '43Nq02dtKsnekmrpSve3E1xUEpBJwnphehQX+y0T+O++rzGbrB9u5' +
1400
        'gPwEkpCsrkt195JNXemhLnXbYRNw8r099tZjkQM3e8+saCwcrudDH' +
1401
        'dPHqvkUnUrs8nliXb09R86MXfkUfXfgwsfu3ritJx6ZONR+fKbz5K' +
1402
        'HgQLcm7FWEnKa2xv4LV5cvPLb/4M69+wDYN7/9zrvvvQe0+e13Ae2' +
1403
        '3bP3g9bfeAsx/c/Pbib9vv/3aG2/yJVJPKGL3+u2BoL02XNvS1jY4' +
1404
        'Mn3n0e1NHPi4nmt9P3z5L3UTn5hiExJHa56niWRsTjW0kK0xQm7VH' +
1405
        'PB5hETEXpJ4QaBtSKED8uuNIb1ev3Ub7xWSgEASIGI/2dmeqmsluZ' +
1406
        'slLXFr/aTK3+9oPRYautp65POVuFW4nhvFuvuUlUVi+l4hdRefskv' +
1407
        'MKdOqZd66Rmf7fk3rtKrzuCA4TDHUlcidNLWNUa2tchtrumtdQ83D' +
1408
        'V+4uX3Lz5LF333sf4H3bnt1llSymTFxpUEh8ZkXYXuUxcvQKqkxQX' +
1409
        'Mmg8sRsqcoRa27o6GrtHWjs6I42tfSPjieAf/ubR9Z/5cDXev+4UL' +
1410
        'XDvwFvyWr+DPQzryQoKqnwlvivH9fXBIoqpv/DYywQ1zOh6Ts/9J7' +
1411
        '7XXj/dV1gqNLSkO6sR3SNZEMT2RAhZAoJCCfBebKIQBCAF6Qdpld2' +
1412
        'Wcvo9lAoxuWKcjdxNyB8ApGH8N1kZ1uqpoXgbOQ2Ttgapqu9vTX10' +
1413
        '+7uM7GxW5OzeBj/xZIv6JHS94oZhSIg2m4BbTevfAd93zscPlfZfF' +
1414
        'AYGqKbYsUyx9ulwt18vr7Vb+gMWbqaHlnsxM17nTOXOo6cN9aFPIM' +
1415
        'd1p6Gmr4672RXZHKwdmrY3tVgaA55BrrhzsMX7vhidXXtHc3dPR2D' +
1416
        'w937D7T0Dz1e4O8q/MeRy98DLOfk/DOAJ9hirfsDwHKikLf+CejnX' +
1417
        '0lQLCgcPkRAyeD1z3+OQMHSYG1xvTgav/FtY/wLZ8cJpaO9Qhci22' +
1418
        'rJqhhZX4co/XOoZxMITEKWFCn0pmp6U8OHN4bi3tp2vdawdxfrV69' +
1419
        'QCQiXQOCS2HayvYlc3ZBijdFi+611EzJHuz48YmuZ8fdfHL2Kh/Ff' +
1420
        'LPWfuuI7cMzQHRe66vm0AjFtF7diF714W8XuzQy+qNLTU6b2v10uf' +
1421
        'JfGVTe5Na1eccBYN3VohYVP3rrfOjPVcnwqPD3QdjLec/5oy4mpup' +
1422
        'mR6ORgeLS/6XAc7gbalXqjxWCxOoIhb22spW+ga2RsavZxAh9yGAt' +
1423
        '8dGPvqR+Afv6VxAIfCLwGelxfE1osrhdHB67c8w98VNMwLTU3FGj9' +
1424
        'JEuErIiSDTFE7CKQKlNIDKTEl+6cyogdTw8dIvoOMiNDAXewks17X' +
1425
        'dtO4rcTs8SEDWwSrYZsayArYinmSHGk31I7XmVpVDg71f4BU93E8K' +
1426
        'Uv1v00cf2S6jhxrf3TP0cv3lf0HKVW1wiou3kVOxkl2ygF71P3vUf' +
1427
        'nV21myl8rE9CMWnWTS+jT8+yaA9c+X0nJXf1dvW2+sZsXBq6dHr56' +
1428
        '9vAnt6Zmr3afnen76Pj+j851njnSOXN4+My18Ssfx+880OlM/LIyt' +
1429
        'UTi9vk9Lrff438SnbZJwAcCbj+MwIDX3s7fgRfgL6/6LzCEAv4FL0' +
1430
        'BbAN0fvAv8drrg7xY+I7DAB++C1+9t+/fxuYAMKAcUgj0W+hrsDz6' +
1431
        'ItgXQjeAQQGA3tGJo22HhDuAvqDMoBPyFx4o/plAVrnXU+LX7LTPf' +
1432
        'uLtOK6wtO8xRgjlMloXJxijCsaVsYBLyRRmR4xm1x9P9B8m+6U3Bu' +
1433
        'DvUbKjWFsqtGV23Mgc/RXbaU16iksoMZFs9WV6bYojwuif8Pccg7c' +
1434
        '11k7aWw7iH/0JpAnjg1x80XPk2eOpTVrh/u9JTyOIxi7cKGPsUQpp' +
1435
        'SQFcJaRXianfvRPepS/7hIUNDbWzi4AoLHzh+fqhBe/jM+Omvvzj6' +
1436
        '1Senvvrs8Me3Rj46d+Da+QM3L/Rcmum6eLRrf31nsHr8yieBhg4pl' +
1437
        'VrNYOi4XCOXG3J5V3KInw/8+Dyo0XchRcELGAUCf9GAD9wBwByAFM' +
1438
        'J8YTkQueBdbNQdPSh6rDjmAQFKAy/gzmj0BkAeDePA48LXi+4AKgk' +
1439
        'Un4M8qC18NDyuUBWu9dLEjb/pOPG9s/24yt21xVpLMAQQSZBsDJMo' +
1440
        'ppSXKKTd1ozGsxnhoxmhGVLoKNXb7ahxCCqFb4am09pvZrRfIVc2p' +
1441
        'bxUQSpQk60xsixC0odonaP105dNteO68H5355nQ8LXRKzjwXyC1Hr' +
1442
        'sSu/Kt8+B14/6zu1Xut9iqD2mV1IL3uJTdWnmlVgrEMWhkPTPn1lD' +
1443
        '4gSuf2+3awYh8aqT+2N0rhz+/c+jjm+M3Lg1eOtV74WjnuUOxI6O9' +
1444
        '4y09Ue3YtS+6Dp+rolCqWSwjn++Wyeqi9Ss5xJMAPkTooogGzwKIa' +
1445
        'EB1FNFJ5YB3AXuTAvjLAD8+z3Bs8B+8xlZmIfCTdgBgh+Vji3pcoS' +
1446
        'pc6yPQwv3kP7af+MHeekwX3P+GvY6gCyBVAbIpTCrUp7xMIQubM5r' +
1447
        'OZ8ROpcbObIoetTjDKqlyr8ya3nAho+FcRvOFNFV/ystU4k4F2VpL' +
1448
        'loYRbejDWFfdoavu9uOmuglPz7ng8I3h85+t/5ni+kU0dvPr+isPH' +
1449
        'Aevq3uO0BxNbzHkmyuE4soKVsn2kt3vVFWWaWWV6iqWSsxUiZieSH' +
1450
        'T82perKn9i9huZv7HWJhiIKkdaaw6cGO+/fKbtxMHIoUHvaHvT8Ym' +
1451
        'OEwdHOuwuh3b/lS8mbt4T0RmiigoNh+OUShsbWlZyiF8Y+CjSoWA4' +
1452
        'JakcsB1gFhAYvAZOOHzrSQPfWvcH0KYAhwPPmqSzw/Wsavab/nMPA' +
1453
        'j2HTOEeTaA73xohav2I2I8Yg8QPq1MQVrpzMqPpQkbTJaThIqd2JO' +
1454
        'AKcli8Tc6htLqzGdETGXWn093xlFQOYWsV2RIFwCdrQ6/5GmsPXw8' +
1455
        'NXLY2H3Z3nQkOX+859dVKlpbD9Rxo/Ob9lpmPzANHqhpGtouN23ga' +
1456
        'Np+nE5YI6HspBe+zy3dVi5kKIUMupMsENBmfqlHJmkemVz5wd/rOt' +
1457
        '9WhZqtB4tOxWr3Sibaa8YNdDTMj/pne0OGB9ovHDpyeGG3U8lW64Q' +
1458
        'uJ7PcanZlbUiKj0cx8fkNL10oO8QsDH8ZeIMYB7ZP8Z2wMHxAYvAb' +
1459
        'Yhw+FJw180NYAdQNbsI0OPIb/TKvj4Gl3y4Ap1Ki0eMRmV1ZNgKQN' +
1460
        'zgE/RNyqSCHQ06zjma0fpdefy4mdDDb124zWfQJNWvREevhoIrZff' +
1461
        'ybNNpFCYhDe4pNrwmRpiKwOZTpqPWMnfe2T5mivMdxlCLb5emambu' +
1462
        'HTr14gjV37svHIR7HJM2PXv6rrH5GyCqScIl7FLnrRB2J2qVzIqOJ' +
1463
        'RJFyKXEiT8qkidnm4bUUoBmoZHDaYlGq7M2zmRWt49VZ+h4Pf3lJT' +
1464
        'N9HUNFzb3hvobTRF7DKqRNU2PAz2D7cP0nfuEpWW6jic5u79KznEq' +
1465
        'oAP+AxpCZxhdNALADL4F8Zn4Lt0wd+B13A38BH0XVgC+BdgHO17RQ' +
1466
        'UKhHuC7fBBAOM/sEcAsB18CjwFYLQHlIY9LtwTFoi+RisTn4c8fL3' +
1467
        'oDrB88BeIV/0XWFs8hv9MK9I3rvPGNO6oRGfjaq0Z1giij5AlIXJN' +
1468
        'lPi+csNLZalV7ZnNF5C6swXR8fpos6JK/p6xMTV2JqP2ZMLDbziTK' +
1469
        'mnf8Eo5YSOHXBMhK2vJmlqivdbYN24LN6pdQYXVI7d4K+W69umT63' +
1470
        '6yuNZFkzfvSUUcCbNAyipkl3xAL9oq4VGE7HIuvURcWQGAX8WtkIn' +
1471
        'YY1cfMUpn+va3HdPHau1VfmMlpybAtUVkRpPDbfA3+v2tUVedz1kf' +
1472
        'UBjVTL6gRKzhiQVObeXU7NcD5657o0F9tdxUJeqcOLySCq/LTNskR' +
1473
        '3rln0oKAT1GAU8eBnOAwHMEPgXwGP4zrdqhuDHYJDO7hSojS2NJty' +
1474
        'aC8GRJkGwOE9+Vb3ipFCn1ZTSdT4sc14Q6/U4/U6jMCR1Jrz+bUT/' +
1475
        'Xk1t3CqEGN7xSlpJJJ+v95OooWRUhWCPVnSO2cFO1PSA1uSRGZwVH' +
1476
        '5GzoXPeTxbVeivYM88o/rPfa2qNBo4wr41GAV8+iFHJoxQJWmYhTz' +
1477
        'meWhFoecYcMXbyrNGobnFVBA1upVRYYanfJXMKuMd3MeYq7udgUFn' +
1478
        'aP8zpHtrBU23kag4LpUlL6jp+f/PTTCz/cP/Pd50c/v37m3l/F8Vw' +
1479
        '6KxYcogMFHit4JOc5UFv8jM5bJ9JaRSoT0+BIddYhhhhZHiXbYsR3' +
1480
        'APDLkDJHatP5beHpaLhJLa3eVe1JrT+fETudET2eHjmaETtBfE+dk' +
1481
        'lKRkkpFtH6yvp6srkux11XUdjiirQD4Yr1dqKkRqM16f926nyyu9d' +
1482
        'Lwhdusku3NIc/5mWPHxidaa6OqKj6bWkQp2c2sKKikFVXSiwSV9LE' +
1483
        'ry3Xuj1yY5Wl1DqO4zi706ColiioKv4rhDCiHxpjOENMRkLZ2iSL1' +
1484
        'hUwuX8xzqhkeLTMYtAxdPzfz5ez5b768+psHt/74Q/zOoweM4cCHg' +
1485
        'gP1Ua17fXD9fA2cuWEINIh0VonWQje6EGuErI2S5WGyJUJ4vYrwmj' +
1486
        'jjyDHy0XN7DxzxOfyVNPZr9r5U4NhHj2XUHktVdZE+0KWQmSkIPYV' +
1487
        'UjsgcZH0tWRFNqYlWNPT5Wvq0nqjE6EgUbnJZ6zrW/WRxraMM1pqI' +
1488
        'w3jm0OH+lpaA3e4wGrUyKY9BSTC/vJBVUVLF5dS29y1Twv6Tl+p7+' +
1489
        'oRSQcwqDJp4bg3DIqvQS6k2Pc9hErhMAquGUyOnW+QUq4JiVzGcKk' +
1490
        'bQId1/6dShz26c+uqTC3/1xY1ffzc1+1ePrCoOfFzPq0avfGaOtFb' +
1491
        'p7SKVsUxnJ9miZG2MXF0LPHzCG5KUDA7Z3Jh+6mTqiePvt7TtVpgz' +
1492
        '3JPp4cNp2j7SDkMKUpGSUp4APpmeQihFhFayGbQOagnm2rK24VDfu' +
1493
        'CnYoLB4q4yOKqPT1zm87ieLax3Ve/wjt1F5aGQk5HS6zWabXq+Vyf' +
1494
        'QKhaiSTS0t4VBpYItGpVkm9cHAoeOTR4/rrXaLqjJk5tlVTGs13a1' +
1495
        'luTRMIIucWiOj2qsZZjnVIKkwySgOFT1iE/eenNp//ez47PmRy2f6' +
1496
        'zp5LKn/08iftkzMHLt7BbsSBj+t51dSt++7WAYnRKVTqCzQ2IvDw1' +
1497
        'dFEKN5aS3xTmpJC2/AyhVysz+roIh2cTps6hNC9xG3GlDR2yoayBP' +
1498
        'DJjB+Bn1JKouvINYmRmSRDZHusJ3LgiCnQILd4xTqrSGdrGF189bq' +
1499
        'VCPYT4Y3KZ12RhsaB1la/3Q7YbtFqNTKZWiJRCIWUkhIJn2/R6QRs' +
1500
        'dsdSnft3HgwdnBmJH1KZLEqF0G/kONQMW3VCNQqaRlSq4BWpBSVaU' +
1501
        'ZmSV6zkFRkk5WCHWps4tr/NM9Ju6W0TBVqqIsOd8ytqtU4csTltMj' +
1502
        '7FoJGOX3so9QcOfFzPre48aBg5rLD5pVrLXp2DYAqQlaGEasLE16p' +
1503
        'SiIwNL1Nff5OxjSXK17nTTp5Oax7e8FJ5CgIgT00hU34C/oYSYoGc' +
1504
        'bAmTJUFEG3zV19R+4oo11Cw1uwRqM3ig9J54RKrzZQQHKhfT/wFg/' +
1505
        '8mNScD1pDVy6W57W2etx+symWo0Gp1CoRSJZAJBJZ1uUquVYjGXwd' +
1506
        'DojIuOyZ+48VVLb39rX3+VWiORSm1SroZPkVcWyTgFQvpudtmHtMK' +
1507
        'tjOIP2GXbBbRdEvY+najMo2OHzbzGoRa+w1uhCVW6e6rbjtgnb/We' +
1508
        'vOoJegWUXWL6Xhm7oH0iOWkbDnxcz7Faps5qvHWVEs07EgPRHCQrQ' +
1509
        'uTqMNkcIm4SbyDSEUnonbr2XRx5ZiabsENHojvAUyCFzJoDPnUe+D' +
1510
        'QAfMI2EVITQiQBRB1MtYa7z98JtQ/KzG4A/GpbYP+lj9dWPUB4OME' +
1511
        'Q5htZ98v1dAom6cXqF8hzDg4KBA6Ezv18pECLsmP/ZMjlthsMOrlc' +
1512
        'LhSKuVyL2eKz2YB7z6JQvHWti65RMnjmevvAoCccZQlF1UKRRSDUc' +
1513
        'ipFFWWMwt3le7aJZRKRVEQr/kDM3FvNL9ZXlZnlVL+RGzJWNvRG6U' +
1514
        'Yb29aubJo2D1001nZK+RQRbXcVY4+Uuc+klSwMIq0Q+LDVuVDQLaE' +
1515
        'L/g6bHm0NWmH56EY0nRq2ELjxMebSRw/3pO8uXE9CEzfvq0I9PGNo' +
1516
        'RxE9nysnGvyIxIco/IjeR8gVEDI56VOHs+5/mWdpIvyKSSCwCBtoK' +
1517
        'WT2IsBPKSG8xUWMPqTKiyh8Gwye9nOz3pZ+4NuLdVZTuHns+qM7yx' +
1518
        'YVnAkC9TN/Qc+EYE6VRRMnLhTMjog+EJP0pJPfwomfSTnV4dwfiKO' +
1519
        'lmmMjF25HGtvdLq9BoxVxOP6G9lhLl0yhaps8vtSxug+f6T0wqrfa' +
1520
        '2VyeVSw28flqNltcQaHt3SeRKMEOw+dnBYwE7U2yCquSmnDvawTRG' +
1521
        'l6s1S322LjOJkXzYW39EK90O5+yU84plAvpSl5Zy8j4wmOtEPjwm4' +
1522
        'o/nFgebIFPW3T60s+8Ex5ZPnZG7cIJv/HHnfceezhcz5xA87lx4ix' +
1523
        'L5flgb/kmsY5oAMT2Ico54OcJCa9Qyepg+tEZItOdAH5qJSGBdxYG' +
1524
        '+MwfgU8oJbzKRvQeROoFSjF4XRMn+RpXGV/FUpjlrobxNQEfzR8Ch' +
1525
        'Y4EfhocjCdUBzi9cYW/KTgRfinBSZ1P7gqgz2Ls1EsYf1tRi+zOg/' +
1526
        'FrXw6cvDp4+sbEja8mby43F7t1NN45OCxSqkSV3Bo+38jnyxkMfll' +
1527
        'Z2c6dDYPT8bmUC+pqkZJXZJZTAPBdGlbUKqyzCZrbPIMXbg+cv8MP' +
1528
        'DfJkKk7x1irGXmllqaxuwD99YeTyIgNBVwh8OLM1/jBRYZMH++6at' +
1529
        'cLyceDjWpUGz3/q7DjJrfa+XxNNUTkQsQdReBGNh5AjIJCYhGwu8T' +
1530
        'VRYuHyVG7i71LAJ5am5NIR8HGZCxG5U7RuWqSTKtTuY0qLKpUVEvP' +
1531
        'aQjowfyAq9KZ9GoC/2p8z+I2spIUCaY/mS1leWLouqqTJMo+3BwQF' +
1532
        'PtaVhblclj8F2DBZ1ZfYOjza0NHFEYqqORxAex2Xq2Aw2EVFPAZ7c' +
1533
        'j5rR6S50aKg2lR0WzXNqWEC4De4qjrrTWNXEvde7MAMn1HEq9gpY+' +
1534
        '4WqLSW6Wttd3/XOfvD2M2vk7+CVcbwFxIVG12BMRBv5+9gqnlw1mh' +
1535
        'ifPRqoDnn11b+moGPzcOPLqcIQ0ZoqnyYUQfsk5SWJ44vkvhsqvf0' +
1536
        '3fD+6/bmw+/URFKUNoBrROFB1C5CNp9AZhEQNoHEIpA5Cfc+lZPyI' +
1537
        '/CZScDfQCpLyaAiChuicCNC1waVY0ew29YcLxfqdlF4xljPGpa1BT' +
1538
        'cSpB9MD4LNE4iSBN6Z8F8YxnxksWBnuA5dEnNg3qqF0e9HBqgfWQf' +
1539
        '4G0e9blDgUiSEHjs4a9iWX4lgHhWYKR3OlIFblvLwlzrN1V6u+HwC' +
1540
        'liSYwBSLy8Tf0B3g82gl1Zia/bq+o9vmD/J4fAOPZ+DzlUymoLycU' +
1541
        '1Tkr2//6TofPhkwcb0GjlVJ9+jYUZuoI1jdV6sZnjk+NfuNx+u0ao' +
1542
        'RqEVVI27NbbODVjQRPfxo6+3nTR/cOXL+HPdzPB34cw96kVPPgm4W' +
1543
        'J8dGnJMxUAzcuetFWUv4agL8wDz/8XuDNCe9A2IMGagUrjyYOwsIf' +
1544
        'Hz73bKlz5npg4LKn6/TmBPCtiNCNKD2I0knInAN+wreHAsBnPwx82' +
1545
        'kPAJ5eTRGak2oXwXRsU9i2+toFLf/T2nmUonE3TF9ZQMRSS6AtsQx' +
1546
        'LCDdyiEGtoKBudDw53RtEKwALuWyxtIFrRBjI2GA5+AhBu4NAwqxV' +
1547
        '6XLRNvZI6xOejUtiDLvqrhIKlraq3IqnhABdFWtS9X+Y0V3u5oOCT' +
1548
        'ZSlPftGNsEmSdDUeGR8YvfKZrzYmrlbzGAw1k1nNZEkoNF5JmYhKH' +
1549
        '8G0HEcvf+q3iADzAe29ek6jW9oZqh5q0Pf0toQbGywakV0v0VbRK8' +
1550
        's/LKDS36LLK8N9+uHT1omLA1ceStH8JICflIgSfRdG42Fkfqmw/xM' +
1551
        'C/sI8/LBTBj7Zsc0HNKka+gL9yvDYzjOnpqkL2uCwzNa2SechKO2I' +
1552
        'wIUo3YjMTsjgYYDPhn/nCb8A+EjZBmIpiaMHTQOE7yQoHK/aYy3Hv' +
1553
        '66buG1tPtI4fna1tULde3BbooEL7A7Y0TvgrkNfw3gyuGMBjmDX4T' +
1554
        'LdmuhPbGFsBJaDBljQNizYH5QMObl8HaDA/oBvqNeNalEfHi6ElPM' +
1555
        'zxiOhXveihSx1mqu9XFALt6CCPRFJkEG7GhfWYXk/f+TSHZ3VVkKh' +
1556
        'CSoocjpVVUk3iZl6Ec1qUmN3Aw2BsEcTsfBDZn7AyG0LKPtqtb1Rj' +
1557
        'cco0su5pmqBRS0UMvaxy7bL2QVVGq3Y26huGR38KDlp2y8JfLgRAn' +
1558
        '+pZtdjBz6E+cI8/PB+BrcrujP6WbhPkoeP61nU0IVPIkPHdcGOfLW' +
1559
        'DqHQkgK9yIxI7IX1uBfNk4MNhOYyHgU9NAD+lhFShTvTbCl1EhSur' +
1560
        'JhieutsU/9zWdjy6f9WpMtH4MFydM2d+bTg0chLHhItRhkC0xjGe5' +
1561
        'DLsQj8CQZQzH51A/U90FAooE97hsGGbM78gxfJ1iM8jDhYI/sLs4v' +
1562
        'BfLOXQ1UVh7tmF69ytUNg+3EXd+6VOc1WXK+lYWDigz0G0ZGwF4LM' +
1563
        'Pfd6h7uJSjz9UfScvl3O4DGqZll9hkFQ4VPSAqdKhprscmqQ9IzF/' +
1564
        '0FTpN3Lr7KLuiKY7rLZqeFI+XSVm6WVcjYTFKv2QT90lou9pHJ5c6' +
1565
        'nC/JPDRdQ/R72jN5cdXBnyYVzm+RB5+uBH94uANj95LaLZnPIb/zO' +
1566
        'vOg23eOoJ8zsNXe0hiGyGNiwE+a475rDnUMxYAf87DTykm7pMhhgT' +
1567
        'wSTI3oncrG6dsjYcllsbYgVUDH/IT3pmQElgm7C7+R5gGHAsoGFvA' +
1568
        'Dl1At8POKRRZ4N7G+pnozuBwWKcd3Y6mOke3aOfXoV6mDvH5iBDKN' +
1569
        '5hvFntc8GNJcv7hc2EN3yC25qCQhRGVpU4T/RWv8HIlXWFQGmwaoA' +
1570
        'F59FmA9QNhrAkUDs4Xoh58ClvhZRo1jWMzJRS6VkJ1qGlmWYVdRbd' +
1571
        'X02vkFLc9GfhNgyNhMzdo4voMnHqnOGIVizgVcgFdIWQA5iv4FE7p' +
1572
        'diF1F5e6d/+F20sdblXARzPPw4z36Eb0W1iYah77LnolwXbtYkPlV' +
1573
        '15+UrFJH0cvO7p81aJ5+OFGbAWgSwO+XNhRhU2zj8fwn11Nzn7zrj' +
1574
        'NKhMDXeEhCa2JYzmqBv02MmH2IxIvIfASjl+tti/YdGrqw6vE5SS4' +
1575
        'iRCLWXQS3Mby90ZAL2Af7Y1noOqLuOiwHG9zAhmXQQ8PbHmUaLATb' +
1576
        'm/DIOqDhdLQVgBX08JOGISX5zKsSlsmLdjSjOyw8zVVdLojxhZEZ9' +
1577
        'DmFloa9GuiZLno1ln/GTc1+0zZ90qxk1CgoRmmFrZpmllOMknKXQ5' +
1578
        'e059DZGw4V061NZNeptQnNSraAXS7hUsWcCoWQyaPulbKLrSphdbV' +
1579
        '0mcP98jNtYTf6uswiXxhHWlgNsMNSMRw8tvOM6sDNexutIUTpQkRe' +
1580
        'xOAnCW0EcuV8JCcxGjPBfJhFYRHgz4V0CCWEzTzE6EGkHsB8osHrn' +
1581
        'l516B4KEgN6y+hQfIhBNLsCbGwCxsK+xaSbFpYAo0DYLTnzkW2UV9' +
1582
        'BBha/R7Wi8BR0mBAtBYYWN8CxVBxRxYHtSNyUsH3wE+wRJKnwNV2x' +
1583
        '5eC5zmqu6XHCHhcEfsAXujH4WPTT67IMtnaQPrnBIUl1rg1FaDoBv' +
1584
        'VdLAC62wxG5N9vCnb39jNynM0nLwUAgYK+V8Cp9ZxqOXcmnFMj7Fp' +
1585
        'pFMDw72Nzd4YsutZo6nVsD13OvAja/yLAGS3JkYpWPwkXgWAgmG7u' +
1586
        'ewD4BPRoEP9RDwU+aAn/IaBzH5kOoAIg2STUHlgbUkTEOXaYONUKw' +
1587
        'PDLbAjfH55XiWGiICqYIlCVoO/Bc7UgUbncC6tfGHveL4AuAvUwd4' +
1588
        'FmjHJWxZw2Y7ynN0DAx6RjkPr5S3QmEbGsssNr3Maa7qcsUxIQVYA' +
1589
        'torgb1K2J5rWD7MhgT/Ba9BUeDjK++eHvvojtcstFbT7Gq6QVKuFh' +
1590
        'TbrNqFuwViETW/yCAusyhoPHoxo2wvtWQPl17aGPQeHhk5Oj4x1N7' +
1591
        'aET+xzIFw4ON67tV/5YvMmkBiBH6Vj1wTInGtc8DnLAA+bTHg0xLA' +
1592
        'Jxan5LMSnbYqP1IVQAwBQd/0GmqCBhMWCo4fgFSB8/eXmr0OeYWNj' +
1593
        'WAHTKJ9rzD6kTRfFesho3uCw4EyUUf9kXWAZwHHxi91pkmxbpSTK0' +
1594
        '9NAwU7Q2GHLzydRR8Zy5zmqi5XHNMiwH48Zz6GA08E++iB1+3nL5n' +
1595
        'U2OBLZEJWUnXiMrUAePiLAL95eFRE3y1j7zPIGBatupJeXlaw067X' +
1596
        'djcmcnWOdHUNtXcMn72xzFFw4ON67tV18ZN0ox+RJ4CP1ARJrBoCE' +
1597
        'Qt8xhzzGXOQp80Dnz4/Jn8e+DmMRDodXZgsi5DNEXrXIolKHqmkGC' +
1598
        '/ap4md+INN2LJoIfBTWF8aLST+8DMFHVgCu64WonLRMDu6YPRSdUB' +
1599
        '7ypYJzKIDIGEJ8EBwnsvKLxeWxgtjLEldgUud5movFxbpaHgfbSDA' +
1600
        'd+HwJ7RZAQ7x84EfizqAh2+SVWjFZQpuodNlWbhP37HzAtpuMWuPu' +
1601
        'oruMtdYtFqVpMqu1wcdjqZQqKOubqCnb/r2kln34zjwcb0A6rjwca' +
1602
        'rJjyh8iWiMLTIHfPaywKctAH5JShYd0XkTq+JKQ4ghWNg0uNpqYDs' +
1603
        'TAcogXrBuMBSMfi8z5ScHM54kPo9WdAgZCsllAiBYwdHp8C8a6Fi+' +
1604
        'DhB6aDwHRS46nhPWCo2lgyqhT5YVghEcd9GH0aJapszVXi50fzglI' +
1605
        'Wc+Mo8dm4TuAJ9fsAIwnRraOwl7Kld+b0xc+9yhqzRJE7RX8UtklQ' +
1606
        'XB+sXXzfTVRhWVe+U8ik6h1EilqqoqrUzmMBoDdntDY/P45U+WPxA' +
1607
        'OfFzPvRrPziLmAKIMkKVBBACfbp4HPkyhgwKfuiTwSSUp6dTEGH59' +
1608
        'iCxJAH9HrHu11Vg0ASM2mAAFA+9LhT7QySxYFGN3RvsQV5t+E6IPH' +
1609
        'bi4TB1QHxjsBrVoW2DRWU4r7MRcOJkLUhpq4btYJv+cy4WdnqBdLC' +
1610
        'UO+Cx6UugcUhgTgy0O8AJotZPL+g4d04tLVYISeWWhgL6bR9nZPLx' +
1611
        '4E3Lixld6tVghYilEIgD8Kh5PLhQC5vujjVOzyZlzFgoHPq7nXnWn' +
1612
        'biSiMXIfIvGTLSESxTAH/MqHgU9/GPiMZOCnURC5E6CeXBVAtP6t4' +
1613
        'bbVVgOdl4T1/RY+AmB2mmWiJdgECIu+C6i1hoFwcNIKnGm7fB2ws5' +
1614
        'xg5+Yyx0JzYcEu4JW0O5JGzi9VPpoUC059XerxtPLLBQQrufyzEn0' +
1615
        'gwn+xYzjBRVvbVJ1QLCRh7ali7xMzdwloOznlO/qPX1r8eh48LdTo' +
1616
        'BGqNQCqVi8VsOl2rM7ZPHFvhgVYFfO18tnl4bdEk9it/nMHkBnCaB' +
1617
        'ixnmesDnYc1XD00mreGz+J6/lR78jpiDiKKuQE2tjCpAgt8NkD9HP' +
1618
        'OxwIfjM9lY4G9AKkhiK2IMIFV+RON/x980tcqcaXDEb5KLC+GWlDF' +
1619
        'mvS5U0mzf5c8FjkJZOd+wWQqXF7anY4WdvKBwNEr2cwSqt9puZXho' +
1620
        'ePQ1jzZ3euwC6g4xY5ehmivjlghZRRM3Fsu5feeByhOoVCglRlO11' +
1621
        'abUGwRSma9rFUsqrwr46LBh7MiulX/jaB4b9Nqig50Wr9tc1/zaLi' +
1622
        'C8Z9b8veN6nuQ+fDHh4ct8iQVQagKkEh2BwEkCfspC4KfCxVDmgI+' +
1623
        'UbCCVkwQWxBRMjNJR+9/w1I+voAW9UIvOEl33S/SLaSVIhMEl8BN+' +
1624
        'cWa+TN74ymxU1tWFpk+cauvtcXmd8cXcifEbX9HlCmcgFGlo8kZqb' +
1625
        'f6A1mYXWxwrP9BqQzowxgV7cxZOx3jkB5PcG9iYWuojsGm5tguIAx' +
1626
        '8XKuehC4gpgMiBh+9HrCFSMQA+e472vLkUOnTCj2EcLPCZKPATE6+' +
1627
        'Q0hRCOYljSrQUgIdf7c93RA8su6oFrp+jp2FRgF9SI+dvjR45uj9+' +
1628
        'aHBiqmv4QFN3X/f04lEaX88IAH6spc0ZDJldHoPDRZfKV36gNcTw0' +
1629
        'Uwg2LYPGqmDIbWFTsvCKeQ/nun8Ex9+FhSOZrxBwzIw/xIMnWET2i' +
1630
        'Slr4d7wpARPBzcuObQEK7nQ46p0ySDL7FeFfDwLQFSoWYO+Lw5cQg' +
1631
        '/Eh4LfMZiwC8jMQxkS4gsCSDVgWxbePDql0+65k+Dpm4/aJz+WB8d' +
1632
        'XfeaPK+avvNgYOrQ1NETjZ1dsbb2xs5uRyAYbGxedJ0ssHOwrRu49' +
1633
        'zqLVWO2KI2mEgarZfTgCo+1BuCjuYmSgl058xOQF4Yl44sNP8MK7I' +
1634
        'z9LHaOQ3y+qx2mRcqZz1m6MH093A0dRZyDmUm35tAQrudA6pFjiZC' +
1635
        'OdE7WIKlAjQX+/GhMagpCne+uneuxTQJ+ShmxXINYgomlzJX+tJpA' +
1636
        '56VHDIF71jV957ueU99UmSby87ix+Jl1r8/zqunb3/aOT/WPTbT29' +
1637
        'ocbm2w+v83rdwbD/aeuLrr/1OzXRn9IbTQptVpKZSVfJtfV2AJtfS' +
1638
        's51tpG6aDTKLAROezQ35wFqaSTgA+ddi1mUXLouqOJ6+MLgJ+UexP' +
1639
        'NZoa+gJ+F5WNDOj8nNITrOZBmZIaoT+TASXj41iBxHwp8/sPAp2DS' +
1640
        '6UDgMx8CflF1AvjSQKL/1+RvPDO77qf25NR2+q4pdv79D2wZZArbG' +
1641
        'npCR8EO439hBYDfOrg/1NDY2NFlcjhVRpOmxmK0OzoPL5mvafLmPb' +
1642
        'FGT2Gz95SVAz9fb7Vra6yx3v2PPNYagI/NJJm0ZAAW+Enjr7CZJ6F' +
1643
        'g1AVtJsChO3Bq26qAj6avx0Iej+HjQqXbf5igcyNVgPmeBPD3qhOd' +
1644
        'tmn8hBJUTwI+88elr5KBX07cq0Ascx0BMj9oMoSPL+6APROavP1gY' +
1645
        'olO596LX0aHv6XSB3JzeZlZ1FffZXdfuvVzjrXoWoRo5BY7XevF1N' +
1646
        'TsN9HWdovL4/AHtDUWoUzGEQqVNbblx9X3n7ryQUEhgycwO91yrd7' +
1647
        'kcDkC4f6Tl5c/1mqBjw6kXBjYSZqtlhQ2h6v8YJ8C6KIk8fkpzDBu' +
1648
        'v0LgL0xfDwuBNw8ew8eFit8zgeg8PwLfEiTuUS0A/hztEerSwC9LA' +
1649
        'H+XDKnx/xgaMvpch9ayuOFTouZjv97Dnxi++gW6ZfrOg44Tf2Pv/J' +
1650
        'NS+9WWLab0LGruRm5uDouq866hfPAzhKwAfxeOt4E/Upi9dl0S5z5' +
1651
        'Vmrhxjy2qorEr5WoNXyIpLC0rY7CHL9555Afb4idlaq0x0SgwW71+' +
1652
        's9Ojc3qnHlNqBUhjOCsc/otOnUZXJAGYRZfCXPjUhnEb2McKdoOr5' +
1653
        '2AzlEInH2IcjcOjOSsWZtdPSl8PR43CvBboZ+N4DP+Fl6R3kqh1IW' +
1654
        'IXUuUGxCburn4Y+FQM8BnzK9uy5sfhU4F7nwA+oZy4XZIAPhzeafA' +
1655
        'Zxle99MnTI9fA3+dsnt3Bbdt/7d7gRw8a43821f4zlfvbVzcfJmW4' +
1656
        'Aeo3vibO38TPyWGoYz1rKB+b+Xkh0uHPH06bfcHd+3iiW/wbpbKqq' +
1657
        'Li4Uiguo9K2bv+w7eBKe0xiA6MiudLi8Vl9AalaS2Wxu48v5+Q/xp' +
1658
        'm2aL/q8qNnYe/qwpmA6JZVTRJMSl+PprPA3kV4DP8Fl7R3gqABwHc' +
1659
        'jEjdiCRB3KueAL0joR+BTUOATfqI9BD4lEc9BylMIFYT3RYk1UOaB' +
1660
        'rxg+su6ntmbZOv9j7vt3SRmxLaW3txTef/ODKxvfmiBm1BIzY2m59' +
1661
        'fmvSvNfFeRurMzOoQdHVjqLEys07VhSXx42SQ5MWS/S/gU6aUnBfJ' +
1662
        'jPB/vrhr7fCpMzPFuKBmu49KLC0ortu3ZTmYyVf3Dy1tdmb8DuD8q' +
1663
        '1unI6s5hW0TB2aJn9Hzvw1/3S4cKVJEbrMAkAXwQ8fCcgNnGHIpEt' +
1664
        'Mxn4FXMvGHOpklHgMx4C/hZhIoav8Cf6bY1+Yf9aMiQ/JdI3/Wv2O' +
1665
        '1eQ7EYks56YESFmRpGs+tScptTc1tTc5rxNiryNlTl5zM1bhSNX1j' +
1666
        'L6FE22nJSQGbtaCnhdU/sHNDFOEskXZgSCLf2Vr4r7DLl5TQ0+vaR' +
1667
        '8x66dm995R6NXreqz/acuq2ssuwuLdpcWCrUyf+tyWZ4eF/DRcA0e' +
1668
        'kcP1tInTNkxQO+eA70qEdD6UJwMfgcCnzSXVYRN+pD0LA/yKBPA38' +
1669
        'xMevsKXmHtl8HN7Jtb91NamsRs/7BH+W/qrE6m5HUDknBag1FygNn' +
1670
        'JuZ9ZGZ/6rvNyN7Owcmj42sIbysWmN0S4/7EqCOfPZlbF57LEjOmB' +
1671
        'in6SNSfNrFgqUhn1APEMs6uyqs6toFUXb9+7c4g+tutPEFgrTBRyu' +
1672
        'TKS3WN2R2slbS04JxJOn4XruxW4dJGjciMiNSOaAv20h8CsWAJ/1I' +
1673
        '/CReeATKYQ3eEhNkKyey5BsDNI6Dqz7qa1NNR3/kr/te3J2S2pe9x' +
1674
        'zz2+bUTs5pz8gLzAVzODk59PeLZWM3762hfJTtcBkRNGscNskYujM' +
1675
        'Ee1J2/UXHAcJJnTkPrycLBbO9oQ0H8MRZGDFGh5esNlvOk9botc97' +
1676
        'B+t8OqaAtkteWVDfvbpErP2nrrqCYYPNJlWqnP6ALxrrO/HRUjvjw' +
1677
        'Mf13KukrpukdiWAL52L4f8EfP4KgF/xE/A3chCDD1EFEul0dP7S5l' +
1678
        'WnxH8a1Hvhhy20f0vbOELObk3N7ZwHfjs5tys9N5S3SQhon53LePW' +
1679
        'tyraZK2s7BIp3dBgGVovmDlrojS9c1hDNorlwzA/YOemZgl2cHdQB' +
1680
        '7AD+gj3RCNLTg/3Ww8eGxlsiZo5WVOpUMwdPPWJoZZL6jl3wRWpND' +
1681
        'me0vS3c0BiIxhoGl1ydBwc+rudetJaBFI0HEfsQmTcxLPMD2cPApy' +
1682
        '0NfPo88CkpJCohl4WYAmRdOJESXxfYU9+77qe2WnWcv79X8S/Zm2+' +
1683
        'Ss5vnUN8197eTnNOWkefPf7UqEbrPZ+dtZLk7VjpbP0lJqw0mhXEW' +
1684
        'nWYF8ygmDaWDAMd6+Giy+qRC4DKIC5Pkw3YE+piA+erR/uKnJGfd6' +
1685
        'NUv2k/He3oD0Rqu31jpsyunlg7ILKr9F257Q9G6vq7Lf/7m0MdXBw' +
1686
        '8fbOwfWWpnHPi4nnuV1XenqICH70FknoSHvxUAv3IunrMQ+CwCmTM' +
1687
        'P/LllzZHyBPDJCeCnZNIRjRtRBxCRj6T2bgutOiX++qpu5q+3sv73' +
1688
        'rDcukrNic1595xzwwd/uzPxA3iZB7kZ2TjZr8xZhcGgtI3OgsNnsU' +
1689
        'S0PWHSJc+xGCHDsp9CuAexu6FBt+BcUhUaQ4Cgg9AGETVyPDi9fd/' +
1690
        'UeOxvyKiM13Fq70Kdn1/esxYtoHYt/9P292b//zeXffnPj998PnVt' +
1691
        'ySuBqx+FDwScsXH1g+eUPkgSHWqH58Je5B2AQb7Wr9vx4Dedy8iz6' +
1692
        'WRjKQxM7wCzW2H+foY4eXCvUjkg7SedPLFyi9JNtIeL70nng8+bSI' +
1693
        '9PmO23piwG/7EfgI9SUdBpS7STrgog4QFL53vU3Td7+dt3PbinJw5' +
1694
        'fs/Vem57Lsjs9+q+78+vU9f87YNE3OrkvNaU049jnt5NxEDD8r35H' +
1695
        '/mjA3n5OTxdzNMnSduflzjotdqBe7ONQyH1m4Mnj84YUUoVB0Y3eD' +
1696
        'SzHmzK9FCMCS5OqjK3lhY0pPz8+8/cCYTUm1qxhuHcukZI1e+WwNh' +
1697
        'QyeuXj3H39/8qu78Y8vX/jtV4c+/WKpPVfl4aNPWHS80/ILGWMFV5' +
1698
        'NB50zF5z2BpfaHD+6kQbwr11JjRNHVx5LunIU3Eq7nQ4B4u8OtBJU' +
1699
        'HuOWJdcxr/MQtkoeBT38I+KlY4NPmgQ9Tq1FIUiui9SMiL6L0bHRE' +
1700
        'ntoMyd1nf531xlkkzV+oHnRN3N4j+nPma+eRrEZydsMc7TvJOV1pu' +
1701
        'Y2Z+a6cfEleHiMnh/7m+3yhr3Hs1lp6abFCuRp/eInwZZw3SGPsjx' +
1702
        '2dd4n1wyExYEcwFLpAYdLq8NiDwgA+yvynJJKDqn1s2iStMEor9OJ' +
1703
        'Sf0PjGkqYvHXv7NdfXv/9X898fHP0xtnj3989du+T6TuLuyKrDenA' +
1704
        'rnA0m83KH5Twg0lf+vLP/Z8z7Xop4KN3Cw78F0RTt7/ZFmwhaObGU' +
1705
        'ir9iZDOuysBPjMFLmsO8ypA4JMqSGIL2QA8fFCUL8safDozJI/eeF' +
1706
        'Ag/zYtb5ic3UzOaE7Pm0zN6USyahP/5gDHvjMtN5aVX5O7kZ+bS8v' +
1707
        'OKfuwQqVr6h+88hiSf6Ij7VF6o6uBwwDLop9a2JmLpsZKWt496XeN' +
1708
        'jswBJSd12qKHA0eHruYaVrN60ho8P2vy2BTsfVphiZS9zxqNrmRd2' +
1709
        'iSNXJk9//1fAcU/uTo6e/7wvVszX82OXLm76M6rBT765E1avTEpZX' +
1710
        '1SNzq6FnzSVAiU53A5FZjxEhaLJtiPzy+tCMoE72KH+sPDgS1osbB' +
1711
        'Nt/DGgAIloNNAlgc+zKsPdl6YnB+7qiP6GtYc3pP4ZISnSuO3vn7T' +
1712
        'FSOpPQm3HHj4Zh/x7SoCaSngs5cDPqGcxDMhhkCi/1fhTTN5uy99u' +
1713
        'u4nmKT+C78plv4pLbeHnN04N8C+FUm8SAywT82pz8jzZW/U5Oaxc3' +
1714
        'LKN73JpGk8ocljU48vMAV/oeiqFnFMkqscTFIUrNBATdI4fLgRuz+' +
1715
        'adwXdBxSI9g7AXLuwZxblDywHrre+7l/NQtnq6iVmhVTKlHIKJQqu' +
1716
        'Iegdv/HVaguZ/vje+Ozlw5/dGLp6YvDaibFPLvZfOT5w4dqiO6+h0' +
1717
        'xZ+QTB9fdJGmFoBdo4sfHcZFxrQFfrecD1iuDFnQWJMGFOC3y8sEx' +
1718
        'wFZs6Bu8HPwnDQQuBjp2+j9xiaYBmtHloybDAmZXLDpneDr+FDBx4' +
1719
        'anjue8fXp0dj1rzZaw0S1d47SPsTsJ24WJ4CfKphf4pCxBPDnFj1M' +
1720
        'DNFBgV9G4hjJprlFr0BRJl/T2acoQ/LU7e+svV+/seNsanbrHOoTc' +
1721
        'ZvUnJb03NqMPEd2vjonn5ebR33tLVZhpVkV6e46e+Ox1wH+GJMisb' +
1722
        'DnLgcz3wr7LgoHrJcIf1lwaXLYswandkJXE6ZlQ/26Zfx2sA8cwPN' +
1723
        '0/iQb9sflOq3RY6/x2XT2msYVr2OSpMnb98ZuXR2ZPbP/9pnhW6eb' +
1724
        'T0yM3Vi87bkG4KOtLSxRsQktsa+TvlP4L+rPo32+0DEGJWMXLkkCP' +
1725
        'szAg5aMZs5Hl8rFZuNcFPjY6N8yHj42rz7aOF0G+EmT+57OW+uF1d' +
1726
        'Clz9L1XpLKiwiBh+9FjF7imwD43LkhOtw5vDPngE+ZW8p8bnHzH5M' +
1727
        'qYIFPSwA/pYzE0CMQ+DIfyehtOPX4mbkGTdz8Jjrx+d7KM+TMRiSr' +
1728
        'AdA+LbcpPdeblWfMya/KzWfm5JVtfo/HkPvsnRN95x6dhnHNgg38h' +
1729
        'eF6sAUNsyc9DlA4gH0gB5JG78OfLerzo12x8He6fDcizL2z8mwMv7' +
1730
        'A6D51WG80coVBns6iNpnDnWuY1Q03f+XZ09sb+65eHPro+cWvJZsI' +
1731
        'aQjowdA/JjFJ9eeDH5/tlUBgmNdlgSiV0Jh3cZ3ngoyE+NBVbzrIJ' +
1732
        '+eFcPPTfZYC/aB2WAf6Ls9Tys6juk7OIxoVUexChJxHSAcB/YwHw5' +
1733
        '7IrYIDP+hH4iQfBXCIdZC79QkoZkaJJLI9blUihRjT6QkdXN0dmVR' +
1734
        'q7da/l4u2OU4u3zYF6zt6taTtEUbS+ttWaQpYT0wxpOf7M3JrsbFl' +
1735
        'uDi83l7rxDdquMo3E0hzef2LkypIjNx6XYBgWG1HBCjtoBxtgQTte' +
1736
        'Yf5MmHEXS3tsExttmCflXsAupIIm2AdbwE8ePkHW/T5cqOnb3wab2' +
1737
        'mpcHpFMpjGZzU6Xr755+gmP+1ot8NGO2qTADhbF8PtKamfB9hf2ym' +
1738
        'MZCztW4kvAdlHgQx8AjbHDOXTwUZ4Ef7Tm2CotA3zs8KGk50v8UcD' +
1739
        'HY/hPm1qPXCWonEi1ew74bkTvIb4umgM+L8H2BPBZDwGfDLfMrXK7' +
1740
        'EPhlasQ8B3ypl6T3eg8/qZT4g9c/7bx9v/7Mx76JGbhl+s6Dzos3R' +
1741
        'q59GRs7L7b3f1DmTcvTEFK1xDQtOVORliPMyKHlbqS+vUe0T2qoCj' +
1742
        'd5x450n70Fh2X+YkJzlS98Czp1KPOxrQDwy0UH0qChG9gWAJ+Cq6X' +
1743
        'AHcAPHB0HjsYZ4IIXMLKa1NwGW57a7JoDZ24E6urtHp9Cp3dHo65g' +
1744
        'xB2KDCyxrOHj0sqBD4gKrh66hjgafoE57SGKYXgN7rawBNiDDx0Ay' +
1745
        'H+0cQfn2aHtPhijy5nv5UGz5aOJ8dEKwC4b7IMGvIvO48DeeGg8B9' +
1746
        '4/aMMQjsNH/4U3GNgZFos2GNF+BBhBwoaVsE8xPIb/tKl+8iJB5UA' +
1747
        'ULoTvQuQuROsivipcHvgpPwGf+hDwN5QSi5SJ/GlVXkTiJeg9nkPn' +
1748
        'nkSdO6/cHPruD63Xvo6euBU7kXimtJ76yDYw6Z0+6z300evbjS9vE' +
1749
        'BLTJEiGIC2TlZlVkZVdkpVdnJlVlJFdaO1cz9XG4bynpd7F5kaGuI' +
1750
        'A/LvAbhJ4Syhb4A8QGBOCPMSlbMloU9kGAPRwME63jBVlGXYdOOX0' +
1751
        'BezAwcev84dmr3nCtNxJtXTa58c/X45ppi/recIHaZfaEc98WDuOB' +
1752
        'Wx6ZTn/hcbGHg4+e+GKZUVcL4YWVBCU8MuEqHsN/2hQeOZOisiNyJ' +
1753
        'yKYA77GRdwkJCCPBD4tGfik8pSXion7FEhNILE8bpWXqPeaxk88iT' +
1754
        'oPXL4bPnap+5Pf1F/8LHz8in182tAz7hw75Tt4semjz+ovfJGdTyM' +
1755
        'Rd+S9XvpBcdXeSm2puIap8ghMEZmj0d584DGOulmtVnLzw6A6Gpz5' +
1756
        'mYcDPF+GOU9zhuTugyc7xg8c//rOxd/du/bb73qmJl2B0NPj4S+vR' +
1757
        'eP2uHCtuzz9xzcA4MscCN+JyJyI2kHIR4HPmQf+XPTmJ+Azk4GfUp' +
1758
        'FCriBuFyHVTsTgheuhE/Q+3YGZJ1TtA9e+tHSPAea33fwGuPojX/9' +
1759
        'l5P7vvAfPuyZOh45eNveMRadPDly8O7XE/JqnXOg61E8zkJ+0Bs9c' +
1760
        'vfbbB3f//nfX//jd7T/9+thnt4ItHU/6oI8L+DAa83QOdsX1IsvUf' +
1761
        'jABfOkc8IGHr3YS8gRzwOf+CPwf0+lggc/4CfgpxSnEMsI7ApK4Br' +
1762
        'EGydYwYvQlFjGv8gPgi/qnHnuFu05fk7jCTJll89t76HJb85V7nbP' +
1763
        'f11/4dPjeb9tvP5BG2qsCzZ0Xn6LhoGsT3s81eO7S7b/7zfXffzfz' +
1764
        '+Y1T339y4Tdftc+sPYXRCoUnT8P1fEs2epKgcSBS5xzwnUi1nZDJJ' +
1765
        'fyKnUiYibAfBj79J+AjtBQioH05YROTxNYhZj9iDZMddWRXQyJDst' +
1766
        'xPlgQIej+3Z8k8tKtVz7mbjt5RsbOWLrIXl1YXlSjLqfo339jFVJg' +
1767
        'tI/HIqVue6fPR07fDJ2/6x4+OXHsaZ/jiWpUmb9y49ae/ufDgy6kb' +
1768
        'F48+uHXp9/eHP3pSYwBQ4cDH9XzLdOh8itqOSOY9fIOHLA+SikzEt' +
1769
        '2SELC6ByCIQGAm2k9DkaewUEj1lQ3lKDotUrkaMXrI9QnbWp/paUq' +
1770
        'M9pEhPYg0URRAAf4PGW9bU9zOrN3bzXuzIKVWoaVcBd9++KhrdyuA' +
1771
        '4KhX+6kCLs3us69R1sE/n2WvG7glAe/fkWaCeK0/d9F5cq9X0nW+P' +
1772
        'fn7n2h++O/fgi6nbH818fevsD19M372+VA6cxyUc+Lieb6kPXiTpX' +
1773
        'ImlTwTuOeB7///2zvwriiuL47+MidAmc45zzpyZH7InZuISt8QYR8' +
1774
        'clcV8hooCAoCAKcYsaiTskGgyNNIUxi4NxN7J1o2RTo0InOQKN4jm' +
1775
        'T/2du1Ze+PqoXuqq7oWnuOZ/Tp3j16tVGfevWfe/e59h5xLHjMAl4' +
1776
        '6oadKYs3j5609ql/Lhr1zOxRT80i8X9q1H9GPTP36alrUjK3pm75K' +
1777
        'HXLPkfJAcf2o6k7Kv623zm/8uu/5pbog/CXFI/dsH371yGnFhqQw2' +
1778
        'e/X7a5dPaynJlzsubMy589J2/Gooz00o/31Jz7orGfAV9QcTLv+Je' +
1779
        '7L9zcWe8+2tr+WaOY98Mel+fXb+60nu/4SWu7Xtl0TrvVoP143dl8' +
1780
        'yeWObzo+e4FXCIVD1LPWP70Mg/G0CIgwZcUx1eSoW5XIB1PxjmycP' +
1781
        'jI8S+RUEpNx5lpKxiZ9+nIS/DVFKTklY3Z/6thV7thxxLH9IJFauj' +
1782
        '+1cE9KZsno+XlPv7bm6VfXpKzZmlqwL3VjmWPjwdT8Iyn55f/Y9sW' +
1783
        'SE+crrt+ubLw9JmfbX1ZseWtrefnVCCztVrLlnizTr8t9r/ioc2nm' +
1784
        'thmz106bvmry1GWTpy2fu7xg01FnZcNPgS18esmTX1G1te7yweb2Q' +
1785
        '56OI60dVRYnyBASEJfnTrX7ct3NhirPxcqW71w/X/u88VxVUxyDoI' +
1786
        'GNbJksxYiN1UIEnPLAdS1YCJVak8ffcvQT8iBFeEjqjqwig4uSnoI' +
1787
        'vL4/OLiabXE+PnF6ckluasv9k6r5Kx+7jY7ZXOEqOOQoPOwoOOXIP' +
1788
        'OnIOpGaVpWbud2QdcKyn5SOpORXPl9Z84Lz6eWNf0uCTDb+ML91fq' +
1789
        'l0Mtbsn8o4/PR01LV4UOt13yq42lXx1fm7G5hnvZ0ydtXr6zLR352' +
1790
        'Tnf/S5sylkUuKyc9e2f3Ou7ELDgfMNhy80Hxd/zjChtrU9TNRbTcu' +
1791
        'vR89/5XRfqv7hsrPt8vHv6082egbhqKwKviksmu32oBkGuCS84KvV' +
1792
        'xioZzCI/Ktsmugh+0pPpPPv0+qKU5YUpS7aMTisau2nX1CNfPbfL9' +
1793
        'WzRyZT8E6PzjqfkVBCpG445so86sg87sg6l5hxz5J8Yt+fLvNNNVS' +
1794
        '331NZcrfdr3PdC7YuE3eXuqPP/WXezndSePopdHv3PssstO79t2vT' +
1795
        'Ft0XVZzdW1qXvPbowr2RzhZ1uX9pRHd4sN/V3Sp31FoQ4UXtD1/na' +
1796
        'gQRf0+cubztx9fuKa+dONFx0tgT5uIsHVgUfEROmDHUs43D44C2Ah' +
1797
        'MmQ4vCCz5jSHWjB8g9jmV46HKbHO2J3Ey2bxogiQpZKTKl71K+DaF' +
1798
        'xDQsJSfqVtxr6KZ9NKRy/ZOipty/jtn7g896vd9z67fuuTi22bzjQ' +
1799
        'v/vzy9EP1r+498/cPa8cUOccUVU365GzJ2dYaj+WkBDXujlPN3tNt' +
1800
        '7XU36c/2Mz+0a63eY/V/VDd5ae2Bazd2fNVcUte841v3ngutey/c/' +
1801
        'PjKj3uuerae+25LzZm9py/QgeGVofnfHX1eIE8HXhkor9PtQ2/dDS' +
1802
        '/vl3ZX16ZXrmkxf2II8UVR9Vr/L5kExCAntYgQq4KPpJSc1wjyqAo' +
1803
        '+67BqPEcj+GP75x/GtJWakscyaEY1ZFfgw0OOHTpgJNagathWFfxo' +
1804
        'XENCglN+5Ye8yvq3d5a/vTf4nKEk75VNd8su/1J2yWaSMVLa6mYvo' +
1805
        'cuvwem2jjM/dhz79o/PzutPBIlA+ZVfPqz7eec3bfvqb+z9b9v+73' +
1806
        '4+coW4dejCrYPnb5zy3Ktubq9u0puqcXvpNeFy66pONjwtE6davLr' +
1807
        'Uk6S3eg09USVFf8sYVmVH/3Ih/hjazlY9vbiTRvA1f9pJyL4pX72a' +
1808
        'dzqGgq924CI7E6ff14IJvmlHdKjIwoEcTUjBETSxp/TeCrHBL/jEl' +
1809
        'z/ov9rNvlWnWvSvAA3ufXeflU7icMp9r1q3DO+7PO1BrXT6fKiFnS' +
1810
        '82fAJjCP4AzpwhxKrgs/Yiw5iqrursh1pMBd+UMYmMc0uCz0lWmVC' +
1811
        'CLwixBab+gNVchlnoMuzD2lZxywzsAI+khUHYS1CqGn45finu423s' +
1812
        'YcOHzzHRpJY81dRYZS6SQC2NleDTxwWZ6OzSiVDw8WLCYWOeXLyeN' +
1813
        'H+CTfHhC7bRhdp9TxsUi84Vur84Eqqb7lQ3Wp5Bb0hIWAs5Emrcd2' +
1814
        '3MVDg42BB8TFiJGWYhj5wlGN4S0mSMb4ebPWiiY1OzppTF/E4x1Ud' +
1815
        'TmCKB9kJtYpA/p85GnzK+AnhDVEbCVfQ18+SYqBbozxeEAXE23jrV' +
1816
        '/Gtt6/1BU6cod+TSHcvDMtna8ML4cDBf5yhf1rHCRuCVFix18KDBq' +
1817
        'VAHzMNsOmyeBwcgIgzZ77lQfPhChJCpPIRZiAXBHpJaQRCsUuu5Xx' +
1818
        '06VMpCO8PZcSEMR0TwBcEqpPZi3gvDERF8QbBKddPtkWycj+Rzj+T' +
1819
        'iJPL1EcEXBKs4G24NOws/aE+i7abif6iJq5nhMcKlE/d/QwRfEKxC' +
1820
        'D3VVFFOQRDhEfIA6FiXRiPe/a+9gkEBAjx41XnPxHnNY0/Kr6X1a2' +
1821
        'xeh0K6WRHmpscrUZvhmA9c+yauASArPfWfjrQQZkBMUG4K/8SPfqt' +
1822
        'xHRCLPCC8IccXZeJse7ZqWuzaUp08c/NH3/Vrg5aDaouievqCroqJ' +
1823
        'R/TfhvUA8Pz3fMuQXbfja7UmDjUhbhCxp/nlseZWaTi0QS6MoBUFI' +
1824
        'PhLZ9I0fod7IQ4JVwSeFJ3jsemBu/KAgD4OMcheSHsmKMBIxPr6wj' +
1825
        'EA8w72jf8EZX1j38Kbj9536cVc7uJ1BNiZAQdgsST3LPmfRgf4jzJ' +
1826
        'ZfAZx1h0poFU+AxdmMNX++YniK0CZVQPDs0N9NQYgcfyYcTH0iic5' +
1827
        'GCBB5TRfzu9BwPSFesz43GX6Nhb7Yjb50HEPRPW0j0hbqjRQKcOOo' +
1828
        '2WzK639HegS10JQSh9PgqKlvOPcC6iDpgXiBhPjxxnOPLfD84/EvP' +
1829
        'J7w0uPJ43qnT+ydOe3RnFkP31vQs3hJz/KVvtUf+NLWdaev787Y0J' +
1830
        '2R270+j+hal9udmd+VXdC1fqMOrVqbpddJN2rqZHZ/kNmdkdO9ztg' +
1831
        'kq6Arp7Arp6grZ0tX3jaiM7e4c+O2zvzSzo0l+u+mHX0UbDf4UF/e' +
1832
        'TOwkHhTuerB5V2fhbvp9UFDambu1a0NhV0ZOFx3YytW+ZcuJHvpdv' +
1833
        'sq3co1vzVofjqHvkNZ3p2V0r8nophNZleaj+kuX+xYv7Xn//Z558x' +
1834
        '4umNszf97D+XPpfB8uXmycb3p32nr9jNbl6MdPC+nrqdC3bKV+Qd5' +
1835
        '7r2fBgocLF/UsXUp77EnP8FGdrE1d2Zu7sgq6M7K7V6/1LVrSM3f2' +
1836
        'w1nvPHpn2qOZ03vffVu/ngvm9yxa5KP2V6XpV+aDLP03jQ4vi7bqy' +
1837
        'iygM9IvReGuzuK9ncX7Hmz9+EHx3gdFH+nnTheEVtFFo7OmHem3wL' +
1838
        'jm1EiacV50UitW+ej4Fy7Wz4v2NY/OaL6+vHBhz7IV+mXR72OGfjr' +
1839
        'rcqmFLrp9dFPol6ASQr+/G7rWZusHtpZuKB1VXlf2ps6cLQ/yS/8w' +
1840
        'bsFv28r0o9q2/0HRng46yMLd+i9Bq+hO5RV3Umsr0zvpTOfM6pkx9' +
1841
        'dGUcb0TX9b/u+h/zNr/ZDDC/8/b6LSFZY6sNaT5yFrA2g7RxqQkkQ' +
1842
        's+2fP4cOA61I6ovRA/Bnw0BMEGLs+TfgpMjsZTpKmr+mz7OJj34f+' +
1843
        'xbadH1vyeHFPCYc3ovSXNh4ZHKPhcJ0wuTUGIFaL2QpzoPxzL8M8r' +
1844
        'A6sG5xjC/Hvb6LRVDW/S5/L631XBR9JLqy4duIYwnRY2ER++ED9E8' +
1845
        'IUkJoaCTyKMzllMIwiDH2nqJ077k/7kZMWw8DGkB28BTFyiGTpP9a' +
1846
        'kCugPQjYu1VIKcluLDF+KHCL6QxMRQ8HkaEcxgy+XqMHtagGjzgml' +
1847
        'ZM/p51c2RplgtFB++ED9E8IcLkIVo3LxklwYqiSXXAR9DhFvB6aGi' +
1848
        'ymDQczElbzepHxK5R37AMRR8QUgCbAg+nuIojRA87+qjHb48OXB5O' +
1849
        'qque50NXjVIQZ+ovcUbZisM1X5rzv/o818dsG0VasGksXSdMVVf5C' +
1850
        '1gkDltFckESRiXzqNWMAc33eKJ0/7E4HMMa0dlODqojhrfRPXVmNb' +
1851
        'AUwiPCL4gqFgVfPgneTSyVdmHdtGG3Ag6rUKVJxnVTV7SdpdbV34u' +
1852
        '1JfDBinARRz93q2qZZgW6H7RzYp8Q3XCVkzPh2XMzYf3OwY6mjYUw' +
1853
        'ReEGGJV8GGtwW/JQw4iB31VZNrhGWdVD1WeZJDU99n2EYehoTsvaD' +
1854
        'ldLpj9GA1I1dj4hzltKoR9jkJ13AhvguwBMN3ROEcDcQvYEFa61v9' +
1855
        'lhBlXMYOe6Wh5L1TB9D+DzxbNeBEE3ncRfEGIIVYFn4eTQfDpUcU4' +
1856
        'BKgEBiEgAoUWTJ4ZHrFgajNUOY9PBohkZDiTVXLDMfia4hLXDCXkL' +
1857
        'yx15mvIL8dvopDvDhZoW/bk8OBA1ZHCeh5496kcdxk3F2MINf94Fc' +
1858
        '14UwQ6ndTXiskXxJKOoYnUmqmLUwRfEGKFVcEnoaCnEo88JAI6TE8' +
1859
        'xL2jG53mg4CNcBRqFYWzYKlQ5/PlYS7/oMSRpQuMjZCQDG8Ca3yUO' +
1860
        '8VSVEBGgJJXsWld1lWpCk1W1ZAXGAl1e1bpGGgEqNN1BboFuE14Z8' +
1861
        'O3gAMJ0LkQi+JoSysr7FcEXhBhiVfDhxsFTyZJOy1RIzzu7Yak8sO' +
1862
        'NVjS7EJwD+DFWu+bsM2PjnfCYjRO21/tY43wKtvxLChldTclkVfOQ' +
1863
        'EUPeC1kx+dbUFXkY3Lt2XMDeFd0d1TKcTmG2S/pHUgxfBF4RYYUnw' +
1864
        '1RBCdRkxKRwqqBmCH7g5Ikp4FT348BuEKsc3Pi2bkhMm2dwTA6YVV' +
1865
        'f3wWjDBpxKT9wYOeb7suGJhBB8J3tWh4LxrVcZVHz6/C6Dh7AIK78' +
1866
        'PXFM+S5n+dsZHAB8xvH/XDgb8mIr+2IviCoGJJ8DlJCD2PsLTx+MP' +
1867
        'PwA8jPaFBZRm+enTzYRl++KDl8AkjLSEGaqJZZJpN2KwjunpH0CHr' +
1868
        'cj9ZrjF6cms9/YbuqPCwTPSiwlxXBR8GNpWzbQwPT2CnbSjB50agx' +
1869
        'mgcX23qkbAPn1C/CNTRleF9+Hw61A6OmbshcLSBvcYYio+dWn3Xi+' +
1870
        'ALgooNwYe2q4+82m+rGY8qVQiqybAkoeRqC4HlMOYZdTiojdFBgwP' +
1871
        'p9qkWb/hB9UTlld9ONT+p42z0El987w1u6htZpuldEHTtk8LWfhUC' +
1872
        'XeXxA9b+kF/8oIjgC4JK9JG2GC6iOl5GMk8GXg4pgyb46ENP2GG0I' +
1873
        'viCoBKl4GNkzsgZMzNcGDSvV/Qx13FFBF8QVKK38DE+ZMhPRBACEc' +
1874
        'EXBBVJniYkMTERfPqMhYuM4M8ZzGxl7zMqmoRIghAlovlCUhLDGa8' +
1875
        '4171aaHvkAAYnDPn1EUYs0c8fmvSMf/Hx+JceT3r58ZuvPp76r97p' +
1876
        'k3pnTHn07xkP587WZ4NdtKhnyVLfshW+5Sv0OXMXL/G9v1Cf/XbOz' +
1877
        'Icz33r09qRH0yb0Tn69981X9BYmvGi09oKf53X6Zgp+QV878SWdSa' +
1878
        '/0gsmv9U4Z5+f13qlv9NIBEFMM1OXJ43rffFXfhDandia84G/Z+O1' +
1879
        'jqK/koBH+f96S4CMEQI0WQdYge49b0LBEQRAEIU5Y9eFjnLCano5X' +
1880
        '0TKyPWM2Ezh/EG7AC+zGUQOiNePFgbWcNpbzSKtxEIhESOT+cUEQh' +
1881
        'ITFquDzgDTTTDRIM6IZUckIJESqEI6G40R27BHiXCIIV4fBz2GMWI' +
1882
        'tsqJxFhOcUGPLrJgiCMOywMUqHlVwVXgShIIs1PPOoxk4bxAyS5qt' +
1883
        'piDiFkRryzCmPUGiaAD1ho8sFQRASHBuCj4hyNY+EZgg1BJ/NfjUZ' +
1884
        'IOBE36YKak2OHw8l+IIgCII97I3DR5JYtQRJpTiPnBYg+HDOIwEFT' +
1885
        '0ygSjqqqZNKBAq++PAFQRBsY0/wMV+DWoLkEpiNl5YxaaOawRuJ7O' +
1886
        'DzKa//Xa2AdN/wESE5iboWDh/Ohic+fEEQBHvYE3xocmAhErqG2YQ' +
1887
        'qhApIjzAPhvh2BEEQ7CGpFQRBEEYIIviCIAgjBBF8QRCEEQIEXxAE' +
1888
        'QRgJ/B+oERdN');
1889
1890
  SetArrayLength(ATPA, Length(TP));
1891
  for I := 0 to High(ATPA) do
1892
  begin
1893
    ATPA[i] := LoadTextTPA(TP[i], UpChars, H);
1894
    for B := 0 to High(ATPA[i]) do
1895
      ATPA[i][B].y := ATPA[i][B].y + i*(H);
1896
  end;
1897
  if Length(Colours) = 4 then
1898
  begin
1899
    SetArrayLength(Colors, Length(TP));
1900
    for i := 0 to High(Colors) do
1901
      Colors[i] := Colours[1];
1902
  end else
1903
    Colors := Colours;
1904
  DrawATPABitmapEx(bmp, ATPA, Colors);
1905
  Canvas := TCANVAS.Create;
1906
  Canvas.Handle := SmartGetDebugDC;
1907
  DrawBitmap(bmp, Canvas, Placement.x, Placement.y);
1908
  FreeBitmap(bmp);
1909
end;
1910
1911
procedure PrintOnSmart2(TP: TStringArray; Placement: TPoint; Colours: TIntegerArray);
1912
var
1913
 x, y, bmp, I, B, H: Integer;
1914
 ATPA: T2DPointArray;
1915
 Canvas: TCanvas;
1916
 Colors: TIntegerArray;
1917
begin
1918
  GetClientDimensions(x, y);
1919
  bmp := BitmapFromString(x, y, '');
1920
  SetArrayLength(ATPA, Length(TP));
1921
  for I := 0 to High(ATPA) do
1922
  begin
1923
    ATPA[i] := LoadTextTPA(TP[i], UpChars, H);
1924
    for B := 0 to High(ATPA[i]) do
1925
      ATPA[i][B].y := ATPA[i][B].y + i*(H);
1926
  end;
1927
  if Length(Colours) = 4 then
1928
  begin
1929
    SetArrayLength(Colors, Length(TP));
1930
    for i := 0 to High(Colors) do
1931
      Colors[i] := Colours[0];
1932
  end else
1933
    Colors := Colours;
1934
  DrawATPABitmapEx(bmp, ATPA, Colors);
1935
  SMART_ClearCanvas;
1936
  Canvas := TCANVAS.Create;
1937
  Canvas.Handle := SmartGetDebugDC;
1938
  DrawBitmap(bmp, Canvas, Placement.x, Placement.y);
1939
  FreeBitmap(bmp);
1940
end;
1941
1942
procedure paintReport;
1943
var Exp: int64;
1944
begin
1945
  Exp := GetXPBarTotal - StartExperience;
1946
1947
  //PrintOnSmart([''], Point(4, 265), [clRed, clBlack, 1107712, Colour]);     Sin's Paint Co-orindates..
1948
  PrintOnSmart([''], Point(6, 310), [clRed, clBlack, 1107712, Colour]);
1949
  Smart_DrawTextMulti(False, Shaddow, [MsToTime(GetTimeRunning, Time_Short)], Point(127, 357), Font, Colour);
1950
  Smart_DrawTextMulti(False, Shaddow, ['N/A'], Point(127, 373), Font, Colour);
1951
  Smart_DrawTextMulti(False, Shaddow, [ToStr(Exp)], Point(127, 387), Font, Colour);
1952
  Smart_DrawTextMulti(False, Shaddow, [ToStr(Round2((Exp * 3600) / (GetTimeRunning / 1000),2))], Point(127, 404), Font, Colour);
1953
  Smart_DrawTextMulti(False, Shaddow, ['N/A'], Point(127, 420), Font, Colour);
1954
  Smart_DrawTextMulti(False, Shaddow, [SStatus], Point(127, 433), Font, Colour);
1955
  Smart_DrawTextMulti(False, Shaddow, [Version], Point(127, 455), VersionChars, Colour);
1956
end;
1957
1958
procedure printReport;
1959
var Exp: integer;
1960
begin
1961
  Exp := GetXPBarTotal - StartExperience;
1962
1963
  ClearDebug;
1964
  writeln('[--------------------------------------------]');
1965
  writeln('['  +padr('',17) + '~AZK~ ' + Version + padr('',17) + ']');
1966
  writeln('[' + padr('',16) + ' ~ By GGzz' + padr('',18) + ']');
1967
  writeln('[--------------------------------------------]');
1968
  writeln('[    Running for: ' + Padr(MsToTime(GetTimeRunning, Time_Short), 27) + ']');
1969
  writeln('[    Experience: ' + Padr(ToStr(Exp),28) + ']');
1970
  writeln('[    Exp/hour: ' + Padr(ToStr(Round2((Exp * 3600) / (GetTimeRunning / 1000),2)), 30) + ']');
1971
  writeln('[--------------------------------------------]');
1972
end;
1973
1974
Function AtHartwin: Boolean;
1975
var
1976
  TPA: TPointArray;
1977
  ATPA, ATPA2: T2DPointArray;
1978
  CTS, L, I: Integer;
1979
  B: TBox;
1980
begin
1981
  CTS:= GetColorToleranceSpeed;
1982
  ColorToleranceSpeed(2);
1983
  SetColorSpeed2Modifiers(0.02, 1.48);
1984
  if FindColorsTolerance(TPA, 1358059, MSX1, MSY1, MSX2, MSY2, 7) then
1985
    if Length(TPA) < 1 then
1986
    begin
1987
      ColorToleranceSpeed(CTS);
1988
      SetColorSpeed2Modifiers(0.02, 0.02);
1989
      exit;
1990
    end;
1991
1992
  ColorToleranceSpeed(CTS);
1993
  SetColorSpeed2Modifiers(0.02, 0.02);
1994
  ATPA:= TPAToATPAEx(TPA, 10, 10);
1995
  if Length(ATPA) < 1 then
1996
    exit;
1997
1998
  L := High(ATPA);
1999
  SetArrayLength(ATPA2, L+1);
2000
2001
  For I:= 0 To High(ATPA) do
2002
  begin
2003
    B:= GetATPABounds(ATPA);
2004
    With B do
2005
    begin
2006
      ColorToleranceSpeed(2);
2007
      SetColorSpeed2Modifiers(0.00, 0.23);
2008
      Result:= FindColorsTolerance(ATPA2[I], 5066065, B.X1 - 10, B.Y1 - 10, B.X2 + 10, B.Y2 + 10, 5);
2009
      ColorToleranceSpeed(CTS);
2010
      SetColorSpeed2Modifiers(0.02, 0.02);
2011
    end;
2012
  end;
2013
  ColorToleranceSpeed(CTS);
2014
  SetColorSpeed2Modifiers(0.02, 0.02);
2015
end;
2016
2017
//By sir eska eau
2018
Function UnderAttack: Boolean;
2019
Var
2020
  Time, x, y: integer;
2021
begin
2022
  if InFight then
2023
  begin
2024
    MarkTime(Time);
2025
2026
    repeat
2027
      Wait(50+Random(50));
2028
      if(FindDTM(WaitFight_Shield, x, y, MSCX - 60, MSCY - 70, MSCX + 60, MSCY + 70)) or (FindDTM(WaitFight_Damage, x, y, MSCX - 60, MSCY - 70, MSCX + 60, MSCY + 70)) then
2029
      begin
2030
        Result:= True;
2031
        Break;
2032
      end;
2033
    until(TimeFromMark(Time) > 2500);
2034
  end;
2035
end;
2036
2037
function AttackZombies: Boolean;
2038
var
2039
  CTS, I, L: Integer;
2040
  TPA: TPointArray;
2041
  ATPA: T2DPointArray;
2042
  P: TPoint;
2043
begin
2044
  Result := False;
2045
  LProc:= 'AttackZombies';
2046
  if AtHartwin then
2047
    exit;
2048
  if (not LoggedIn) or (FindDead) or (InFight) then exit;
2049
2050
  CTS:= GetColorToleranceSpeed;
2051
  ColorToleranceSpeed(2);
2052
  SetColorSpeed2Modifiers(0.10, 0.45);
2053
  FindColorsTolerance(TPA, 7168593, MSX1, MSY1, MSX2, MSY2, 17);
2054
  ColorToleranceSpeed(2);
2055
  SetColorSpeed2Modifiers(0.2, 0.2);
2056
2057
  if (Length(TPA) < 1) then
2058
    Exit;
2059
2060
  ATPA:= TPAToATPAEx(TPA, 50, 50);
2061
  if (Length(ATPA) < 1) then
2062
    Exit;
2063
  SortATPAFromFirstPoint(ATPA, Point(MSCX, MSCY));
2064
  L:= High(ATPA);
2065
2066
  For I:= 0 To L do
2067
  begin
2068
    P:= MiddleTPA(ATPA[I]);
2069
    MMouse(P.X, P.Y, 0, 0);
2070
    if (WaitUptextMulti(['ttack', 'zombie', 'rmoured'], 600)) then
2071
      if ((Not IsFightAt(P.X, P.Y)) and (Not UnderAttack)) then
2072
      begin
2073
        ClickMouse2(MOUSE_LEFT);
2074
        break;
2075
      end;
2076
  end;
2077
  Result:= InFight;
2078
end;
2079
2080
  Function SummonPoints: Integer;
2081
  var
2082
    ColourString: String;
2083
  begin
2084
    LProc:= 'SummonPoints';
2085
    Result:= GetMMLevels('summon', ColourString);
2086
2087
    if Debugs then
2088
      writeln('Summoning Points: ' + ToStr(Result));
2089
  end;
2090
2091
  Function UsingFamiliar: Boolean;
2092
  var
2093
    CTS: Integer;
2094
    TPA: TPointArray;
2095
  begin
2096
    LProc:= 'UsingFamiliar';
2097
    CTS:= GetColorToleranceSpeed;
2098
    ColorToleranceSpeed(2);
2099
    SetColorSpeed2Modifiers(0.21, 0.80);
2100
2101
    Result:= FindColorsSpiralTolerance(707, 143, TPA, 7975758, 691, 133, 720, 157, 24);
2102
    if Debugs then
2103
      writeln('Using Familiar: ' + ToStr(Result));
2104
2105
    SetColorSpeed2Modifiers(0.2, 0.2);
2106
    ColorToleranceSpeed(CTS);
2107
  end;
2108
2109
  Function InteractFamiliar(Option: TStringArray): Boolean;       //By Flight..   Modified..
2110
  begin
2111
    if (not LoggedIn) then exit;
2112
    if UsingFamiliar then
2113
    begin
2114
      if (Option[0] = '') then
2115
      begin
2116
        MouseBox(695,140,740,155,1);
2117
        Result := True;
2118
      end else
2119
      begin
2120
        MouseBox(695,140,740,155, MOUSE_RIGHT);
2121
        wait(500);
2122
        if ChooseOptionMulti(Option) then
2123
          Result := True
2124
        else
2125
          srl_Warn('InteractFamiliar', 'Incorrect option', warn_AllVersions);
2126
      end;
2127
    end else
2128
      srl_Warn('InteractFamiliar', 'No familiar present!', warn_AllVersions);
2129
2130
    Wait(100 + Random(50));
2131
  end;
2132
2133
  Function SummoningRenew(PouchToSummon: integer): Boolean;
2134
  var
2135
    Pouch, X, Y, tries, Summoning: Integer;
2136
  begin
2137
    LProc:= 'SummoningRenew';
2138
        Case PouchToSummon of
2139
          0:
2140
            exit;
2141
          1:
2142
            Pouch := DTMFromString('m1gAAAHic42JgYDjIxMBwjAlC70PCIP4RKD4JxJyMDAxcQMwLxSA+GxIGiXEAcWFJPENxeSKDv78tGOcXxzIUlMQxFJUlMGSkhYDFyqqSGbiAdhODGYnECAAAECwT5g=='); //Bunyip
2143
2144
          2:
2145
            Pouch := DTMFromString('mbQAAAHicY2VgYDjEBMH7gPgAEJ8H4gpGBoYSIC4D4hogrgTilopUhqbyFIbiVF8wZmBgYuACkuiYEQsGAwBb6Qt+');  //Unicorn
2146
        end;
2147
2148
        Summoning := DTMFromString('mWAAAAHicY2FgYHBigmBXIPYEYn1GBgYrILaE4vz8Ega5a3cZZC/dBKpmYkgBkuxImBENgwAAgewHaA=='); //Potion to drink.
2149
        //UniScroll := DTMFromString('mwQAAAHic42RgYDjIxMCwjwlCHwbiY0B8FIh3Q8WPALEeIwODFhCrQ2kYWxuI9aG4vjiRoaM8iiEicj4YR0YtBGOQGEhuWm8TAxfQPkKYkQgMBwBcExUb');
2150
2151
2152
            Gametab(Tab_Inv);
2153
            if(FindDTM(Pouch, x, y, MIX1, MIY1, MIX2, MIY2) and FindDTM(Summoning, x, y, MIX1, MIY1, MIX2, MIY2)) then
2154
              if(SummonPoints < 20) then
2155
              begin
2156
                writeln('Need to Refill Summoning Points.');
2157
                if(FindDTM(Summoning, X, Y, MIX1, MIY1, MIX2, MIY2)) then
2158
                begin
2159
                  MMouse(X, Y + 5, 0, 0);
2160
                  if(WaitUptextMulti(['ummoning', 'potion'], 500)) then
2161
                  begin
2162
                    ClickMouse2(False);
2163
                    ChooseOptionMulti(['rink', 'Drink', 'rink Summoning', 'Drink Summoning']);
2164
                    wait(2000);
2165
                  end;
2166
                end;
2167
              end;
2168
2169
              if (SummonPoints < 20) then
2170
              begin
2171
                FreeDTM(Pouch);
2172
                FreeDTM(Summoning);
2173
                exit;
2174
              end;
2175
2176
            tries := 0;
2177
            if(FindDtm(Pouch, x, y, MIX1, MIY1, MIX2, MIY2) and (SummonPoints >= 20)) then
2178
            Repeat
2179
              if(not Loggedin) then
2180
                LoginPlayer;
2181
              if UsingFamiliar then
2182
                break;
2183
              FindNormalRandoms;
2184
              MMouse(x, y, 5, 5);
2185
              wait(500);
2186
              ClickMouse2(false);
2187
              wait(500);
2188
              ChooseOption('Summon');
2189
              if(FindBlackChatMessage('follower')) then
2190
                break;
2191
              tries:= tries + 1;
2192
              if(tries > 10) then
2193
              begin
2194
                FreeDTM(Pouch);
2195
                FreeDTM(Summoning);
2196
                exit;
2197
              end;
2198
            Until(UsingFamiliar = true);
2199
2200
            wait(1500);
2201
2202
        Result:= UsingFamiliar;
2203
2204
    FreeDTM(Pouch);
2205
    FreeDTM(Summoning);
2206
  end;
2207
2208
Function HPLevel: Integer;
2209
var
2210
  ColourString: String;
2211
begin
2212
  LProc:= 'HPLevel';
2213
  Result:= GetMMLevels('HP', ColourString);
2214
  if debugs then
2215
    writeln('HP: ' + ToStr(Result));
2216
end;
2217
2218
Function MousePotions(DTM: Integer; Uptext: TStringArray; Area: TBox; WithDraw, Drink: Boolean): Boolean;
2219
var
2220
  X, Y, T, Tries, Count, NOC: Integer;
2221
  TPA: TPointArray;
2222
  ATPA: T2DPointArray;
2223
begin
2224
  if (Not Withdraw) then
2225
  begin
2226
    If (FindDTMs(DTM, TPA, Area.X1, Area.Y1, Area.X2, Area.Y2)) then
2227
    begin
2228
      ATPA:= TPAToATPAEx(TPA, 24, 35);
2229
      SortATPASize(ATPA, False);
2230
      if (Length(ATPA) < 1) then
2231
        exit;
2232
      MiddleTPAEx(ATPA[0], X, Y);
2233
      MMouse(X, Y, 0, 0);
2234
      if (WaitUptextMulti(Uptext, 600)) then
2235
      begin
2236
        if (Drink) then
2237
          ClickMouse2(MOUSE_LEFT);
2238
        Result:= True;
2239
        Wait(1000);
2240
      end;
2241
    end;
2242
  end else
2243
    begin
2244
      Count:= ItemAmount('inv', 'dtm', DTM, []);
2245
      If (NOC <> 0) then
2246
        If FindDTM(DTM, X, Y, Area.X1, Area.Y1, Area.X2, Area.Y2) then
2247
          While ((Not FindDTM(DTM, X, Y, MIX1, MIY1, MIX2, MIY2)) and (Tries < 5)) do
2248
          begin
2249
            FindDTM(DTM, X, Y, Area.X1, Area.Y1, Area.X2, Area.Y2);
2250
            MMouse(X, Y, 0, 0);
2251
            if Debugs then
2252
              writeln(GetUptext);
2253
            If (WaitUptextMulti(Uptext, 500)) then
2254
            begin
2255
              ClickMouse2(MOUSE_RIGHT);
2256
              if WaitOptionMulti(['w-X', 'draw-X'], 600) then
2257
              begin
2258
                Wait(1000);
2259
                if (Not BankScreen) then
2260
                  exit;
2261
                 T:= GetSystemTime + 10000;
2262
                 while (T >= GetSystemTime) and (not (InRange(CountColor(0, 250, 396, 307, 410), 155, 165))) do
2263
                   Wait(50);
2264
                TypeSend(ToStr(NOC - Count));
2265
                break;
2266
              end;
2267
            end;
2268
            Inc(Tries);
2269
            if Tries > 5 then
2270
              Writeln('Cannot Withdraw Combat Potions');
2271
          end;
2272
          Tries:= 0; WaitFindDTM(X, Y, DTM, 2500);
2273
        Result:= (ItemAmount('inv', 'dtm', DTM, []) = NOC);
2274
    end;
2275
end;
2276
2277
Function HasPotion(Potion: String; Drink: Boolean): Boolean;
2278
var
2279
  DTM: Integer;
2280
  UpText: TStringArray;
2281
begin
2282
  LProc:= 'HasPotion';
2283
  Uptext:= [Potion];
2284
    if (GetCurrentTab <> Tab_Inv) then
2285
      GameTab(Tab_Inv);
2286
      Case LowerCase(Potion) of
2287
        'none', '0', 'nothing':
2288
                          exit;
2289
2290
        'ovl', 'overload':
2291
                          begin
2292
                            DTM := DTMFromString('mlwAAAHicY2dgYPBigmB3IHYG4kAgDgDiYCBmYmRg4AViHijmBmJGIGYHsbm4gLqZ4DQyngYk+XFgRjwYCgCMngOo');
2293
                            UpText:= ['load', 'Over', 'Overload'];
2294
                          end;
2295
2296
        'def', 'defence':
2297
                          begin
2298
                            DTM := DTMFromString('mbQAAAHicY2VgYBBkZGAQAGIeIBYHYgkgng0UXwrFSxgg/K1TzBn2z7UCspjgeBqQ5EfDjFgwGAAA/SEHfg==');
2299
                            UpText:= ['uper defence', 'defence', 'uper def', 'Super defence'];
2300
                          end;
2301
2302
        'atk', 'attack':
2303
                          begin
2304
                            DTM := DTMFromString('mbQAAAHicY2VgYMhkhOBcIE4C4gIgngUUX4qE5wCxhdU2BkubfUAWExxPA5L8aJgRCwYDAHP8CHk=');
2305
                            UpText:= ['uper attack', 'attack', 'uper att', 'Super attack'];
2306
                          end;
2307
2308
        'str', 'strength', 'es', 'extrstr':
2309
                          begin
2310
                            DTM := DTMFromString('mrAAAAHic42BgYGBlgAAQzQvEXEDMCRVjAWImqDgfELNBxbmQcERkDFQVAi+ct4Bh88YtDBvWbWSYBhQRwYMZCWAYAADUbgi9');
2311
                            UpText:= ['uper strength', 'strength', 'uper str', 'Super strength', 'me str'];
2312
                          end;
2313
2314
        'ed', 'extrdef':
2315
                          begin
2316
                            DTM := DTMFromString('mbQAAAHicY2VgYEgE4gQgTgXiGCh/DhAvA+KFQLwIiCcA8ZUjskCSieHIVmmGu2fkGKKi4hjygCJcaJgRCwYDABivC70=');
2317
                            Uptext:= ['eme def', 'me def', 'Extreme defence'];
2318
                          end;
2319
2320
        'ea', 'extratk':
2321
                          begin
2322
                            DTM := DTMFromString('mbQAAAHicY2VgYDABYmMgNgdiayDWA+K5QLwUiJcB8Swou3DFaoaSteuBLCY4ngYk+dEwIxYMBgBabgil');
2323
                            Uptext:= ['me att', 'eme att', 'Extreme attack'];
2324
                          end;
2325
      end;
2326
    Result:= MousePotions(DTM, Uptext, MIBox, False, Drink);
2327
    FreeDTM(DTM);
2328
end;
2329
2330
2331
Procedure PotSkills;
2332
begin
2333
  LProc:= 'PotSkills';
2334
  Sk.ModAtk:= GetSkillInfo(Skill_Attack, True);
2335
  Sk.ModStr:= GetSkillInfo(Skill_Strength, True);
2336
  Sk.ModDef:= GetSkillInfo(Skill_Defence, True);
2337
end;
2338
2339
Procedure InitialSkills;
2340
begin
2341
  LProc:= 'InitialSkills';
2342
  Sk.Atk:= GetSkillLevel(Skill_Attack);
2343
  Sk.Str:= GetSkillLevel(Skill_Strength);
2344
  Sk.Def:= GetSkillLevel(Skill_Defence);
2345
end;
2346
2347
function RPDist(TPA: TPointArray; MaxDist: Integer): TPoint;      //By MormonMan
2348
var
2349
  MP, P: TPoint;
2350
begin
2351
  if not LoggedIn then Exit;
2352
  P := Point(-1, -1);
2353
  MP := MiddleTPA(TPA);
2354
  while (Distance(MP.x, MP.y, P.x, P.y) > MaxDist) do
2355
    P := TPA[Random(Length(TPA) - 1)];
2356
  Result := P;
2357
end;
2358
2359
Function FindHDTM: Boolean;
2360
var
2361
  DTM, X, Y, Dist: Integer;
2362
  TPA, NPCs: TPointArray;
2363
begin
2364
  NPCs:= GetMiniMapDots('NPC');
2365
  SortTPAByY(NPCs, True);
2366
  Dist:= Distance(NPCs[0].X, NPCs[0].Y, MMCX, MMCY);
2367
2368
  if (Dist > 20) then
2369
  begin
2370
    MMouse(NPCs[0].X, NPCs[0].Y, 0, 0);
2371
    wait(100);
2372
    ClickMouse2(MOUSE_LEFT);
2373
    if (Not IsMoving) then
2374
          wait(1000);
2375
    while isMoving do
2376
      wait(500);
2377
  end;
2378
2379
  DTM := DTMFromString('mQwAAAHicY2ZgYNBlZGDwAWIuIJ4F5E8E4klAnJuTwXBvozzDucWyDFxAPgwzImEgAAAOBwbl');
2380
  Result:= FindDTMs(DTM, TPA, MSX1, MSY1, MSX2, MSY2);
2381
  if Result then
2382
  begin
2383
    if Debugs then
2384
      DebugTPA(TPA, '');
2385
    MiddleTPAEx(TPA, X, Y);
2386
    MMouse(X, Y, 0, 0);
2387
  end;
2388
  FreeDTM(DTM);
2389
end;
2390
2391
Procedure TalkHartwin;
2392
var
2393
  NPCs, Cols: TPointArray;
2394
  HP: TPoint;
2395
  B: TBox;
2396
  Found: Boolean;
2397
  Color: TIntegerArray;
2398
  I, X, Y, Dist, Tries: Integer;
2399
begin
2400
  LProc:= 'TalkHartwin';
2401
  Tries:= 0;
2402
  Found:= False;
2403
  if (Not AtHartwin) then
2404
    exit;
2405
  FindHDTM;
2406
  NPCs:= GetMMDotsOnMS('NPC');
2407
  SortTPAByY(NPCs, True);
2408
  HP:= RPDist(NPCs, 20);
2409
  HP:= MMToMS(HP);
2410
  B:= IntToBox(HP.X - 20, HP.Y - 20, HP.X + 20, HP.Y + 20);
2411
  Color:= [5271929, 5931912, 4020572, 5927541, 6981257];
2412
  For I:= 0 To High(Color) do
2413
    FindColorsSpiralTolerance(HP.X, HP.Y, Cols, Color[I], B.X1, B.Y1, B.X2, B.Y2, 10);
2414
2415
  if (Length(Cols) > 0) then
2416
  begin
2417
    MiddleTPAEx(Cols, HP.X, HP.Y);
2418
    MMouse(HP.X,HP.Y, 0, 0);
2419
2420
    DebugTPA(Cols, '');
2421
    Found:= True;
2422
  end else
2423
    if FindHDTM then
2424
      Found:= True;
2425
2426
  if Found then
2427
    if (WaitUptextMulti(['alk-to Hart', 'Hartwin', 'artwin', 'o Hartwin', 'win', 'to Har'], 600)) then
2428
    begin
2429
      ClickMouse2(MOUSE_LEFT);
2430
      MakeCompass('N');
2431
      Repeat
2432
        repeat
2433
          ClickToContinue;
2434
        until(ClickToContinue = False);
2435
        wait(500);
2436
        FindNPCChatText('es', ClickLeft);
2437
        wait(2000);
2438
        Inc(Tries);
2439
      Until(FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or (Tries > 7));
2440
    end;
2441
end;
2442
2443
Function DrinkPotion(Potion: string): Boolean;
2444
begin
2445
  LProc:= 'DrinkPotion';
2446
  UptextF:= [Potion];
2447
  Case LowerCase(Potion) of
2448
    'none', '0', 'nothing':
2449
                          exit;
2450
2451
    'asd', 'ss', 'superset', 'super set':
2452
                      begin
2453
                        PotSkills;
2454
                        begin
2455
                          if (HasPotion('atk', False)) then
2456
                            if (Sk.ModAtk < (Sk.Atk + WTD)) then
2457
                            begin
2458
                              HasPotion('atk', True);
2459
                              wait(1000);
2460
                            end;
2461
2462
                          if (HasPotion('str', False)) then
2463
                            if (Sk.ModStr < (Sk.Str + WTD)) then
2464
                            begin
2465
                              HasPotion('str', True);
2466
                              wait(1000);
2467
                            end;
2468
2469
                          if (HasPotion('def', False)) then
2470
                            if (Sk.ModDef < (Sk.Def + WTD)) then
2471
                            begin
2472
                              HasPotion('def', True);
2473
                              wait(1000);
2474
                            end;
2475
                        end;
2476
                        wait(1000);
2477
                        PotSkills;
2478
                        Result:= ((Sk.ModAtk > (Sk.Atk + WTD)) and (Sk.ModStr > (Sk.Str + WTD)) and (Sk.ModDef > (Sk.Def + WTD)));
2479
                      end;
2480
2481
    'atk str', 'as', 'atkstr', 'aspure':
2482
                      begin
2483
                        PotSkills;
2484
                        begin
2485
                          if (HasPotion('atk', False)) then
2486
                            if (Sk.ModAtk < (Sk.Atk + WTD)) then
2487
                            begin
2488
                              HasPotion('atk', True);
2489
                              wait(1000);
2490
                            end;
2491
2492
                          if (HasPotion('str', False)) then
2493
                            if (Sk.ModStr < (Sk.Str + WTD)) then
2494
                            begin
2495
                              HasPotion('str', True);
2496
                              wait(1000);
2497
                            end;
2498
                        end;
2499
                        wait(1000);
2500
                        PotSkills;
2501
                        Result:= ((Sk.ModAtk > (Sk.Atk + WTD)) and (Sk.ModStr > (Sk.Str + WTD)));
2502
                      end;
2503
2504
    'str def', 'sd', 'strdef', 'sdpure':
2505
                      begin
2506
                        PotSkills;
2507
                        begin
2508
                          if (HasPotion('str', False)) then
2509
                            if (Sk.ModStr < (Sk.Str + WTD)) then
2510
                            begin
2511
                              HasPotion('str', True);
2512
                              wait(1000);
2513
                            end;
2514
2515
                          if (HasPotion('def', False)) then
2516
                            if (Sk.ModDef < (Sk.Def + WTD)) then
2517
                            begin
2518
                              HasPotion('def', True);
2519
                              wait(1000);
2520
                            end;
2521
                        end;
2522
                        wait(1000);
2523
                        PotSkills;
2524
                        Result:= ((Sk.ModStr > (Sk.Str + WTD)) and (Sk.ModDef > (Sk.Def + WTD)));
2525
                      end;
2526
2527
    'atk def', 'ad', 'atkdef', 'adpure':
2528
                      begin
2529
                        PotSkills;
2530
                        begin
2531
                          if (HasPotion('atk', False)) then
2532
                            if (Sk.ModAtk < (Sk.Atk + WTD)) then
2533
                            begin
2534
                              HasPotion('atk', True);
2535
                              wait(1000);
2536
                            end;
2537
2538
                          if (HasPotion('def', False)) then
2539
                            if (Sk.ModDef < (Sk.Def + WTD)) then
2540
                            begin
2541
                              HasPotion('def', True);
2542
                              wait(1000);
2543
                            end;
2544
                        end;
2545
                        wait(1000);
2546
                        PotSkills;
2547
                        Result:= ((Sk.ModAtk > (Sk.Atk + WTD)) and (Sk.ModDef > (Sk.Def + WTD)));
2548
                      end;
2549
2550
    'atk', 'attack':
2551
                      if (HasPotion(Potion, False)) then
2552
                      begin
2553
                        PotSkills;
2554
                        if (Sk.ModAtk < (Sk.Atk + WTD)) then
2555
                        begin
2556
                          HasPotion(Potion, True);
2557
                          wait(2000);
2558
                          PotSkills;
2559
                          Result:= (Sk.ModAtk > (Sk.Atk + WTD));
2560
                        end;
2561
                      end;
2562
2563
    'str', 'strength':
2564
                      if (HasPotion(Potion, False)) then
2565
                      begin
2566
                        PotSkills;
2567
                        if (Sk.ModStr < (Sk.Str + WTD)) then
2568
                        begin
2569
                          HasPotion(Potion, True);
2570
                          wait(2000);
2571
                          PotSkills;
2572
                          Result:= (Sk.ModStr > (Sk.Str + WTD));
2573
                        end;
2574
                      end;
2575
2576
    'def', 'defence':
2577
                      if (HasPotion(Potion, False)) then
2578
                      begin
2579
                        PotSkills;
2580
                        if (Sk.ModDef < (Sk.Def + WTD)) then
2581
                        begin
2582
                          HasPotion(Potion, True);
2583
                          wait(2000);
2584
                          PotSkills;
2585
                          Result:= (Sk.ModDef > (Sk.Def + WTD));
2586
                        end;
2587
                      end;
2588
2589
    'ovl', 'overload':
2590
                      if (HPLevel > 600) then
2591
                        if (HasPotion(Potion, False)) then
2592
                        begin
2593
                          PotSkills;
2594
                          if ((Sk.ModAtk < (Sk.Atk + WTD)) or (Sk.ModStr < (Sk.Str + WTD)) or (Sk.ModDef < (Sk.Def + WTD))) then
2595
                          begin
2596
                            HasPotion(Potion, True);
2597
                            wait(2000);
2598
                            PotSkills;
2599
                            Result:= ((Sk.ModAtk + Sk.ModDef + Sk.ModStr) > ((Sk.Atk + Sk.Def + Sk.Str) + WTD));
2600
                          end;
2601
                        end;
2602
  end;
2603
end;
2604
2605
Function FindLadder: Boolean;
2606
var
2607
  Dist: Integer;
2608
begin
2609
  LProc:= 'FindLadder';
2610
  if AtHartwin then
2611
    exit;
2612
  Result:= FindObjectMM([LadderColour], Dist, 10, 10, LTol, False, [0.58, 4.00]);
2613
2614
  if debugs then
2615
    writeln('FindLadder: ' + ToStr(Result));
2616
end;
2617
2618
Function DownTheHall: Boolean; Forward;
2619
Function PrayAltar: Boolean;
2620
var
2621
  CTS: Integer;
2622
begin
2623
  LProc:= 'PrayAltar';
2624
  if AtHartwin then
2625
    exit;
2626
2627
  CTS := GetColorToleranceSpeed;
2628
  ColorToleranceSpeed(2);
2629
  SetColorSpeed2Modifiers(0.11, 0.38);
2630
2631
  Result:= FindObjectFX([2960958], ['ray-at', 'haos altar',  'altar'], MSX1, MSY1, MSX2, MSY2, 20, 20, 11, True);
2632
  if (Not Result) then
2633
    if (Not AutoColourAltar) then
2634
      if (Not FindLadder) then
2635
        DownTheHall;
2636
2637
  if Debugs then
2638
    writeln('PrayAltar: ' + ToStr(Result));
2639
2640
  ColorToleranceSpeed(CTS);
2641
  SetColorSpeed2Modifiers(0.2, 0.2);
2642
end;
2643
2644
Function PrayerLevel: Integer;
2645
var
2646
  ColourString: String;
2647
begin
2648
  LProc:= 'PrayerLevel';
2649
  Result:= GetMMLevels('Prayer', ColourString);
2650
2651
  if debugs then
2652
    writeln('Prayer: ' + ToStr(Result));
2653
end;
2654
2655
Function IsPrayerOn: Boolean;
2656
var
2657
  TPA: TPointArray;
2658
  CTS: Integer;
2659
begin
2660
  LProc:= 'IsPrayerOn';
2661
  if (PrayerLevel < 2) then
2662
    Result:= False
2663
  else
2664
  begin
2665
    CTS:= GetColorToleranceSpeed;
2666
    ColorToleranceSpeed(2);
2667
    SetToleranceSpeed2Modifiers(0.11, 1.02);
2668
    Result:= FindColorsSpiralTolerance(723, 70, TPA, 8767378, 708, 53, 737, 85, 27);
2669
    SetToleranceSpeed2Modifiers(0.2, 0.2);
2670
    ColorToleranceSpeed(CTS);
2671
  end;
2672
2673
  if Debugs then
2674
    writeln('Prayer On: ' + ToStr(Result));
2675
end;
2676
2677
Function OutOfPrayer: Boolean;
2678
var
2679
  TPA: TPointArray;
2680
  CTS: Integer;
2681
begin
2682
  LProc:= 'OutOfPrayer';
2683
  CTS:= GetColorToleranceSpeed;
2684
  ColorToleranceSpeed(2);
2685
2686
  if (PrayerLevel = 0) then
2687
    Result:= True
2688
  else
2689
    Result:= Not(FindColorsSpiralTolerance(723, 70, TPA, 6236988, 706, 55, 739, 81, 26) or IsPrayerOn);
2690
2691
  if Debugs then
2692
    writeln('Out of Prayer: ' + ToStr(Result));
2693
  ColorToleranceSpeed(CTS);
2694
end;
2695
2696
Procedure TurnPrayerOff;
2697
begin
2698
  LProc:= 'TurnPrayerOff';
2699
  if (GetCurrentTab <> Tab_Inv) then
2700
    GameTab(Tab_Inv);
2701
   wait(1000);
2702
   begin
2703
    if (Not IsPrayerOn) then
2704
      exit;
2705
     repeat
2706
      if OutOfPrayer Then
2707
        break;
2708
      if PrayerLevel < 3 then
2709
        break;
2710
      MouseBox(706, 55, 739, 87, MOUSE_LEFT);
2711
      wait(1500);
2712
     Until(Not IsPrayerOn);
2713
   end;
2714
   MouseBox(MSX1, MSY1, MSX2, MSY2, 3);
2715
end;
2716
2717
Procedure TurnPrayerOn(QuickPrayer: Boolean);
2718
begin
2719
  LProc:= 'TurnPrayerOn';
2720
  if (GetCurrentTab <> Tab_Inv) then
2721
    GameTab(Tab_Inv);
2722
   wait(1000);
2723
2724
    if IsPrayerOn then
2725
      exit;
2726
     if (QuickPrayer = True) then
2727
     repeat
2728
        if OutOfPrayer Then
2729
          break;
2730
        if PrayerLevel < 3 then
2731
          break;
2732
        MouseBox(706, 55, 739, 87, 1);
2733
        wait(1500);
2734
     Until(IsPrayerOn);
2735
   if (QuickPrayer) then
2736
    MouseBox(MSX1, MSY1, MSX2, MSY2, 3);
2737
end;
2738
2739
2740
2741
Function WalkToLadder: Boolean;
2742
var
2743
  Dist: Integer;
2744
begin
2745
  LProc:= 'WalkToLadder';
2746
  if AtHartwin then
2747
    exit;
2748
  FindObjectMM([LadderColour], Dist, 10, 10, LTol, True, [0.58, 4.00]);
2749
2750
  if ((Dist >= 25) or (PrayerLevel <= WTP)) then
2751
  begin
2752
    FindObjectMM([LadderColour], Dist, 10, 10, LTol, True, [0.58, 4.00]);
2753
    MMouse(Random(MSCX), Random(MSCY), 5, 5);
2754
    wait(500);
2755
    while isMoving do
2756
      wait(50);
2757
    wait(1000);
2758
    Result:= (Dist < 15);
2759
  end;
2760
end;
2761
2762
Function UpLadder: Boolean;
2763
var
2764
  Dist, X, Y, tries, CTS: Integer;
2765
  Ladder: TPoint;
2766
begin
2767
  LProc:= 'UpLadder';
2768
  if AtHartwin then
2769
    exit;
2770
  tries:= 0;
2771
  CTS:= GetColorToleranceSpeed;
2772
2773
  Repeat
2774
    FindObjectMM([LadderColour], Dist, 10, 10, LTol, False, [0.58, 4.00]);
2775
2776
    if ((FoundSymbol(1, X, Y, Dist) = False) or (FoundSymbol(2, X, Y, Dist) = False)) then
2777
    begin
2778
      if ((Dist <= 23) and (PrayerLevel <= WTP)) then
2779
      begin
2780
          Ladder:= MMToMS(Point(X, Y));
2781
          SetColorSpeed2Modifiers(0.09, 0.26);                                                                //EDITED!! Ladder.X-50
2782
          if (Not FindObjectFX([2509141], ['adder', 'up Lad', 'limb-up'], MSX1, MSY1, Ladder.X + 50, Ladder.Y + 50, 10, 10, 5, True)) then
2783
          begin
2784
            SetColorSpeed2Modifiers(0.2, 0.2);
2785
            ColorToleranceSpeed(CTS);
2786
            if (Not AutoColourLadder) then
2787
              if (Not FindLadder) then
2788
                DownTheHall;
2789
          end;
2790
          SetColorSpeed2Modifiers(0.2, 0.2);
2791
          if DidRedClick then
2792
          begin
2793
            wait(2000);
2794
            if Debugs then
2795
              writeln('UpLadder: True');
2796
          end;
2797
      end else
2798
      if (Dist > 23) then
2799
        WalkToLadder;
2800
2801
      Inc(Tries);
2802
    end;
2803
    if (tries > 5) then
2804
      break;
2805
  Until(FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or (Tries > 5));
2806
2807
  SetColorSpeed2Modifiers(0.2, 0.2);
2808
  ColorToleranceSpeed(CTS);
2809
2810
  Result:= (FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or (FindLadder = False));
2811
  if Debugs then
2812
    writeln('UpLadder: ' + ToStr(Result));
2813
  wait(1000);
2814
end;
2815
2816
Function FindTrapDoor: Boolean;
2817
var
2818
  I, X, Y, TrapDoorDTM: Integer;
2819
  Found: Extended;
2820
  Colors: TIntegerArray;
2821
  TPA: TPointArray;
2822
  ATPA: T2DPointArray;
2823
begin
2824
  if AtHartwin then
2825
    exit;
2826
  Colors:= [6579305, 6382182, 6447719];
2827
  For I:= 0 To High(Colors) do
2828
    FindColorsSpiralTolerance(MSCX, MSCY, TPA, Colors[I], MSCX - 50, MSCY - 50, MSCX + 50, MSCY + 50, 10);
2829
  if (Length(TPA) < 1) then
2830
    exit;
2831
2832
  ATPA:= TPAToATPAEx(TPA, 30, 30);
2833
  if (Length(ATPA) < 1) then
2834
    exit;
2835
2836
  if debugs then
2837
    DebugTPA(ATPA[0], '');
2838
2839
  MiddleTPAEx(ATPA[0], X, Y);
2840
  MMouse(X, Y, 0, 0);
2841
  Result := WaitUptextMulti(['rapdoor', 'uny', 'unyip'], 600);
2842
  if Result then
2843
  begin
2844
    ClickMouse2(MOUSE_RIGHT);
2845
    WaitOption('rapdoor', 600);
2846
  end else
2847
  begin
2848
    TrapDoorDTM := DTMFromString('mQwAAAHicY2ZgYJBmZGCQA2IJIJ4D5B+F4gBfX4ZNy2cxrF8yg4ELyIdhRiQMBAAaZwdn');
2849
    if FindDTMRotatedAlternating(TrapDoorDTM, X, Y, MSX1, MSY1, MSX2, MSY2, 0, 359, 1, Found) then
2850
    begin
2851
      MMouse(X, Y, 0, 0);
2852
      Result := WaitUptextMulti(['rapdoor', 'uny', 'unyip'], 600);
2853
      ClickMouse2(MOUSE_RIGHT);
2854
      WaitOption('rapdoor', 600);
2855
    end;
2856
    FreeDTM(TrapDoorDTM);
2857
  end;
2858
end;
2859
2860
Function DownLadder: Boolean;
2861
var
2862
  X, Y, Dist, tries, CTS: Integer;
2863
begin
2864
  LProc:= 'DownLadder';
2865
  if AtHartwin then
2866
    exit;
2867
2868
  MakeCompass('S');
2869
  CTS:= GetColorToleranceSpeed;
2870
  wait(1000);
2871
  tries:= 0;
2872
2873
  repeat
2874
    ColorToleranceSpeed(2);
2875
    if FindObjectFx([4473927, 6118754, 6382182, 6579304], ['rapdoor', 'door'], MSX1, MSY1, MSX2, MSY2, 10, 10, 5, True) then
2876
    begin
2877
      ColorToleranceSpeed(CTS);
2878
      MMouse(X, Y, 0, 0);
2879
      wait(500);
2880
      ClickMouse2(True);
2881
      if Debugs then
2882
        writeln('DownLadder: True');
2883
      if(DidRedClick) then
2884
        break;
2885
    end else
2886
      begin
2887
        ColorToleranceSpeed(CTS);
2888
        if (FoundSymbol(1, X, Y, Dist) = False) or (FoundSymbol(2, X, Y, Dist) = False) or (FindLadder = False) then
2889
          FindTrapDoor;
2890
      end;
2891
    ColorToleranceSpeed(CTS);
2892
2893
    Inc(Tries);
2894
    if (Tries > 4) then
2895
      break;
2896
  until((FoundSymbol(1, X, Y, Dist) = False) or (FoundSymbol(2, X, Y, Dist) = False) or (FindLadder = True)  or (tries > 10));
2897
2898
  MakeCompass('W');
2899
  Result:= ((FoundSymbol(1, X, Y, Dist) = False) or (FoundSymbol(2, X, Y, Dist) = False) or (FindLadder = True));
2900
  if Debugs then
2901
    writeln('DownLadder: ' + ToStr(Result));
2902
end;
2903
2904
Procedure PickUpItems(ItemList: TStringArray);
2905
var
2906
  Items, TPA: TPointArray;
2907
  ATPA: T2DPointArray;
2908
  Item: TPoint;
2909
  ItemArray: Array of ItemPickup;
2910
  I, CTS: Integer;
2911
begin
2912
  LProc:= 'PickUpItems';
2913
  SetLength(ItemArray, Length(ItemCheckList) + 1);
2914
  For I:= 0 To High(ItemCheckList) do
2915
    Case lowercase(ItemCheckList[I]) of
2916
      'noted':
2917
          begin
2918
            ItemArray[I].Color := 8767731;     //Noted Items.
2919
            ItemArray[I].Speed := [0.64, 1.34];
2920
            ItemArray[I].Tolerance := 10;
2921
          end;
2922
      'bones', 'bone':
2923
          begin
2924
            ItemArray[I].Color := 13423589;     //Bones Items.
2925
            ItemArray[I].Speed := [0.39, 2.16];
2926
            ItemArray[I].Tolerance := 11;
2927
          end;
2928
      'bluecharm', 'blue charm', 'bluecharms':
2929
          begin
2930
            ItemArray[I].Color := 10725730;     //BlueCharm Items.
2931
            ItemArray[I].Speed := [0.11, 0.44];
2932
            ItemArray[I].Tolerance := 22;
2933
          end;
2934
      'coins', 'gold', 'gp':
2935
          begin
2936
            ItemArray[I].Color := 4641005;     //Coins Items.
2937
            ItemArray[I].Speed := [0.29, 3.33];
2938
            ItemArray[I].Tolerance := 5;
2939
          end;
2940
    end;
2941
2942
  CTS:= GetColorToleranceSpeed;
2943
  Items:= GetMMDotsOnMS('item');
2944
  if (Length(Items) > 0) then
2945
  begin
2946
    Item:= MMToMS(Items[0]);
2947
2948
    if ((Item.X <> 0) AND (Item.Y <> 0) AND (InvFull = False)) then
2949
    begin
2950
      For I:= 0 To High(ItemArray) - 1 do
2951
      begin
2952
        ColorToleranceSpeed(2);
2953
        SetColorSpeed2Modifiers(ItemArray[I].Speed[0], ItemArray[I].Speed[1]);
2954
        FindColorsTolerance(TPA, ItemArray[I].Color, MSX1, MSY1, MSX2, MSY2, ItemArray[I].Tolerance);
2955
        ATPA:= TPAToATPAEx(TPA, 10, 10);
2956
        ColorToleranceSpeed(CTS);
2957
        SetColorSpeed2Modifiers(0.02, 0.02);
2958
2959
        if (Length(ATPA) < 1) then
2960
          exit;
2961
2962
        Item.x:= MSCX; Item.y:= MSCY;
2963
        SortATPAFromFirstPoint(ATPA, Item);
2964
        MiddleTPAEx(ATPA[0], Item.X, Item.Y);
2965
2966
        MMouse(Item.X, Item.Y, 0, 0);
2967
        wait(200);
2968
        if (isUptextMultiCustom(ItemList) or IsUptextMultiCustom(['ake', 'nteract', 'ttack'])) then
2969
        begin
2970
          ClickMouse2(False);
2971
          WaitOptionMulti(ItemList, 300);
2972
          wait(200);
2973
          while isMoving do
2974
            wait(1);
2975
        end;
2976
      end;
2977
    end;
2978
    ColorToleranceSpeed(CTS);
2979
    SetColorSpeed2Modifiers(0.02, 0.02);
2980
  end;
2981
end;
2982
2983
Procedure CheckList;
2984
begin
2985
  FindNormalRandoms;
2986
  If (Not LoggedIn) then
2987
    LoginPlayer;
2988
end;
2989
2990
Procedure SaveUsNRun;
2991
var
2992
  X, Y, Dist, Tries: Integer;
2993
begin
2994
  Tries:= 0;
2995
  LProc:= 'RunAway';
2996
  if ((PrayerLevel <= WTP) or OutOfPrayer) then
2997
  begin
2998
    UpLadder;
2999
    while((FoundSymbol(1, X, Y, Dist) = False) or (FoundSymbol(2, X, Y, Dist) = False) or (Tries < 10)) do
3000
    begin
3001
      UpLadder;
3002
      Inc(Tries);
3003
      wait(100);
3004
      if (tries >= 10) then
3005
        break;
3006
      writeln('RunAway: SymbolFinding');
3007
    end;
3008
3009
    Tries:= 0;
3010
    if (FindObjectMM([LadderColour], Dist, 10, 10, LTol, False, [0.58, 4.00]) = False) then
3011
    begin
3012
      repeat
3013
        PrayAltar;
3014
        while IsMoving do
3015
          wait(100);
3016
        Inc(Tries);
3017
        if (tries > 5) then
3018
          break;
3019
      Until((PrayerLevel > WTP)  or (Tries > 5));
3020
    end;
3021
  end;
3022
end;
3023
3024
Procedure SOS;
3025
var
3026
  X, Y, Dist: Integer;
3027
begin
3028
  CheckList;
3029
3030
  if ((SaveMe = True) And (NoSS = True)) then
3031
  begin
3032
    LProc:= 'SOS';
3033
    repeat
3034
      if (HPLevel > WTE) then
3035
        SaveMe:= False;
3036
      SaveUsNRun;
3037
      MakeCompass('W');
3038
      writeln('~SOS~ Out of food AND not using SoulSplit.. Running Away..');
3039
      SaveUsNRun;
3040
    until(FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or (FindLadder = False) or (SaveMe = False));
3041
3042
    repeat
3043
      Logout;
3044
    until(Not LoggedIn);
3045
    writeln('~SOS~ Successfully Ran Away..');
3046
    TerminateScript;
3047
  end;
3048
end;
3049
3050
Procedure RefillPrayer;
3051
var
3052
  X, Y, Dist, Tries: Integer;
3053
begin
3054
  Tries:= 0;
3055
  LProc:= 'RefillPrayer';
3056
  if AtHartwin then
3057
    exit;
3058
3059
  if ((PrayerLevel <= WTP) or OutOfPrayer) then
3060
  begin
3061
    UpLadder;
3062
    while((FoundSymbol(1, X, Y, Dist) = False) or (FoundSymbol(2, X, Y, Dist) = False) or (Tries < 10)) do
3063
    begin
3064
      Inc(Tries);
3065
      wait(100);
3066
      if (tries >= 10) then
3067
        break;
3068
      if Debugs then
3069
        writeln('RefillPrayer: SymbolFinding');
3070
    end;
3071
3072
    Tries:= 0;
3073
    if (FindObjectMM([LadderColour], Dist, 10, 10, LTol, True, [0.58, 4.00]) = False) then
3074
    begin
3075
      repeat
3076
        PrayAltar;
3077
        while IsMoving do
3078
          wait(100);
3079
        Inc(Tries);
3080
        if (tries > 5) then
3081
          break;
3082
      Until((PrayerLevel > WTP)  or (Tries > 5));
3083
    end;
3084
3085
    if(FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or (FindLadder = False) or (PrayerLevel > WTP)) then
3086
      DownLadder;
3087
    if (IsPrayerOn = False) then
3088
      TurnPrayerOn(QP);
3089
  end;
3090
end;
3091
3092
Function ReturnFoodInfo(Food: String): FoodStruct;
3093
begin
3094
    ResetEverything;
3095
       Case LowerCase(Food) of
3096
        'shark':
3097
                                                  begin
3098
                                                      Result.Item:= DTMFromString('mlwAAAHicY2dgYChkYmAoB+IqIK4B4gYoOxOIZRkZGKSBWB6IlYBYG4h1gFgNiEMdDRimVacy9JcmMHQXxTG4m2kwxHmYMvDx8TFwAc3FhRnxYCgAAFFKC0Y=');
3099
                                                      Result.Uptext:= ['Shark', 'hark', 'ark'];
3100
                                                  end;
3101
3102
        'raw shark', 'summoning shark', 'bunyip shark':
3103
                                                  begin
3104
                                                      Result.Item:= DTMFromString('mWAAAAHicY2FgYDABYj0gtgZiOyCWYGRgkAFiKSBWAOLGmmqGxNhYhpL8fIa8zEwGLqAaZMyIhkEAAEz2BqM=');
3105
                                                      Result.Uptext:= ['Raw shark', 'hark', 'ark', 'aw sha'];
3106
                                                  end;
3107
3108
        'lob', 'lobs', 'lobster', 'lobby', 'lobbies':
3109
                                                  begin
3110
                                                      Result.Item:= DTMFromString('mlwAAAHicY2dgYJjPxMCwGIoXAvFMIF4AxEuAuJ8RgicB8XQg7oLiDiDm4+NjKLcRZJjtJ86wJVqaYV2EFMP8AHGGbTHSDFxAc3FhRjwYCgD3pg8b');
3111
                                                      Result.Uptext:= ['Lob', 'obster', 'bster'];
3112
                                                  end;
3113
3114
        'raw lobster', 'raw lob', 'summoning lob',
3115
        'summoning lobster', 'bunyip lobster', 'bunyip lob':
3116
                                                  begin
3117
                                                      Result.Item:= DTMFromString('mQwAAAHicY2ZgYEgG4jQgjgfibCAuBOI8IE40lwXjYkdlBnYgH4YZkTAQAADQ1ATP');
3118
                                                      Result.Uptext:= ['Raw lobster', 'aw lob', 'lobster', 'obste'];
3119
                                                  end;
3120
        'tuna':
3121
                                                  begin
3122
                                                      Result.Item:= DTMFromString('mggAAAHicY2NgYPBkYmDwA+JgKO0OxVsYGRg2QvFWIN4JZadGhjPEBAUwRPj5MOQmxDHw8fGB+VxAs7BhRhwYAgDSsAuu');
3123
                                                      Result.Uptext:= ['Tuna', 'una'];
3124
                                                  end;
3125
        'sardine':
3126
                                                  begin
3127
                                                      Result.Item:= DTMFromString('mWAAAAHicY2FgYDjOxMBwBIhPAvEZIFZmZGBQBWJ5IJYD4urcLIYFfd0MqZHhDNnxsQxcQD3ImBENgwAADhkJKQ==');
3128
                                                      Result.Uptext:= ['ardine', 'Sardine', 'dine'];
3129
                                                  end;
3130
        'rocktail', 'rock', 'tail':
3131
                                                  begin
3132
                                                      Result.Item:= DTMFromString('mWAAAAHicY2FgYHBkZGBwB2J7ILYF4mMMEHweiI8AcUdpGZBkAmMdITYGdiALGTOiYRAAAGyEBgc=');
3133
                                                      Result.Uptext:= ['ocktail', 'tail', 'ockta', 'Rocktail'];
3134
                                                  end;
3135
        'cake':
3136
                                                  begin
3137
                                                      Result.Item:= DTMFromString('mrAAAAHic42BgYChhYmAoAOIqKC4G4gYmiHg1ELswQrAjELsCsR0QuwGxFxTv376d4czhwwwTu7sZ5s+YwbB+xQoGNTlWhsIoAYYYYV4GLqAd+DAjAQwDAJ8PEe0=');
3138
                                                      Result.Uptext:= ['ake', 'Cake'];
3139
                                                  end;
3140
        'bass':
3141
                                                  begin
3142
                                                      Result.Item:= DTMFromString('mggAAAHicY2NgYJjFxMAwD4pnAvF8IF4MxD6MEOwBxO5A7ArFfHx8DGed5BjKvZ0ZNltJMcw3FgdjLqBZ2DAjDgwBALd+CvI=');
3143
                                                      Result.Uptext:= ['ass', 'Bass'];
3144
                                                  end;
3145
        'sword', 'swordy', 'swordfish', 'swords',
3146
                            'swordies', 'sword fish':
3147
                                                  begin
3148
                                                      Result.Item:= DTMFromString('mbQAAAHicY2VgYMhjYmDIAOIsIC4G4kIg9mZkYPAHYi8g9gViTyDuTJzIUBXWyFAUWAmmc32LGbiA+tExIxYMBgDAPgpw');
3149
                                                      Result.Uptext:= ['Swordfis', 'wordfis', 'ordfis', 'Swordfish'];
3150
                                                  end;
3151
        'monk', 'monkfish', 'monk fish', 'monks':
3152
                                                  begin
3153
                                                      Result.Item:= DTMFromString('mlwAAAHicY2dgYDjIxMCwB4h3AfFOID4AxEeheBYjBE8H4nlAPA2IZwDxHCAWEuJgiApwZQjxcmDI9nRncDTVZtBWVWRwtDBi4AKaiwsz4sFQAAANlg6I');
3154
                                                      Result.Uptext:= ['Monkfi', 'onkfish', 'onkfis', 'Monkfish'];
3155
                                                  end;
3156
        'cave', 'cavefish', 'cave fish':
3157
                                                  begin
3158
                                                      Result.Item:= DTMFromString('mlwAAAHicY2dgYJjCxMAwGYinAfEMKLsfiCcAMTcjAwMHELNCaRYozQvEpX4RDAuz8xhmpWcyrC4qZTDQ02NYlJPPcKChmYELaC4uzIgHQwEALJsOBw==');
3159
                                                      Result.Uptext:= ['avefi', 'Cavefish', 'avefish', 'avefish'];
3160
                                                  end;
3161
        'pizza', 'meat pizza':
3162
                                                  begin
3163
                                                      Result.Item:= DTMFromString('m1gAAAHic42JgYChhYmCoA+JKIC4F4kImiFg+VLwJiKuBuIeRgaEPiDuAuBOK+4F4EhBPBeJeIG4F4uVLJRnKJQXBGMYG0f1xokDbmOCYC0gSgxmJxAgAAEAWEdw=');
3164
                                                      Result.Uptext:= ['Pizza', 'eatpiz'];
3165
                                                  end;
3166
        'turtle', 'sea', 'sea turtle', 'squirtle':
3167
                                                  begin
3168
                                                      Result.Item:= DTMFromString('mlwAAAHicY2dgYJjCxMAwEYhnAPEsIJ4KxHOAuB+IpzMCxYB4BhBPhuKFQDwfiH09nBj8vVzA2NXRhsHD2Y4h15+fIdGNj4ELaC4uzIgHQwEAvecOTA==');
3169
                                                      Result.Uptext:= ['turtle', 'Seaturtle', 'Sea-turtle', 'urtle', 'ea-tur', 'eaturle'];
3170
                                                  end;
3171
        'manta', 'ray', 'manta ray', 'mantaray':
3172
                                                  begin
3173
                                                      Result.Item:= DTMFromString('mggAAAHicY2NgYMhlYmAoBOIcIM4E4mIgzgDi3YwMDDuBeBsQ7wPivVB+hLMhg5eFJkOUixEYg9jJ3uYMXECzsGFGHBgCAAfwC+4=');
3174
                                                      Result.Uptext:= ['manta', 'Manta', 'antaray', 'MantaRay', 'Manta-ray', 'ntara'];
3175
                                                  end;
3176
        end;
3177
end;
3178
3179
Procedure HealPlayer(Food: TStringArray);
3180
var
3181
  I, X, Y, Scrolls: Integer;
3182
  TPA: TPointArray;
3183
  FS: FoodStruct;
3184
begin
3185
  LProc:= 'HealPlayer';
3186
  ResetEverything;
3187
   if (HPLevel <= WTE) then
3188
   begin
3189
    if (GetCurrentTab <> Tab_Inv) then
3190
      GameTab(Tab_Inv);
3191
     wait(1000);
3192
     For I:= 0 To High(Food) do
3193
     begin
3194
      FS:= ReturnFoodInfo(Food[I]);
3195
3196
    if (GetCurrentTab <> Tab_Inv) then
3197
      GameTab(Tab_Inv);
3198
     wait(500);
3199
     SetLength(TPA, 200);
3200
     Case LowerCase(Food[I]) of
3201
        'raw shark', 'summoning shark', 'bunyip shark',
3202
        'raw lobster', 'raw lob', 'summoning lob',
3203
        'summoning lobster', 'bunyip lobster', 'bunyip lob':
3204
            begin
3205
              Scrolls := DTMFromString('mbQAAAHicY2VgYJjGxMAwC4jnAfFcKC5iZGAoBOIcIC4G4log9vE2ZggJiWKIiVvMkJCWzuDmMZeBC6gfHTNiwWAAABHPCxQ=');
3206
              If (FindDTM(Scrolls, X, Y, MIX1, MIY1, MIX2, MIY2) and FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2)) then
3207
              repeat
3208
                if SummoningRenew(WhichFamiliar) then
3209
                begin
3210
                  if InteractFamiliar(['ast', 'Cast', 'allow Wh', 'Whole', 'hole', 'ole', 'allow', 'wall']) then
3211
                  begin
3212
                    SummoningRenew(WhichFamiliar);
3213
                    FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2);
3214
                    MMouse(X, Y, 0, 0);
3215
                    if WaitUptextMulti(FS.Uptext, 500) then
3216
                    begin
3217
                      ClickMouse2(MOUSE_LEFT);
3218
                      Wait(500);
3219
                      FreeDTM(Scrolls);
3220
                      FreeDTM(FS.Item);
3221
                      Exit;
3222
                    end;
3223
                  end;
3224
                end else
3225
                  break;
3226
                if ((Not FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2)) or (Not FindDTM(Scrolls, X, Y, MIX1, MIY1, MIX2, MIY2))) then
3227
                begin
3228
                  MMouse(660, 188, 10, 10);
3229
                  ClickMouse2(MOUSE_LEFT);
3230
                  Break;
3231
                end;
3232
              Until((HPLevel > WTE) or (FindDTMs(FS.Item, TPA, MIX1, MIY1, MIX2, MIY2) = False) or (FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2) = False));
3233
              FreeDTM(Scrolls);
3234
            end;
3235
     else
3236
      try
3237
       if FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2) then
3238
       repeat
3239
          FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2);
3240
          FindDTMs(FS.Item, TPA, MIX1, MIY1, MIX2, MIY2);
3241
          MMouse(X, Y, 5, 5);
3242
          WaitUptextMulti(['at', 'eat', 'Eat'], 500);
3243
          ClickMouse2(true);
3244
          wait(1000);
3245
       Until((HPLevel > WTE) or (FindDTMs(FS.Item, TPA, MIX1, MIY1, MIX2, MIY2) = False) or (FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2) = False));
3246
      except
3247
        SaveMe:= True;
3248
      end;
3249
     end;
3250
3251
    if (GetCurrentTab <> Tab_Inv) then
3252
      GameTab(Tab_Inv);
3253
      try
3254
       if((HPLevel <= WTE) and (Not FindDTM(FS.Item, X, Y, MIX1, MIY1, MIX2, MIY2)) and (QP = False)) then
3255
       begin
3256
        writeln('~HealPlayer~ HPLevel: ' + ToStr(HPLevel));
3257
       end else
3258
        if (HPLevel < 400) then
3259
        begin
3260
          writeln('~EMERGENCY~ HPLevel: ' + ToStr(HPLevel) + ' Is Too Low');
3261
          SaveMe:= True;
3262
        end;
3263
3264
       FreeDTM(FS.Item);
3265
     except
3266
      SaveMe:= True;
3267
     end;
3268
    end;
3269
  end;
3270
end;
3271
3272
Procedure FightZombies;
3273
begin
3274
  LProc:= 'FightZombies';
3275
  if AtHartwin then
3276
    exit;
3277
3278
  GameTab(Tab_Inv);
3279
  while (InFight) do
3280
  begin
3281
    wait(50);
3282
    if PickItems then
3283
      PickUpItems(Players[CurrentPlayer].Strings);
3284
    RefillPrayer;
3285
    HealPlayer(Food);
3286
3287
    if ((IsPrayerOn = False)  and (PrayerLevel > WTP)) then
3288
      TurnPrayerOn(QP);
3289
  end;
3290
3291
  if (not InFight) then
3292
  begin
3293
    if PickItems then
3294
      PickUpItems(Players[CurrentPlayer].Strings);
3295
    RefillPrayer;
3296
    HealPlayer(Food);
3297
3298
    if ((IsPrayerOn = False) and (PrayerLevel > WTP)) then
3299
      TurnPrayerOn(QP);
3300
    AttackZombies;
3301
  end;
3302
end;
3303
3304
procedure RunAwayEx(dir: variant; RunFar: Boolean; Action, WaitTime: Integer);
3305
var
3306
  Rad, T: Integer;
3307
  Deg: extended;
3308
begin
3309
  if (not LoggedIn) then exit;
3310
3311
  if RunFar then
3312
    Rad := 63
3313
  else
3314
    Rad := 30;
3315
  Deg := variantToDirection(dir);
3316
3317
  if (Action < 3) then
3318
  begin
3319
    //SetRun(True);
3320
    MFNF(Trunc(Rad * Sin(Radians(FixD(Rs_GetCompassAngleDegrees + Deg))) + MMCX + Random(5)),
3321
      Trunc(-Rad * Cos(Radians(FixD(Rs_GetCompassAngleDegrees + Deg))) + MMCY + Random(5)), 1, 1);
3322
    FFlag(0);
3323
    Wait(500 + Random(1500));
3324
    t := GetSystemTime;
3325
    while ((GetSystemTime - t) < WaitTime) and (LoggedIn) do
3326
      if (Random(5) = 0) then
3327
        IdleTime(2000, 500, 1.0)
3328
      else
3329
        Wait((WaitTime - (GetSystemTime - t)) div 5);
3330
  end;
3331
3332
  if (Action = 1) or (Action = 3) then
3333
  begin
3334
    MFNF(Trunc(Rad * Sin(Radians(FixD(Rs_GetCompassAngleDegrees + (Deg + 180)))) + MMCX - Random(5)),
3335
      Trunc(-Rad * Cos(Radians(FixD(Rs_GetCompassAngleDegrees + (Deg + 180)))) + MMCY - Random(5)), 1, 1);
3336
    FFlag(0);
3337
    Wait(500 + Random(1500));
3338
  end;
3339
3340
  //SetRun(False);
3341
end;
3342
3343
Function DownTheHall: Boolean;
3344
var
3345
  X, Y, Dist: Integer;
3346
begin
3347
  LProc:= 'DownTheHall';
3348
  if (FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or AtHartwin or FindLadder) then
3349
    exit
3350
  else
3351
    begin
3352
      ClickNorth(SRL_ANGLE_HIGH);
3353
      RunAwayEx('E', True, 2, 5000);
3354
      RunAwayEx('S', True, 2, 5000);
3355
      Wait(1000);
3356
      MakeCompass('W');
3357
    end;
3358
3359
  Result:= FoundSymbol(1, X, Y, Dist) or FoundSymbol(2, X, Y, Dist) or AtHartwin or FindLadder;
3360
  SOS;
3361
end;
3362
3363
Procedure MainLoop;
3364
var
3365
  X, Y, Dist: Integer;
3366
begin
3367
  SOS;
3368
  TalkHartwin;
3369
  SOS;
3370
  FightZombies;
3371
  if (Not FindLadder) then
3372
    DownTheHall;
3373
  RefillPrayer;
3374
  if Paint then
3375
    paintReport;
3376
  printReport;
3377
  SOS;
3378
  if((IsPrayerOn = False)  and (PrayerLevel > WTP)) then
3379
    TurnPrayerOn(QP);
3380
  FightZombies;
3381
  SOS;
3382
  HealPlayer(Food);
3383
  if (Not FindLadder) then
3384
    DownTheHall;
3385
  FightZombies;
3386
  if Paint then
3387
    paintReport;
3388
  printReport;
3389
  SOS;
3390
  if(FoundSymbol(1, X, Y, Dist) and (PrayerLevel > WTP)) then
3391
    DownLadder;
3392
  SOS;
3393
  FightZombies;
3394
  if (Not FindLadder) then
3395
    DownTheHall;
3396
  if ((TimeFromMark(TimeToDrink) > 60000) or (TimeFromMark(TimeToDrink) < 1)) then
3397
  begin
3398
    DrinkPotion(Potion);
3399
    TimeToDrink:= 0;
3400
    MarkTime(TimeToDrink);
3401
  end;
3402
  if Paint then
3403
    paintReport;
3404
  printReport;
3405
  SummoningRenew(WhichFamiliar);
3406
end;
3407
3408
begin
3409
  LoadInfo;
3410
  if (Permanent = False) then
3411
  begin
3412
    SafeInitForm;
3413
    SafeShowFormModal;
3414
  end;
3415
  InitializeVariables;
3416
  Smart_Server := 72;
3417
  Smart_Members := True;
3418
  Smart_Signed := True;
3419
  Smart_SuperDetail := False;
3420
3421
  SetupSRL;
3422
  DeclarePlayers;
3423
  LoginPlayer;
3424
  cleardebug;
3425
  SetAngle(SRL_ANGLE_HIGH);
3426
  AddOnTerminate('LastRun');
3427
3428
  SStatus:= 'Running';
3429
  StartExperience:= 0;
3430
  RCTS:= GetColorToleranceSpeed;
3431
  ToggleXPBar(True);
3432
  StartExperience:= GetXPBarTotal;
3433
  SmartSetDebug(Paint);
3434
  Smart_ClearCanvas;
3435
3436
  MouseBox(MSX1, MSY1, MSX2, MSY2, 3);
3437
  InitialSkills;
3438
  PotSkills;
3439
  DrinkPotion(Potion);
3440
  HealPlayer(Food);
3441
  LoadDTMs;
3442
  AddOnTerminate('FreeLoadedDTMs');
3443
3444
  repeat
3445
    MainLoop;
3446
    if ((Not LoggedIn) and (Not SaveMe)) then
3447
      LoginPlayer;
3448
  until(false);
3449
end.