QBasic and QB64 Discussion Board

[QB Forum Archives (1999-2009)/ ] [QB FAQ] [QB Links and Downloads] [Subforums and Chat Room] [Search]

QB64.Net Homepage   QB/QB64 Keywords   QB Graphics Forum   Homework Policy



Hello and well met!

by (no login)

I was pleasantly surprised when I found QB64! I could not believe that someone had actually gotten a QuickBasic compiler to run on the Macintosh (let alone Windows). I just wanted to pop by and say hello and I hope things are going well for you in this endeavor.

One thing I noticed is that the compiled programs are put into the same directory where the compiler resides. Can I make a suggestion to make the IDE have a "Where do EXEs go?" option so this can be set. But it is just as easy to take the compiled program out of the main directory. So not a high priority kind of request. :-)

I really was going OMG!!! At work today. We use Macs at work (The University of Houston) and it just shocked me no end to actually see a compiler that works for QB! I about fell out of my chair. A couple of people asked me what I was staring at and I just had to show them. And small too! The compiled samples are all smaller than a megabyte in size! This really impressed me too. It is something like this that Linux needs to be able to create CDs that don't require something like Python to run scripts. Makes me wonder if this isn't the thing they were looking for when they settled on using Python.

Anyway - off to bed! It is 1:00am here and I have to get some sleep. Lots of meetings tomorrow and I have to be at least partially awake! :-) Congratulations again on a wonderful compiler. It is simple, fast, and works right out of the box! :-)

Mark

Posted on Jan 14, 2013, 10:16 PM

Respond to this message   

Return to Index


Executables reside in the QB64 directory because...

by (Login qb432l)
R

...there are certain files required for their execution. For example, if you create a zip file of an executable compiled in QB64, you must include these support files. The same would apply if you wanted to move an executable to a different directory. Of coure, your "which directory?" option could accommodate that, but you would end up with a lot of duplicate files scattered all over the place.

Anyway, Hello!
-Bob

Posted on Jan 15, 2013, 4:40 AM

Respond to this message   

Return to Index


Just out of curiosity, since I'm not a QB64 enthusiast,

by (Login Kewbie)
R

are you saying that QB64 requires some kind of runtime library? And if so, that it MUST reside in the same directory as the executable?

If that be the case, then "yuck". I hope they eventually correct it so only a single copy can reside in a known location.

Mostly I keep quiet about QB64, since I have no interest in it. I prefer to stick to PowerBASIC.

Kew, wearng asbestos suit to shield himself from Menno's flames :-D

Posted on Jan 15, 2013, 11:00 AM

Respond to this message   

Return to Index


Re: Just out of curiosity, since I'm not a QB64 enthusiast,

by (Login MCalkins)
Moderator

All Windows applications require Windows DLLs, such as kernel32.dll. These are usually in the System32 folder.

Additionally, the SDL version of QB64 requires a number of DLLs, the C++ Standard Library DLL, the SDL DLLs, and a few others.

The GL version of QB64 statically links to it's libraries, or includes them as source. The result is a larger, but more self contained executable that only depends on the Windows DLLs.

The DLLs don't have to be in the same folder. Windows searches in several places for them. However, it's probably better to keep them in the same folder to avoid DLL Hell, or else use a manifest, and load them from WinSxS.

Regards,
Michael

Posted on Jan 15, 2013, 12:34 PM

Respond to this message   

Return to Index


RE: Executables in main folder and dependent files

by Galleon (no login)

I agree, there should now be an option to set this path.

Originally, QB64 could not produce stand-alone executables and programs were dependent on DLLs or the 'common' folder, which would have meant recreating every DLL or common folder for every executable program.

Now, with QB64 GL, stand-alone executables are the norm so this is not a concern.

I should note that QB64 GL has not been released for MacOSX yet, but expect a release sometime within the next 2 weeks.

Posted on Jan 18, 2013, 1:15 PM

Respond to this message   

Return to Index


Qb vs turbo C

by (no login)

Hi,

After enjoying for a while my collection of calculators, a question rise up : For example, all casio machines feature a sort of Basic dialect, which however could not be compiled, i dunno why. So 100 times i read, Basic is not performant, assembler is faster, Turbo C, etc yes because all theses years, an interpreted language was compared to a compiled one (even is assembler isn't compiled, but C is). Now i wonder if C is really faster than Qb if both are compiled. Anyway i never programmed in C, also i don't have yet the cable to transfer anything to my calculators. Thanks, L

Posted on Jan 14, 2013, 1:55 PM

Respond to this message   

Return to Index


Re: Qb vs turbo C

by (Login MCalkins)
Moderator

Are you asking about your computer, or about your calculators? I have no knowledge of calculators.

As a matter of principle, a compiled program should be significantly faster than an interpreted program.

As to whether compiler X produces faster code than compiler Y, that depends very much on the compiler, and the compiler's options. How well does it optimize? What machine is it targeting? It depends also on the program. How well does the program express the intent of the programmer? The better the optimizing compiler understands what the program is actually supposed to do, and supposed not to do, the better it can optimize.

I would expect C to be generally a little faster than BASIC. The C and C++ languages are a little more expressive on certain things that can help optimization. That having been said, in many cases, I would expect that a good BASIC compiler could probably generate near equivalent code to a C compiler.

Without benchmarking the program, you won't know for sure.

Why Turbo C? There are more modern compilers...

GCC (in the form of mingw-w32, or perhaps djgpp)
Microsoft 32-bit C/C++ Optimizing Compiler (comes with Visual Studio Express)
Clang/LLVM
OpenWatcom
Intel C/C++ compiler (free for non-commercial use)

would probably all be worth considering.

Note that GCC and Microsoft do not optimize by default. You have to tell them to optimize, with -O3 (GCC) or /O2 (Microsoft).

I find that QB64 is many times faster than interpreted QBASIC 1.1 through NTVDM. And that's despite QB64 generating inefficient code.

Regards,
Michael

Posted on Jan 14, 2013, 2:39 PM

Respond to this message   

Return to Index


Why Turbo C ?

by (no login)

Ok thanks Micheal,

http://fr.wikipedia.org/wiki/Casio_Graph_100%2B

Compilateurs C/C++ pour Graph 100+

Les compilateurs les plus couramment utilisés sont Digital Mars et Turbo C

-> The most used compiler are Digital Mars and Turbo C...

BTW this machine has an 80286 compatible. I found where to buy the cable already:

http://www.util-pocket.com/casio/index.htm

Cheers, L



Posted on Jan 14, 2013, 3:38 PM

Respond to this message   

Return to Index


Interesting...

by (Login MCalkins)
Moderator

So, it's an Intel 286 compatible (16 bit), but it doesn't say what operating system... DOS? Or is it something else that Borland and Digital Mars just happen to support? The CRT and the executable image format will be specific to whatever operating system it uses.

Nevermind about using GCC or Microsoft. Those are 32 bit/64 bit compilers. You need a 16 bit compiler.

OpenWatcom and Borland Turbo C have 16 bit compilers.

Nasm would support it, if you could figure out what image format and libraries to use.

Why use a 286 calculator at all? Surely your computer is much, much more powerful...

Regards,
Michael

Posted on Jan 14, 2013, 5:18 PM

Respond to this message   

Return to Index


Subscript out of range

by Leon Schrecengost (no login)

I have a program with 6 arrays dimisioned as dim 20,2. They work fine 0,0 and 0,1 thru 10,0 and 10,1. When I try to put data in to 11,0 I get the subscript error. The data I'm trying to store is time$. I use the program to monitor furnace zone on/off times. I would like to post the pgm so you could take a look at it. I have it saved to a usb drive. The computer I use for the pgm is not connected to the internet. How can I post the code?
Leon

Posted on Jan 12, 2013, 5:24 PM

Respond to this message   

Return to Index


Save the program to a text file using Notepad.

by Solitaire (no login)

Start Notepad on your computer and select All Files instead of Text Documents.
Navigate to the folder containing your QB program code and open it.
Save it to a text file on your USB drive.
You can then copy and paste it to the forum.

Posted on Jan 12, 2013, 5:47 PM

Respond to this message   

Return to Index


Save the program in QB4.5 as text readable in Save As

by (Login burger2227)
R

Make sure the code is text before closing the BAS file and open it with Notepad. Then you can copy and paste here. Indentation will be lost on this forum.

If you can't open a BAS file with Notepad, add it to your Open with right click menu. Make sure the Always box is not checked after you select it.

Posted on Jan 12, 2013, 6:30 PM

Respond to this message   

Return to Index


posting code

by Leon Schrecengost (no login)

I have the code in a txt file. I copy it but it doesn't want to paste into this site. Do I have to post it to a different site rather than use the respond to your message?
Leon

Posted on Jan 13, 2013, 11:36 AM

Respond to this message   

Return to Index


*Make sure you've copied it, then just click Edit/Paste with the cursor in 'Message Text'.

by (Login qb432l)
R

*

Posted on Jan 13, 2013, 5:59 PM

Respond to this message   

Return to Index


Posting code

by Leon Schrecengost (no login)

I hate to be so naive but where is the screen with message text selection. I,ve been trying to put the code on the respond to your message line.
I have the text pgm in my document file and can copy it. When I return to the qbasic screen paste is not highlited.
Leon

Posted on Jan 14, 2013, 6:38 AM

Respond to this message   

Return to Index


Strange...

by (Login qb432l)
R

When you click "Respond to this message", you should see four input boxes: Your Name, Your Email, Message Title, and Message Text. Click in the Message Text box and then click Edit/Paste. Shouldn't be a problem (at least, it never has been before). When you reponded to my message, didn't you get a "Message Text" box in which you typed your response? That's where you paste the code.

-Bob

Posted on Jan 14, 2013, 11:02 AM

Respond to this message   

Return to Index


posting code

by Leon Schrecengost (no login)

CLS : 'Program name is FURNMON4
flag1 = 0: flag2 = 0: flag3 = 0: flag4 = 0: flag5 = 0: flag6 = 0: flag7 = 0
flag8 = 0: LOCATE 2, 65: PRINT TIME$: LOCATE 1, 65: PRINT DATE$
DIM zone1$(20, 2): 'zone 1 is Basement data array all arrays are 20 rows
DIM zone2%(20, 2): 'zone 2 is Shop data array 2 col
DIM zone3$(20, 2): 'zone 3 is main floor data array
DIM zone4$(20, 2): 'zone 4 is Guest apt data array
DIM zone5$(20, 2): 'zone 5 is 2nd Flooe data array
DIM zone6$(20, 2): 'zone 6 is Hot water data array
start:
t$ = TIME$
i$ = INKEY$
IF i$ = "e" THEN END
LOCATE 2, 51: PRINT "in2=": LOCATE 2, 56: PRINT in2
LOCATE 1, 51: PRINT "in1=": LOCATE 1, 56: PRINT in1
z1$ = zone1$: 'Basement"
z2 = zone2%: '"Shop"
z3$ = zone3$: '"Main"
z4$ = zone4$: '"Guest Apt"
z5$ = zone5$: '"2nd Floor"
z6$ = zone6$: '"Hot Water"
'p1$ = Z$(0, 1): p2$ = Z$(0, 2): p3$ = Z$(0, 0)
LOCATE 1, 33: PRINT " e to exit pgm"
LOCATE 1, 1: PRINT "press v to view : "
LOCATE 1, 18: PRINT " p to print :"
IF i$ = "v" THEN GOSUB alldata
IF i$ = "p" THEN GOSUB printer
IF i$ = "s" THEN GOSUB allshop
IF i$ = "a" THEN GOSUB allapt
z1$(0, 0) = "Basement": z2$(0, 0) = "Shop": z3$(0, 0) = "main"
z4$(0, 0) = "Guest apt": z5$(0, 0) = "2nd Floor"
z6$(0, 0) = "hot water"
Z$(0, 1) = "ON"
Z$(0, 2) = "OFF"
Z$(0, 0) = "ZONE"
OUT 634, 253: REM Selects zones 1-4'hardware multiplexer
in1 = ((INP(633) AND 8) = 8): in2 = ((INP(633) AND 16) = 16) 'lines 160 to
in3 = ((INP(633) AND 32) = 32): in4 = ((INP(633) AND 64) = 64) '200 test
OUT 634, 2: REM selects zones 5-8 'ea bit
in5 = ((INP(633) AND 8) = 8): in6 = ((INP(633) AND 16) = 16)
in7 = ((INP(633) AND 32) = 32): in8 = ((INP(633) AND 64) = 64)


IF in1 = -1 AND flag1 = 0 THEN 'tests for basement status
z1$(0, 1) = t$: flag1 = 1
ELSEIF in1 = 0 AND flag1 = 1 THEN
z1$(0, 2) = t$: flag1 = 2
ELSEIF in1 = -1 AND flag1 = 2 THEN
z1$(1, 1) = t$: flag1 = 3
ELSEIF in1 = 0 AND flag1 = 3 THEN
z1$(1, 2) = t$: flag1 = 4
ELSEIF in1 = -1 AND flag1 = 4 THEN
z1$(2, 1) = t$: flag1 = 5
ELSEIF in1 = 0 AND flag1 = 5 THEN
z1$(2, 2) = t$: flag1 = 6
END IF


IF in2 = -1 AND flag2 = 0 THEN 'tests for shop status
z2$(0, 1) = t$: flag2 = 1
ELSEIF in2 = 0 AND flag2 = 1 THEN
z2$(0, 2) = t$: flag2 = 2
ELSEIF in2 = -1 AND flag2 = 2 THEN
z2$(1, 1) = t$: flag2 = 3
ELSEIF in2 = 0 AND flag2 = 3 THEN
z2$(1, 2) = t$: flag2 = 4
ELSEIF in2 = -1 AND flag2 = 4 THEN
z2$(2, 1) = t$: flag2 = 5
ELSEIF in2 = 0 AND flag2 = 5 THEN
z2$(2, 2) = t$: flag2 = 6
ELSEIF in2 = -1 AND flag2 = 6 THEN
z2$(3, 1) = t$: flag2 = 7
ELSEIF in2 = 0 AND flag2 = 7 THEN
z2$(3, 2) = t$: flag2 = 8
ELSEIF in2 = -1 AND flag2 = 8 THEN
z2$(4, 1) = t$: flag2 = 9
ELSEIF in2 = 0 AND flag2 = 9 THEN
z2$(4, 2) = t$: flag2 = 10
ELSEIF in2 = -1 AND flag2 = 10 THEN
z2$(5, 1) = t$: flag2 = 11
ELSEIF in2 = 0 AND flag2 = 11 THEN
z2$(5, 2) = t$: flag2 = 12
ELSEIF in2 = -1 AND flag2 = 12 THEN
z2$(6, 1) = t$: flag2 = 13
ELSEIF in2 = 0 AND flag2 = 13 THEN
z2$(6, 2) = t$: flag2 = 14
ELSEIF in2 = -1 AND flag2 = 14 THEN
z2$(7, 1) = t$: flag2 = 15
ELSEIF in2 = 0 AND flag2 = 15 THEN
z2$(7, 2) = t$: flag2 = 16
ELSEIF in2 = -1 AND flag2 = 16 THEN
z2$(8, 1) = t$: flag2 = 17
ELSEIF in2 = 0 AND flag2 = 17 THEN
z2$(8, 2) = t$: flag2 = 18
ELSEIF in2 = -1 AND flag2 = 18 THEN
z2$(9, 1) = t$: flag2 = 19
ELSEIF in2 = 0 AND flag2 = 19 THEN
z2$(9, 2) = t$: flag2 = 20
ELSEIF in2 = -1 AND flag2 = 20 THEN
z2$(10, 1) = t$: flag2 = 21
ELSEIF in2 = 0 AND flag2 = 21 THEN
z2$(10, 2) = t$: flag2 = 22
ELSEIF in2 = -1 AND flag2 = 22 THEN
z2$(11, 1) = t$: flag2 = 23
ELSEIF in2 = 0 AND flag2 = 23 THEN
z2$(11, 2) = t$: flag2 = 24
END IF


IF in3 = -1 AND flag3 = 0 THEN 'tests for main status
z3$(0, 1) = t$: flag3 = 1
ELSEIF in3 = 0 AND flag3 = 1 THEN
z3$(0, 2) = t$: flag3 = 2
END IF

IF in4 = -1 AND flag4 = 0 THEN ' tests for apt status
z4$(0, 1) = t$: flag4 = 1
ELSEIF in4 = 0 AND flag4 = 1 THEN
z4$(0, 2) = t$: flag4 = 2
ELSEIF in4 = -1 AND flag4 = 2 THEN
z4$(1, 1) = t$: flag4 = 3
ELSEIF in4 = 0 AND flag4 = 3 THEN
z4$(1, 2) = t$: flag4 = 4
ELSEIF in4 = -1 AND flag4 = 4 THEN
z4$(2, 1) = t$: flag4 = 5
ELSEIF in4 = 0 AND flag4 = 5 THEN
z4$(2, 2) = t$: flag4 = 6
ELSEIF in4 = -1 AND flag4 = 6 THEN
z4$(3, 1) = t$: flag4 = 7
ELSEIF in4 = 0 AND flag4 = 7 THEN
z4$(3, 2) = t$: flag4 = 8
ELSEIF in4 = -1 AND flag4 = 8 THEN
z4$(4, 1) = t$: flad4 = 9
ELSEIF in4 = 0 AND flag4 = 9 THEN
z4$(4, 2) = t$: flag4 = 10
ELSEIF in4 = -1 AND flag4 = 10 THEN
z4$(5, 1) = t$: flag4 = 11
ELSEIF in4 = 0 AND flag4 = 11 THEN
z4$(5, 2) = t$: flaf4 = 12
ELSEIF in4 = -1 AND flag4 = 12 THEN
z4$(6, 1) = t$: flag4 = 13
ELSEIF in4 = 0 AND flag4 = 13 THEN
z4$(6, 2) = t$: flag4 = 14
END IF

IF in5 = -1 AND flag5 = 0 THEN 'tests for 2nd floor status
z5$(0, 1) = t$: flag5 = 1
ELSEIF in5 = 0 AND flag5 = 1 THEN
z5$(0, 2) = t$: flag5 = 2
END IF

IF in6 = -1 AND flag6 = 0 THEN 'tests for hot water status
z6$(0, 1) = t$: flag6 = 1
ELSEIF in6 = 0 AND flag6 = 1 THEN
z6$(0, 2) = t$: flag6 = 2
END IF

PRINT z1$(1, 1): PRINT z1$(1, 2)
GOTO start

basementdata:
LOCATE 4, 10: PRINT z1$(0, 0): 'subroutine 1000 Prints Basement data
LOCATE 6, 8: PRINT Z$(0, 1):
LOCATE 6, 17: PRINT Z$(0, 2):
LOCATE 8, 5: PRINT z1$(0, 1)
LOCATE 8, 15: PRINT z1$(0, 2)
LOCATE 9, 5: PRINT z1$(1, 1)
LOCATE 9, 15: PRINT z1$(1, 2)
LOCATE 10, 5: PRINT z1$(2, 1)
LOCATE 10, 15: PRINT z1$(2, 2)
RETURN

shopdata:
LOCATE 4, 30: PRINT z2$(0, 0) 'subroutine 2000 Prints Shop data
LOCATE 6, 28: PRINT Z$(0, 1)
LOCATE 6, 37: PRINT Z$(0, 2)
LOCATE 8, 25: PRINT z2$(0, 1)
LOCATE 8, 35: PRINT z2$(0, 2)
LOCATE 9, 25: PRINT z2$(1, 1)
LOCATE 9, 35: PRINT z2$(1, 2)
LOCATE 10, 25: PRINT z2$(2, 1)
LOCATE 10, 35: PRINT z2$(2, 2)
LOCATE 11, 25: PRINT z2$(3, 1)
LOCATE 11, 35: PRINT z2$(3, 2)
LOCATE 12, 25: PRINT z2$(4, 1)
LOCATE 12, 35: PRINT z2$(4, 2)
LOCATE 13, 25: PRINT z2$(5, 1)
LOCATE 13, 35: PRINT z2$(5, 2)
RETURN

maindata:
LOCATE 4, 52: PRINT z3$(0, 0)'subroutine 3000 prints main data
LOCATE 6, 48: PRINT Z$(0, 1)
LOCATE 6, 58: PRINT Z$(0, 2)
LOCATE 8, 46: PRINT z3$(0, 1)
LOCATE 8, 56: PRINT z3$(0, 2)
RETURN

aptdata:
LOCATE 14, 11: PRINT z4$(0, 0)'subroutine 4000 prints Guest Apt data
LOCATE 16, 8: PRINT Z$(0, 1)
LOCATE 16, 17: PRINT Z$(0, 2)
LOCATE 18, 5: PRINT z4$(0, 1)
LOCATE 18, 15: PRINT z4$(0, 2)
LOCATE 19, 5: PRINT z4$(1, 1)
LOCATE 19, 15: PRINT z4$(1, 2)
LOCATE 20, 5: PRINT z4$(2, 1)
LOCATE 20, 15: PRINT z4$(2, 2)
LOCATE 21, 5: PRINT z4$(3, 1)
LOCATE 21, 15: PRINT z4$(3, 2)
LOCATE '22, 5: PRINT z4$(4, 1)
LOCATE '22, 15: PRINT z4(4, 2)
LOCATE '23, 5: PRINT z4$(5, 1)
LOCATE '23, 15: PRINT z4$(5, 2)
LOCATE '24, 5: PRINT z4$(6, 1)
LOCATE '24, 15: PRINT z4$(6, 2)
RETURN

secondfldata:
LOCATE 14, 30: PRINT z5$(0, 0)'subroutine 5000 prints 2nd Floor data
LOCATE 16, 28: PRINT Z$(0, 1)
LOCATE 16, 37: PRINT Z$(0, 2)
LOCATE 18, 25: PRINT z5$(0, 1)
LOCATE 18, 35: PRINT z5$(0, 2)
RETURN

hotwtrdata:
LOCATE 14, 50: PRINT z6$(0, 0)'subroutine 6000 prints Hot Water data
LOCATE 16, 48: PRINT Z$(0, 1)
LOCATE 16, 58: PRINT Z$(0, 2)
LOCATE 18, 46: PRINT z6$(0, 1)
LOCATE 18, 56: PRINT z6$(0, 2)
RETURN


alldata:
GOSUB basementdata'subroutine 7000 prints all zones
GOSUB shopdata
GOSUB maindata
GOSUB aptdata
GOSUB secondfldata
GOSUB hotwtrdata
RETURN

allshop:
LOCATE 3, 62: PRINT z2$(0, 1)
LOCATE 3, 72: PRINT z2$(0, 2)
LOCATE 4, 62: PRINT z2$(1, 1)
LOCATE 4, 72: PRINT z2$(1, 2)
LOCATE 5, 62: PRINT z2$(2, 1)
LOCATE 5, 72: PRINT z2$(2, 2)
LOCATE 6, 62: PRINT z2$(3, 1)
LOCATE 6, 72: PRINT z2$(3, 2)
LOCATE 7, 62: PRINT z2$(4, 1)
LOCATE 7, 72: PRINT z2$(4, 2)
LOCATE 8, 62: PRINT z2$(5, 1)
LOCATE 8, 72: PRINT z2$(5, 2)
LOCATE 9, 62: PRINT z2$(6, 1)
LOCATE 9, 72: PRINT z2$(6, 2)
LOCATE 10, 62: PRINT z2$(7, 1)
LOCATE 10, 72: PRINT z2$(7, 2)
LOCATE 11, 62: PRINT z2$(8, 1)
LOCATE 11, 72: PRINT z2$(8, 2)
LOCATE 12, 62: PRINT z2$(9, 1)
LOCATE 12, 72: PRINT z2$(9, 2)
LOCATE 13, 62: PRINT z2$(10, 1)
LOCATE 13, 72: PRINT z2$(10, 2)
'LOCATE 14, 62: PRINT z2$(11, 1)
'LOCATE 14, 72: PRINT z2$(11, 2)
RETURN


printer:
OPEN "lpt1" FOR OUTPUT AS 1
PRINT #1, TAB(7); z1$(0, 0);
PRINT #1, TAB(40); z2$(0, 0)
PRINT #1, TAB(4); Z$(0, 1),
PRINT #1, Z$(0, 2), TAB(36); Z$(0, 1); TAB(51); Z$(0, 2)
PRINT #1, z1$(0, 1); , z1$(0, 2);
PRINT #1, TAB(33); z2$(0, 1); TAB(49); z2$(0, 2)
PRINT #1, z1$(1, 1), z1$(1, 2);
PRINT #1, TAB(33); z2$(1, 1); TAB(49); z2$(1, 2)
PRINT #1, z1$(2, 1), z1$(2, 2)
PRINT #1, CHR$(10), CHR$(10), CHR$(10), CHR$(10), CHR$(10)
PRINT #1, TAB(7); z3$(0, 0)
PRINT #1, TAB(40); z4$(0, 0)
PRINT #1, TAB(4); Z$(0, 1),
PRINT #1, Z$(0, 2), TAB(36); Z$(0, 1); TAB(51); Z$(0, 2)
PRINT #1, z3$(0, 1), z3$(0, 2);
PRINT #1, TAB(33); z4$(0, 1); TAB(49); z4$(0, 2)
PRINT #1, z3$(1, 1), z3$(1, 2)
PRINT #1, CHR$(10), CHR$(10), CHR$(10), CHR$(10), CHR$(10)
PRINT #1, TAB(7); z5$(0, 0)
PRINT #1, TAB(40); z5$(0, 0)
PRINT #1, TAB(4); Z$(0, 1),
PRINT #1, Z$(0, 2), TAB(36); Z$(0, 1); TAB(51); Z$(0, 2)
PRINT #1, CHR$(12);
CLOSE
RETURN

allapt:
LOCATE 3, 62: PRINT z4$(0, 1)
LOCATE 3, 72: PRINT z4$(0, 2)
RETURN







flag1 = 0: flag2 = 0: flag3 = 0: flag4 = 0: flag5 = 0: flag6 = 0: flag7 = 0
flag8 = 0: LOCATE 2, 65: PRINT TIME$: LOCATE 1, 65: PRINT DATE$
DIM zone1$(20, 2): 'zone 1 is Basement data array all arrays are 20 rows
DIM zone2%(20, 2): 'zone 2 is Shop data array 2 col
DIM zone3$(20, 2): 'zone 3 is main floor data array
DIM zone4$(20, 2): 'zone 4 is Guest apt data array
DIM zone5$(20, 2): 'zone 5 is 2nd Flooe data array
DIM zone6$(20, 2): 'zone 6 is Hot water data array
start:
t$ = TIME$
i$ = INKEY$
IF i$ = "e" THEN END
LOCATE 2, 51: PRINT "in2=": LOCATE 2, 56: PRINT in2
LOCATE 1, 51: PRINT "in1=": LOCATE 1, 56: PRINT in1
z1$ = zone1$: 'Basement"
z2 = zone2%: '"Shop"
z3$ = zone3$: '"Main"
z4$ = zone4$: '"Guest Apt"
z5$ = zone5$: '"2nd Floor"
z6$ = zone6$: '"Hot Water"
'p1$ = Z$(0, 1): p2$ = Z$(0, 2): p3$ = Z$(0, 0)
LOCATE 1, 33: PRINT " e to exit pgm"
LOCATE 1, 1: PRINT "press v to view : "
LOCATE 1, 18: PRINT " p to print :"
IF i$ = "v" THEN GOSUB alldata
IF i$ = "p" THEN GOSUB printer
IF i$ = "s" THEN GOSUB allshop
IF i$ = "a" THEN GOSUB allapt
z1$(0, 0) = "Basement": z2$(0, 0) = "Shop": z3$(0, 0) = "main"
z4$(0, 0) = "Guest apt": z5$(0, 0) = "2nd Floor"
z6$(0, 0) = "hot water"
Z$(0, 1) = "ON"
Z$(0, 2) = "OFF"
Z$(0, 0) = "ZONE"
OUT 634, 253: REM Selects zones 1-4'hardware multiplexer
in1 = ((INP(633) AND 8) = 8): in2 = ((INP(633) AND 16) = 16) 'lines 160 to
in3 = ((INP(633) AND 32) = 32): in4 = ((INP(633) AND 64) = 64) '200 test
OUT 634, 2: REM selects zones 5-8 'ea bit
in5 = ((INP(633) AND 8) = 8): in6 = ((INP(633) AND 16) = 16)
in7 = ((INP(633) AND 32) = 32): in8 = ((INP(633) AND 64) = 64)


IF in1 = -1 AND flag1 = 0 THEN 'tests for basement status
z1$(0, 1) = t$: flag1 = 1
ELSEIF in1 = 0 AND flag1 = 1 THEN
z1$(0, 2) = t$: flag1 = 2
ELSEIF in1 = -1 AND flag1 = 2 THEN
z1$(1, 1) = t$: flag1 = 3
ELSEIF in1 = 0 AND flag1 = 3 THEN
z1$(1, 2) = t$: flag1 = 4
ELSEIF in1 = -1 AND flag1 = 4 THEN
z1$(2, 1) = t$: flag1 = 5
ELSEIF in1 = 0 AND flag1 = 5 THEN
z1$(2, 2) = t$: flag1 = 6
END IF


IF in2 = -1 AND flag2 = 0 THEN 'tests for shop status
z2$(0, 1) = t$: flag2 = 1
ELSEIF in2 = 0 AND flag2 = 1 THEN
z2$(0, 2) = t$: flag2 = 2
ELSEIF in2 = -1 AND flag2 = 2 THEN
z2$(1, 1) = t$: flag2 = 3
ELSEIF in2 = 0 AND flag2 = 3 THEN
z2$(1, 2) = t$: flag2 = 4
ELSEIF in2 = -1 AND flag2 = 4 THEN
z2$(2, 1) = t$: flag2 = 5
ELSEIF in2 = 0 AND flag2 = 5 THEN
z2$(2, 2) = t$: flag2 = 6
ELSEIF in2 = -1 AND flag2 = 6 THEN
z2$(3, 1) = t$: flag2 = 7
ELSEIF in2 = 0 AND flag2 = 7 THEN
z2$(3, 2) = t$: flag2 = 8
ELSEIF in2 = -1 AND flag2 = 8 THEN
z2$(4, 1) = t$: flag2 = 9
ELSEIF in2 = 0 AND flag2 = 9 THEN
z2$(4, 2) = t$: flag2 = 10
ELSEIF in2 = -1 AND flag2 = 10 THEN
z2$(5, 1) = t$: flag2 = 11
ELSEIF in2 = 0 AND flag2 = 11 THEN
z2$(5, 2) = t$: flag2 = 12
ELSEIF in2 = -1 AND flag2 = 12 THEN
z2$(6, 1) = t$: flag2 = 13
ELSEIF in2 = 0 AND flag2 = 13 THEN
z2$(6, 2) = t$: flag2 = 14
ELSEIF in2 = -1 AND flag2 = 14 THEN
z2$(7, 1) = t$: flag2 = 15
ELSEIF in2 = 0 AND flag2 = 15 THEN
z2$(7, 2) = t$: flag2 = 16
ELSEIF in2 = -1 AND flag2 = 16 THEN
z2$(8, 1) = t$: flag2 = 17
ELSEIF in2 = 0 AND flag2 = 17 THEN
z2$(8, 2) = t$: flag2 = 18
ELSEIF in2 = -1 AND flag2 = 18 THEN
z2$(9, 1) = t$: flag2 = 19
ELSEIF in2 = 0 AND flag2 = 19 THEN
z2$(9, 2) = t$: flag2 = 20
ELSEIF in2 = -1 AND flag2 = 20 THEN
z2$(10, 1) = t$: flag2 = 21
ELSEIF in2 = 0 AND flag2 = 21 THEN
z2$(10, 2) = t$: flag2 = 22
ELSEIF in2 = -1 AND flag2 = 22 THEN
z2$(11, 1) = t$: flag2 = 23
ELSEIF in2 = 0 AND flag2 = 23 THEN
z2$(11, 2) = t$: flag2 = 24
END IF


IF in3 = -1 AND flag3 = 0 THEN 'tests for main status
z3$(0, 1) = t$: flag3 = 1
ELSEIF in3 = 0 AND flag3 = 1 THEN
z3$(0, 2) = t$: flag3 = 2
END IF

IF in4 = -1 AND flag4 = 0 THEN ' tests for apt status
z4$(0, 1) = t$: flag4 = 1
ELSEIF in4 = 0 AND flag4 = 1 THEN
z4$(0, 2) = t$: flag4 = 2
ELSEIF in4 = -1 AND flag4 = 2 THEN
z4$(1, 1) = t$: flag4 = 3
ELSEIF in4 = 0 AND flag4 = 3 THEN
z4$(1, 2) = t$: flag4 = 4
ELSEIF in4 = -1 AND flag4 = 4 THEN
z4$(2, 1) = t$: flag4 = 5
ELSEIF in4 = 0 AND flag4 = 5 THEN
z4$(2, 2) = t$: flag4 = 6
ELSEIF in4 = -1 AND flag4 = 6 THEN
z4$(3, 1) = t$: flag4 = 7
ELSEIF in4 = 0 AND flag4 = 7 THEN
z4$(3, 2) = t$: flag4 = 8
ELSEIF in4 = -1 AND flag4 = 8 THEN
z4$(4, 1) = t$: flad4 = 9
ELSEIF in4 = 0 AND flag4 = 9 THEN
z4$(4, 2) = t$: flag4 = 10
ELSEIF in4 = -1 AND flag4 = 10 THEN
z4$(5, 1) = t$: flag4 = 11
ELSEIF in4 = 0 AND flag4 = 11 THEN
z4$(5, 2) = t$: flaf4 = 12
ELSEIF in4 = -1 AND flag4 = 12 THEN
z4$(6, 1) = t$: flag4 = 13
ELSEIF in4 = 0 AND flag4 = 13 THEN
z4$(6, 2) = t$: flag4 = 14
END IF

IF in5 = -1 AND flag5 = 0 THEN 'tests for 2nd floor status
z5$(0, 1) = t$: flag5 = 1
ELSEIF in5 = 0 AND flag5 = 1 THEN
z5$(0, 2) = t$: flag5 = 2
END IF

IF in6 = -1 AND flag6 = 0 THEN 'tests for hot water status
z6$(0, 1) = t$: flag6 = 1
ELSEIF in6 = 0 AND flag6 = 1 THEN
z6$(0, 2) = t$: flag6 = 2
END IF

PRINT z1$(1, 1): PRINT z1$(1, 2)
GOTO start

basementdata:
LOCATE 4, 10: PRINT z1$(0, 0): 'subroutine 1000 Prints Basement data
LOCATE 6, 8: PRINT Z$(0, 1):
LOCATE 6, 17: PRINT Z$(0, 2):
LOCATE 8, 5: PRINT z1$(0, 1)
LOCATE 8, 15: PRINT z1$(0, 2)
LOCATE 9, 5: PRINT z1$(1, 1)
LOCATE 9, 15: PRINT z1$(1, 2)
LOCATE 10, 5: PRINT z1$(2, 1)
LOCATE 10, 15: PRINT z1$(2, 2)
RETURN

shopdata:
LOCATE 4, 30: PRINT z2$(0, 0) 'subroutine 2000 Prints Shop data
LOCATE 6, 28: PRINT Z$(0, 1)
LOCATE 6, 37: PRINT Z$(0, 2)
LOCATE 8, 25: PRINT z2$(0, 1)
LOCATE 8, 35: PRINT z2$(0, 2)
LOCATE 9, 25: PRINT z2$(1, 1)
LOCATE 9, 35: PRINT z2$(1, 2)
LOCATE 10, 25: PRINT z2$(2, 1)
LOCATE 10, 35: PRINT z2$(2, 2)
LOCATE 11, 25: PRINT z2$(3, 1)
LOCATE 11, 35: PRINT z2$(3, 2)
LOCATE 12, 25: PRINT z2$(4, 1)
LOCATE 12, 35: PRINT z2$(4, 2)
LOCATE 13, 25: PRINT z2$(5, 1)
LOCATE 13, 35: PRINT z2$(5, 2)
RETURN

maindata:
LOCATE 4, 52: PRINT z3$(0, 0)'subroutine 3000 prints main data
LOCATE 6, 48: PRINT Z$(0, 1)
LOCATE 6, 58: PRINT Z$(0, 2)
LOCATE 8, 46: PRINT z3$(0, 1)
LOCATE 8, 56: PRINT z3$(0, 2)
RETURN

aptdata:
LOCATE 14, 11: PRINT z4$(0, 0)'subroutine 4000 prints Guest Apt data
LOCATE 16, 8: PRINT Z$(0, 1)
LOCATE 16, 17: PRINT Z$(0, 2)
LOCATE 18, 5: PRINT z4$(0, 1)
LOCATE 18, 15: PRINT z4$(0, 2)
LOCATE 19, 5: PRINT z4$(1, 1)
LOCATE 19, 15: PRINT z4$(1, 2)
LOCATE 20, 5: PRINT z4$(2, 1)
LOCATE 20, 15: PRINT z4$(2, 2)
LOCATE 21, 5: PRINT z4$(3, 1)
LOCATE 21, 15: PRINT z4$(3, 2)
LOCATE '22, 5: PRINT z4$(4, 1)
LOCATE '22, 15: PRINT z4(4, 2)
LOCATE '23, 5: PRINT z4$(5, 1)
LOCATE '23, 15: PRINT z4$(5, 2)
LOCATE '24, 5: PRINT z4$(6, 1)
LOCATE '24, 15: PRINT z4$(6, 2)
RETURN

secondfldata:
LOCATE 14, 30: PRINT z5$(0, 0)'subroutine 5000 prints 2nd Floor data
LOCATE 16, 28: PRINT Z$(0, 1)
LOCATE 16, 37: PRINT Z$(0, 2)
LOCATE 18, 25: PRINT z5$(0, 1)
LOCATE 18, 35: PRINT z5$(0, 2)
RETURN

hotwtrdata:
LOCATE 14, 50: PRINT z6$(0, 0)'subroutine 6000 prints Hot Water data
LOCATE 16, 48: PRINT Z$(0, 1)
LOCATE 16, 58: PRINT Z$(0, 2)
LOCATE 18, 46: PRINT z6$(0, 1)
LOCATE 18, 56: PRINT z6$(0, 2)
RETURN


alldata:
GOSUB basementdata'subroutine 7000 prints all zones
GOSUB shopdata
GOSUB maindata
GOSUB aptdata
GOSUB secondfldata
GOSUB hotwtrdata
RETURN

allshop:
LOCATE 3, 62: PRINT z2$(0, 1)
LOCATE 3, 72: PRINT z2$(0, 2)
LOCATE 4, 62: PRINT z2$(1, 1)
LOCATE 4, 72: PRINT z2$(1, 2)
LOCATE 5, 62: PRINT z2$(2, 1)
LOCATE 5, 72: PRINT z2$(2, 2)
LOCATE 6, 62: PRINT z2$(3, 1)
LOCATE 6, 72: PRINT z2$(3, 2)
LOCATE 7, 62: PRINT z2$(4, 1)
LOCATE 7, 72: PRINT z2$(4, 2)
LOCATE 8, 62: PRINT z2$(5, 1)
LOCATE 8, 72: PRINT z2$(5, 2)
LOCATE 9, 62: PRINT z2$(6, 1)
LOCATE 9, 72: PRINT z2$(6, 2)
LOCATE 10, 62: PRINT z2$(7, 1)
LOCATE 10, 72: PRINT z2$(7, 2)
LOCATE 11, 62: PRINT z2$(8, 1)
LOCATE 11, 72: PRINT z2$(8, 2)
LOCATE 12, 62: PRINT z2$(9, 1)
LOCATE 12, 72: PRINT z2$(9, 2)
LOCATE 13, 62: PRINT z2$(10, 1)
LOCATE 13, 72: PRINT z2$(10, 2)
'LOCATE 14, 62: PRINT z2$(11, 1)
'LOCATE 14, 72: PRINT z2$(11, 2)
RETURN


printer:
OPEN "lpt1" FOR OUTPUT AS 1
PRINT #1, TAB(7); z1$(0, 0);
PRINT #1, TAB(40); z2$(0, 0)
PRINT #1, TAB(4); Z$(0, 1),
PRINT #1, Z$(0, 2), TAB(36); Z$(0, 1); TAB(51); Z$(0, 2)
PRINT #1, z1$(0, 1); , z1$(0, 2);
PRINT #1, TAB(33); z2$(0, 1); TAB(49); z2$(0, 2)
PRINT #1, z1$(1, 1), z1$(1, 2);
PRINT #1, TAB(33); z2$(1, 1); TAB(49); z2$(1, 2)
PRINT #1, z1$(2, 1), z1$(2, 2)
PRINT #1, CHR$(10), CHR$(10), CHR$(10), CHR$(10), CHR$(10)
PRINT #1, TAB(7); z3$(0, 0)
PRINT #1, TAB(40); z4$(0, 0)
PRINT #1, TAB(4); Z$(0, 1),
PRINT #1, Z$(0, 2), TAB(36); Z$(0, 1); TAB(51); Z$(0, 2)
PRINT #1, z3$(0, 1), z3$(0, 2);
PRINT #1, TAB(33); z4$(0, 1); TAB(49); z4$(0, 2)
PRINT #1, z3$(1, 1), z3$(1, 2)
PRINT #1, CHR$(10), CHR$(10), CHR$(10), CHR$(10), CHR$(10)
PRINT #1, TAB(7); z5$(0, 0)
PRINT #1, TAB(40); z5$(0, 0)
PRINT #1, TAB(4); Z$(0, 1),
PRINT #1, Z$(0, 2), TAB(36); Z$(0, 1); TAB(51); Z$(0, 2)
PRINT #1, CHR$(12);
CLOSE
RETURN

allapt:
LOCATE 3, 62: PRINT z4$(0, 1)
LOCATE 3, 72: PRINT z4$(0, 2)
RETURN

I had to highlite the code before doing the copy.
I'm trying to access the zone2 array and that's where I'm haveing the subscript error when I try to use 11,0 or 11,1.
Don't laugh to much at my code. It works for me.
Leon






Posted on Jan 14, 2013, 4:31 PM

Respond to this message   

Return to Index


You've DIM'd it as zone2$(), but are accessing it as z2$() ...(more)...

by (Login qb432l)
R

The reason the (11, 1) generates an error, is that arrays of up to 10 elements are automatically DIM'd. Therefore, z2$() was acceptable until you tried to access the 11th element.

-Bob

Posted on Jan 14, 2013, 6:08 PM

Respond to this message   

Return to Index


Good catch, Bob.

by (Login Kewbie)
R

It's been a long time since I've used QB. Does it support anything like

OPTION EXPLICIT

or

#DIM ALL

?

This kind of thing wouldn't happen in a language that requires declaration of all variables.

Kew

Posted on Jan 14, 2013, 10:35 PM

Respond to this message   

Return to Index


Not that I've heard of, Q...

by (Login qb432l)
R

I personally think that it's a flaw in QBasic that you can use an array that has not been DIM'd, in that these types of errors can happen - it invites sloppy programming. Non-array variables aren't likely to cause as much trouble (at least I've never had a problem) but you'll notice that disciplined programmers (e.g. Solitaire) always DIM their variables and hence know exactly what they're dealing with at all times.

-Bob

Posted on Jan 15, 2013, 4:08 AM

Respond to this message   

Return to Index


Sorry, Bob, I can't agree with you about

by (Login Kewbie)
R

DIMming variables letting programmers know exactly what they're working with, at least in a language that doesn't FORCE explicit declaration. I couldn't tell you HOW many times I've accidentally done this:

DIM aLongVariableName AS LONG

aLongVaraibleName = 15

... blah

IF aLongVariableName = 15 THEN ... bleh

Hmmmmm... 'bleh' SHOULD happen here, but it doesn't. #*&@(*^# it all. I'm gonna go take a nap. sad.gif

Kew

Posted on Jan 15, 2013, 10:48 AM

Respond to this message   

Return to Index


Spelling mistakes notwithstanding...

by (Login qb432l)
R

I'm not sure what you disagreed with. Except for arrays, I don't DIM anything. As a rule, variable names like x and y I only use for nested graphics loops which establish the variable value within the loop -- I would never casually use "x" as a variable name because I was lazy. Variable names I create say what they're for, such as NumROCKETS, so I don't get confused (once again, spelling mistakes aside).

I do, however, respect programmers like Solitaire who put lock washers on every bolt and tighten every nut. It seems to me that they would have less confusion or debugging problems in the long run.

-Bob

Posted on Jan 15, 2013, 3:24 PM

Respond to this message   

Return to Index


I know I'm probably belaboring this to the point of tedium, but...

by (Login Kewbie)
R

OK, so my example wasn't an array. All I'm saying is that DIMming an array won't keep you from mistyping it somewhere in your program, and a language that requires ALL variables, scalar or array or whatever, to be declared will refuse to compile or run it if an attempt is made to use an undeclared variable or array.

QBASIC doesn't offer this capability, and when as bad a typist as myself uses it, those kinds of mistakes are guaranteed.

The first thing I do in any perl code I write is enter 'use strict'. In VB, 'OPTION EXPLICIT', and in PB, 'DIM ALL'. To the best of my knowledge, c and FORTH never allow undeclared variables to be used.

As to variable naming, I'm of two minds. I HATE typing long variable names, but I equally hate cryptic code.

Anyway, I'm sorry to make too much of this, I just wanted to make sure I was getting my point across.

Kew

Posted on Jan 15, 2013, 8:34 PM

Respond to this message   

Return to Index


*Hey, I hear you (and better understand your misspelling example).

by (Login qb432l)
R

*

Posted on Jan 16, 2013, 1:25 AM

Respond to this message   

Return to Index


out range

by Leon Schrecengost (no login)

Bob, That was an error in the code I posted. I tried to change it from zone2$ to zone% to see if it made any difference. The code I'm running is zone2$.

Are you saying that an array can only be 10 rows? So when I use dim 20,2 it defaults to 10,2.Or is there another way to diminsion the arry to do what I need?
Leon

Posted on Jan 15, 2013, 7:14 AM

Respond to this message   

Return to Index


No Leon...

by (Login qb432l)
R

What I'm saying is that arrays you haven't DIM'd, can only have 10 elements. Arrays you've DIM'd can have any number up to available memory. In your case, you have the statement:

z2$(11, 1) = t$

The problem is, you didn't DIM an array called z2$, hence the error when you tried to access element 11. Up to that point, QBasic thought you were just creating an array on the fly, so to speak, named z2$(), so didn't call you on it till you exceeded the 10 element limit of non-DIM'd arrays.

-Bob

Posted on Jan 15, 2013, 3:32 PM

Respond to this message   

Return to Index


Not sure

by Leon Schrecengost (no login)

Bob, I understand if the array was not dim that I would get and error. When I dim the array zone2$(20,2) I still get the subscript out of range error. Do you have the ability to run the pgm. You would have to be able to input data to the paralel port to check it. If you don't have this capability I will try and modify the pgm to allow you to use keyboard input to test it.
Leon

Posted on Jan 15, 2013, 4:10 PM

Respond to this message   

Return to Index


*Try this: DIM z2$(20, 1) - Maybe it'll be clearer what's happening.

by (Login qb432l)
R

*

Posted on Jan 15, 2013, 4:26 PM

Respond to this message   

Return to Index


New Code

by Leon Schrecengost (no login)

Bob, I put a change in the pgm to allow it to be run without external hardware. If you togle between a and b on the keboard it acts like in2 is being switched on and off. Use the s to view array data. You have to hit s to keep updating the data displayed. I tried it and got the subscript error.

CLS : 'Program name is FURNMON4
flag1 = 0: flag2 = 0: flag3 = 0: flag4 = 0: flag5 = 0: flag6 = 0: flag7 = 0
flag8 = 0: LOCATE 2, 65: PRINT TIME$: LOCATE 1, 65: PRINT DATE$
DIM zone1$(20, 2): 'zone 1 is Basement data array all arrays are 20 rows
DIM zone2%(20, 2): 'zone 2 is Shop data array 2 col
DIM zone3$(20, 2): 'zone 3 is main floor data array
DIM zone4$(20, 2): 'zone 4 is Guest apt data array
DIM zone5$(20, 2): 'zone 5 is 2nd Flooe data array
DIM zone6$(20, 2): 'zone 6 is Hot water data array
start:
t$ = TIME$
i$ = INKEY$
IF i$ = "e" THEN END
IF i$ = "a" THEN in2 = -1
IF i$ = "b" THEN in2 = 0
LOCATE 2, 51: PRINT "in2=": LOCATE 2, 56: PRINT in2
LOCATE 1, 51: PRINT "in1=": LOCATE 1, 56: PRINT in1
z1$ = zone1$: 'Basement"
z2$ = zone2$: '"Shop"
z3$ = zone3$: '"Main"
z4$ = zone4$: '"Guest Apt"
z5$ = zone5$: '"2nd Floor"
z6$ = zone6$: '"Hot Water"
'p1$ = Z$(0, 1): p2$ = Z$(0, 2): p3$ = Z$(0, 0)
LOCATE 1, 33: PRINT " e to exit pgm"
LOCATE 1, 1: PRINT "press v to view : "
LOCATE 1, 18: PRINT " p to print :"
IF i$ = "v" THEN GOSUB alldata
IF i$ = "p" THEN GOSUB printer
IF i$ = "s" THEN GOSUB allshop
IF i$ = "a" THEN GOSUB allapt
z1$(0, 0) = "Basement": z2$(0, 0) = "Shop": z3$(0, 0) = "main"
z4$(0, 0) = "Guest apt": z5$(0, 0) = "2nd Floor"
z6$(0, 0) = "hot water"
Z$(0, 1) = "ON"
Z$(0, 2) = "OFF"
Z$(0, 0) = "ZONE"
OUT 634, 253: REM Selects zones 1-4'hardware multiplexer
in1 = ((INP(633) AND 8) = 8): ' in2 = ((INP(633) AND 16) = 16) 'lines 160 to
in3 = ((INP(633) AND 32) = 32): in4 = ((INP(633) AND 64) = 64) '200 test
OUT 634, 2: REM selects zones 5-8 'ea bit
in5 = ((INP(633) AND 8) = 8): in6 = ((INP(633) AND 16) = 16)
in7 = ((INP(633) AND 32) = 32): in8 = ((INP(633) AND 64) = 64)


IF in1 = -1 AND flag1 = 0 THEN 'tests for basement status
z1$(0, 1) = t$: flag1 = 1
ELSEIF in1 = 0 AND flag1 = 1 THEN
z1$(0, 2) = t$: flag1 = 2
ELSEIF in1 = -1 AND flag1 = 2 THEN
z1$(1, 1) = t$: flag1 = 3
ELSEIF in1 = 0 AND flag1 = 3 THEN
z1$(1, 2) = t$: flag1 = 4
ELSEIF in1 = -1 AND flag1 = 4 THEN
z1$(2, 1) = t$: flag1 = 5
ELSEIF in1 = 0 AND flag1 = 5 THEN
z1$(2, 2) = t$: flag1 = 6
END IF


IF in2 = -1 AND flag2 = 0 THEN 'tests for shop status
z2$(0, 1) = t$: flag2 = 1
ELSEIF in2 = 0 AND flag2 = 1 THEN
z2$(0, 2) = t$: flag2 = 2
ELSEIF in2 = -1 AND flag2 = 2 THEN
z2$(1, 1) = t$: flag2 = 3
ELSEIF in2 = 0 AND flag2 = 3 THEN
z2$(1, 2) = t$: flag2 = 4
ELSEIF in2 = -1 AND flag2 = 4 THEN
z2$(2, 1) = t$: flag2 = 5
ELSEIF in2 = 0 AND flag2 = 5 THEN
z2$(2, 2) = t$: flag2 = 6
ELSEIF in2 = -1 AND flag2 = 6 THEN
z2$(3, 1) = t$: flag2 = 7
ELSEIF in2 = 0 AND flag2 = 7 THEN
z2$(3, 2) = t$: flag2 = 8
ELSEIF in2 = -1 AND flag2 = 8 THEN
z2$(4, 1) = t$: flag2 = 9
ELSEIF in2 = 0 AND flag2 = 9 THEN
z2$(4, 2) = t$: flag2 = 10
ELSEIF in2 = -1 AND flag2 = 10 THEN
z2$(5, 1) = t$: flag2 = 11
ELSEIF in2 = 0 AND flag2 = 11 THEN
z2$(5, 2) = t$: flag2 = 12
ELSEIF in2 = -1 AND flag2 = 12 THEN
z2$(6, 1) = t$: flag2 = 13
ELSEIF in2 = 0 AND flag2 = 13 THEN
z2$(6, 2) = t$: flag2 = 14
ELSEIF in2 = -1 AND flag2 = 14 THEN
z2$(7, 1) = t$: flag2 = 15
ELSEIF in2 = 0 AND flag2 = 15 THEN
z2$(7, 2) = t$: flag2 = 16
ELSEIF in2 = -1 AND flag2 = 16 THEN
z2$(8, 1) = t$: flag2 = 17
ELSEIF in2 = 0 AND flag2 = 17 THEN
z2$(8, 2) = t$: flag2 = 18
ELSEIF in2 = -1 AND flag2 = 18 THEN
z2$(9, 1) = t$: flag2 = 19
ELSEIF in2 = 0 AND flag2 = 19 THEN
z2$(9, 2) = t$: flag2 = 20
ELSEIF in2 = -1 AND flag2 = 20 THEN
z2$(10, 1) = t$: flag2 = 21
ELSEIF in2 = 0 AND flag2 = 21 THEN
z2$(10, 2) = t$: flag2 = 22
ELSEIF in2 = -1 AND flag2 = 22 THEN
z2$(11, 1) = t$: flag2 = 23
ELSEIF in2 = 0 AND flag2 = 23 THEN
z2$(11, 2) = t$: flag2 = 24
END IF


IF in3 = -1 AND flag3 = 0 THEN 'tests for main status
z3$(0, 1) = t$: flag3 = 1
ELSEIF in3 = 0 AND flag3 = 1 THEN
z3$(0, 2) = t$: flag3 = 2
END IF

IF in4 = -1 AND flag4 = 0 THEN ' tests for apt status
z4$(0, 1) = t$: flag4 = 1
ELSEIF in4 = 0 AND flag4 = 1 THEN
z4$(0, 2) = t$: flag4 = 2
ELSEIF in4 = -1 AND flag4 = 2 THEN
z4$(1, 1) = t$: flag4 = 3
ELSEIF in4 = 0 AND flag4 = 3 THEN
z4$(1, 2) = t$: flag4 = 4
ELSEIF in4 = -1 AND flag4 = 4 THEN
z4$(2, 1) = t$: flag4 = 5
ELSEIF in4 = 0 AND flag4 = 5 THEN
z4$(2, 2) = t$: flag4 = 6
ELSEIF in4 = -1 AND flag4 = 6 THEN
z4$(3, 1) = t$: flag4 = 7
ELSEIF in4 = 0 AND flag4 = 7 THEN
z4$(3, 2) = t$: flag4 = 8
ELSEIF in4 = -1 AND flag4 = 8 THEN
z4$(4, 1) = t$: flad4 = 9
ELSEIF in4 = 0 AND flag4 = 9 THEN
z4$(4, 2) = t$: flag4 = 10
ELSEIF in4 = -1 AND flag4 = 10 THEN
z4$(5, 1) = t$: flag4 = 11
ELSEIF in4 = 0 AND flag4 = 11 THEN
z4$(5, 2) = t$: flaf4 = 12
ELSEIF in4 = -1 AND flag4 = 12 THEN
z4$(6, 1) = t$: flag4 = 13
ELSEIF in4 = 0 AND flag4 = 13 THEN
z4$(6, 2) = t$: flag4 = 14
END IF

IF in5 = -1 AND flag5 = 0 THEN 'tests for 2nd floor status
z5$(0, 1) = t$: flag5 = 1
ELSEIF in5 = 0 AND flag5 = 1 THEN
z5$(0, 2) = t$: flag5 = 2
END IF

IF in6 = -1 AND flag6 = 0 THEN 'tests for hot water status
z6$(0, 1) = t$: flag6 = 1
ELSEIF in6 = 0 AND flag6 = 1 THEN
z6$(0, 2) = t$: flag6 = 2
END IF

PRINT z1$(1, 1): PRINT z1$(1, 2)
GOTO start

basementdata:
LOCATE 4, 10: PRINT z1$(0, 0): 'subroutine 1000 Prints Basement data
LOCATE 6, 8: PRINT Z$(0, 1):
LOCATE 6, 17: PRINT Z$(0, 2):
LOCATE 8, 5: PRINT z1$(0, 1)
LOCATE 8, 15: PRINT z1$(0, 2)
LOCATE 9, 5: PRINT z1$(1, 1)
LOCATE 9, 15: PRINT z1$(1, 2)
LOCATE 10, 5: PRINT z1$(2, 1)
LOCATE 10, 15: PRINT z1$(2, 2)
RETURN

shopdata:
LOCATE 4, 30: PRINT z2$(0, 0) 'subroutine 2000 Prints Shop data
LOCATE 6, 28: PRINT Z$(0, 1)
LOCATE 6, 37: PRINT Z$(0, 2)
LOCATE 8, 25: PRINT z2$(0, 1)
LOCATE 8, 35: PRINT z2$(0, 2)
LOCATE 9, 25: PRINT z2$(1, 1)
LOCATE 9, 35: PRINT z2$(1, 2)
LOCATE 10, 25: PRINT z2$(2, 1)
LOCATE 10, 35: PRINT z2$(2, 2)
LOCATE 11, 25: PRINT z2$(3, 1)
LOCATE 11, 35: PRINT z2$(3, 2)
LOCATE 12, 25: PRINT z2$(4, 1)
LOCATE 12, 35: PRINT z2$(4, 2)
LOCATE 13, 25: PRINT z2$(5, 1)
LOCATE 13, 35: PRINT z2$(5, 2)
RETURN

maindata:
LOCATE 4, 52: PRINT z3$(0, 0)'subroutine 3000 prints main data
LOCATE 6, 48: PRINT Z$(0, 1)
LOCATE 6, 58: PRINT Z$(0, 2)
LOCATE 8, 46: PRINT z3$(0, 1)
LOCATE 8, 56: PRINT z3$(0, 2)
RETURN

aptdata:
LOCATE 14, 11: PRINT z4$(0, 0)'subroutine 4000 prints Guest Apt data
LOCATE 16, 8: PRINT Z$(0, 1)
LOCATE 16, 17: PRINT Z$(0, 2)
LOCATE 18, 5: PRINT z4$(0, 1)
LOCATE 18, 15: PRINT z4$(0, 2)
LOCATE 19, 5: PRINT z4$(1, 1)
LOCATE 19, 15: PRINT z4$(1, 2)
LOCATE 20, 5: PRINT z4$(2, 1)
LOCATE 20, 15: PRINT z4$(2, 2)
LOCATE 21, 5: PRINT z4$(3, 1)
LOCATE 21, 15: PRINT z4$(3, 2)
LOCATE '22, 5: PRINT z4$(4, 1)
LOCATE '22, 15: PRINT z4(4, 2)
LOCATE '23, 5: PRINT z4$(5, 1)
LOCATE '23, 15: PRINT z4$(5, 2)
LOCATE '24, 5: PRINT z4$(6, 1)
LOCATE '24, 15: PRINT z4$(6, 2)
RETURN

secondfldata:
LOCATE 14, 30: PRINT z5$(0, 0)'subroutine 5000 prints 2nd Floor data
LOCATE 16, 28: PRINT Z$(0, 1)
LOCATE 16, 37: PRINT Z$(0, 2)
LOCATE 18, 25: PRINT z5$(0, 1)
LOCATE 18, 35: PRINT z5$(0, 2)
RETURN

hotwtrdata:
LOCATE 14, 50: PRINT z6$(0, 0)'subroutine 6000 prints Hot Water data
LOCATE 16, 48: PRINT Z$(0, 1)
LOCATE 16, 58: PRINT Z$(0, 2)
LOCATE 18, 46: PRINT z6$(0, 1)
LOCATE 18, 56: PRINT z6$(0, 2)
RETURN


alldata:
GOSUB basementdata'subroutine 7000 prints all zones
GOSUB shopdata
GOSUB maindata
GOSUB aptdata
GOSUB secondfldata
GOSUB hotwtrdata
RETURN

allshop:
LOCATE 3, 62: PRINT z2$(0, 1)
LOCATE 3, 72: PRINT z2$(0, 2)
LOCATE 4, 62: PRINT z2$(1, 1)
LOCATE 4, 72: PRINT z2$(1, 2)
LOCATE 5, 62: PRINT z2$(2, 1)
LOCATE 5, 72: PRINT z2$(2, 2)
LOCATE 6, 62: PRINT z2$(3, 1)
LOCATE 6, 72: PRINT z2$(3, 2)
LOCATE 7, 62: PRINT z2$(4, 1)
LOCATE 7, 72: PRINT z2$(4, 2)
LOCATE 8, 62: PRINT z2$(5, 1)
LOCATE 8, 72: PRINT z2$(5, 2)
LOCATE 9, 62: PRINT z2$(6, 1)
LOCATE 9, 72: PRINT z2$(6, 2)
LOCATE 10, 62: PRINT z2$(7, 1)
LOCATE 10, 72: PRINT z2$(7, 2)
LOCATE 11, 62: PRINT z2$(8, 1)
LOCATE 11, 72: PRINT z2$(8, 2)
LOCATE 12, 62: PRINT z2$(9, 1)
LOCATE 12, 72: PRINT z2$(9, 2)
LOCATE 13, 62: PRINT z2$(10, 1)
LOCATE 13, 72: PRINT z2$(10, 2)
'LOCATE 14, 62: PRINT z2$(11, 1)
'LOCATE 14, 72: PRINT z2$(11, 2)
RETURN


printer:
OPEN "lpt1" FOR OUTPUT AS 1
PRINT #1, TAB(7); z1$(0, 0);
PRINT #1, TAB(40); z2$(0, 0)
PRINT #1, TAB(4); Z$(0, 1),
PRINT #1, Z$(0, 2), TAB(36); Z$(0, 1); TAB(51); Z$(0, 2)
PRINT #1, z1$(0, 1); , z1$(0, 2);
PRINT #1, TAB(33); z2$(0, 1); TAB(49); z2$(0, 2)
PRINT #1, z1$(1, 1), z1$(1, 2);
PRINT #1, TAB(33); z2$(1, 1); TAB(49); z2$(1, 2)
PRINT #1, z1$(2, 1), z1$(2, 2)
PRINT #1, CHR$(10), CHR$(10), CHR$(10), CHR$(10), CHR$(10)
PRINT #1, TAB(7); z3$(0, 0)
PRINT #1, TAB(40); z4$(0, 0)
PRINT #1, TAB(4); Z$(0, 1),
PRINT #1, Z$(0, 2), TAB(36); Z$(0, 1); TAB(51); Z$(0, 2)
PRINT #1, z3$(0, 1), z3$(0, 2);
PRINT #1, TAB(33); z4$(0, 1); TAB(49); z4$(0, 2)
PRINT #1, z3$(1, 1), z3$(1, 2)
PRINT #1, CHR$(10), CHR$(10), CHR$(10), CHR$(10), CHR$(10)
PRINT #1, TAB(7); z5$(0, 0)
PRINT #1, TAB(40); z5$(0, 0)
PRINT #1, TAB(4); Z$(0, 1),
PRINT #1, Z$(0, 2), TAB(36); Z$(0, 1); TAB(51); Z$(0, 2)
PRINT #1, CHR$(12);
CLOSE
RETURN

allapt:
LOCATE 3, 62: PRINT z4$(0, 1)
LOCATE 3, 72: PRINT z4$(0, 2)
RETURN


Posted on Jan 15, 2013, 4:34 PM

Respond to this message   

Return to Index


Of course...

by (Login qb432l)
R

Change your DIM statements as follows. I added Z$(20, 2) since it is also used:

DIM Z$(20, 2)
DIM z1$(20, 2): 'zone 1 is Basement data array all arrays are 20 rows
DIM z2$(20, 2): 'zone 2 is Shop data array 2 col
DIM z3$(20, 2): 'zone 3 is main floor data array
DIM z4$(20, 2): 'zone 4 is Guest apt data array
DIM z5$(20, 2): 'zone 5 is 2nd Flooe data array
DIM z6$(20, 2): 'zone 6 is Hot water data array

Now the arrays you are actually using have been DIM'd You never use zone1$() or zone2$(), etc.. Only z1$(), z2$(), etc..

In one group of assignment statements, you use variables named zone1$, zone2$, etc., but they are not arrays. Very confusing.

-Bob

Posted on Jan 15, 2013, 6:13 PM

Respond to this message   

Return to Index


Thank You

by Leon Schrecengost (no login)

Bob, I cleaned up my pgm using your suggestions. It works great. Thanks so much for your help. I don't even know why I did what I did. Is there any chance you could look at the PRINTER sub routine. There must be a better way to print the data in the arrays. Also is there a way to take the time data from the array address and calulate the time. This would be real nice rather than print it then calulate the zone run time by hand.
Thanks again
Leon

Posted on Jan 17, 2013, 8:28 AM

Respond to this message   

Return to Index


LOL@"I don't even know why I did what I did"...

by (Login qb432l)
R

That's often the case. We go over code again and again, and the same errors keep eluding us. It often takes an objective eye to spot it. I also failed to mention that when you DIM'd zone2$() you DIM'd it as zone2%() - a simple typo, "%" instead of "$". I didn't mention it because it wasn't the real problem and would only have confused things even more.

Does your print routine even work? OPEN "lpt1" shouldn't work on anything but older computers/printers. What computer/printer are you working with?

In any event, printing from arrays can be simplified by using loops, and letting the loop counter do the work, but only when all the data is in the same array, for example:

FOR n = 1 to 5
PRINT TAB(5); Array(n);
NEXT n

In your case I don't think it would help, although admittedly, I haven't gone over your code in depth.

Not sure what the TIME$ question is all about, but calculations based on TIME$ requires distinguishing between hours/minutes/seconds (lots of math), not to mention converting from a string, first. The simpler way is to use the TIMER function, which returns the number of seconds since midnight. After you've done your calculation, convert the answer to hours/minutes/seconds, and then build a string: "##:##:##" -- much easier than starting with TIME$.

Hours = TIMER \ 3600 'Note: Integer division (backslash)
Minutes = (TIMER - (Hours * 3600)) \ 60
Seconds = FIX(TIMER - (Hours * 3600) - (Minutes * 60))

FIX elminates the decimal fraction from "Seconds".

Check it out: PRINT TIMER

-Bob

Posted on Jan 17, 2013, 12:13 PM

Respond to this message   

Return to Index


printer

by Leon (no login)

Yes this does work. I'm using a program called DOS print and I redirect the LPT1 port to the local USB printer. It also allows me to print the program listing from qbasic.
Leon

Posted on Jan 17, 2013, 2:33 PM

Respond to this message   

Return to Index


*Hey, that's great to know (will check out DOS print). Thanks!

by (Login qb432l)
R

*

Posted on Jan 17, 2013, 4:57 PM

Respond to this message   

Return to Index


Show Time

by Solitaire (Login Solitaire1)
S

Thank you, BOB. I was inspired to write this little program:

'equations by theBOB
DIM hours AS SINGLE, minutes AS SINGLE, seconds AS SINGLE
DIM hrs AS STRING, min AS STRING, sec AS STRING, ap AS STRING
DIM mytime AS STRING, K AS STRING
CLS
DO
    LOCATE 1, 1
    PRINT "TIMER is now:  "; TIMER
    PRINT : PRINT "Press Enter to stop..."
    hours = TIMER \ 3600
    minutes = (TIMER - (hours * 3600)) \ 60
    seconds = FIX(TIMER - (hours * 3600) - (minutes * 60))
    IF hours <= 12 THEN
        ap$ = " AM "
    ELSE
        ap$ = " PM "
        hours = hours - 12
    END IF
    hrs$ = LTRIM$(RTRIM$(STR$(hours)))
    IF hours < 10 THEN hrs$ = " " + hrs$
    min$ = LTRIM$(RTRIM$(STR$(minutes)))
    IF minutes < 10 THEN min$ = "0" + min$
    sec$ = LTRIM$(RTRIM$(STR$(seconds)))
    IF seconds < 10 THEN sec$ = "0" + sec$
    mytime$ = hrs$ + ":" + min$ + ":" + sec$ + ap
    LOCATE 8, 1
    PRINT "Time is now:  "; mytime$
    K$ = INKEY$
LOOP UNTIL K$ = CHR$(13)
END

Posted on Jan 17, 2013, 7:09 PM

Respond to this message   

Return to Index


*Great job -- and a good example of the programming practices I attributed to you.

by (Login qb432l)
R

*

Posted on Jan 17, 2013, 7:18 PM

Respond to this message   

Return to Index


Similar program using TIME$

by Solitaire (Login Solitaire1)
S

Here is an older program I wrote years ago which uses TIME$ instead of TIMER. I updated the loop for a continuous display, similar to the above post:


DIM mytime AS STRING, hr AS STRING, mer AS STRING, minsec AS STRING
DIM clock AS STRING, K AS STRING, hour AS SINGLE
CLS
PRINT "Display clock time based on system clock."
PRINT "Press Enter to stop."
DO
  LOCATE 5
  PRINT "System clock time is: "; TIME$;
  mytime$ = TIME$
  hr$ = LEFT$(mytime$, 2)
  hour = VAL(hr$)
  IF hour = 0 THEN hour = 12    'midnight
  IF hour <= 12 THEN
    mer$ = "AM"
  ELSE
    hour = hour - 12
    mer$ = "PM"
  END IF
  hr$ = STR$(hour)
  minsec$ = RIGHT$(mytime$, 6)
  clock$ = hr$ + minsec$ + " " + mer$
  LOCATE 10, 1
  PRINT "Adjusted clock time is: "; clock$
  K$ = INKEY$
LOOP UNTIL K$ = CHR$(13)
END

Posted on Jan 17, 2013, 7:32 PM

Respond to this message   

Return to Index


Nice one...

by (Login qb432l)
R

I've written similar programs (though not as "tight") for AM/PM clock displays. The above was my first attempt to convert TIMER to HH:MM:SS (btw, thanks for the string conversions).

Good stuff!
-Bob

Posted on Jan 17, 2013, 7:51 PM

Respond to this message   

Return to Index


I wrote a Visual Basic version of the ShowTime program.

by Solitaire (no login)

It's posted in the Visual Basic subforum:

http://www.network54.com/Forum/613144/message/1358560032/Show+current+time++based+on+the+Timer+property

Note the similarities and differences in the code between the 2 versions. The output is nearly identical when you compare them side by side. The VB version is done as a Console application


Posted on Jan 18, 2013, 5:50 PM

Respond to this message   

Return to Index


Looks good...

by (Login qb432l)
R

I'm afraid I can't run it since I haven't installed VB on my current computer (I never used it, and with QB64 it became unnecessary -- for my purposes, at any rate). Still and all, your program looks like it would work well (of course).

-Bob

Posted on Jan 18, 2013, 9:10 PM

Respond to this message   

Return to Index


Re: Posting code

by (Login MCalkins)
Moderator

What are you copying from? Notepad? Wordpad? QB64 IDE?

Don't copy from the QBASIC 1.1 editor, because it does not interface with the Windows clipboard.

Regards,
Michael

Posted on Jan 14, 2013, 2:23 PM

Respond to this message   

Return to Index


Immediate Window

by (no login)

Instead of the Immediate window, I have the Status, and can neither toggle by F6 key nor the mouse. How can I get the Immediate window? (QB64 for window 7)

Posted on Jan 12, 2013, 6:32 AM

Respond to this message   

Return to Index


There is no immediate window

by (Login burger2227)
R

Since QB64 has to compile your code before it is run, you cannot test out code by running the interpreter.

If you want to test a snippet of code, just run another instance of QB64. The code will be compiled and run as Untitled(2)

Posted on Jan 12, 2013, 6:38 AM

Respond to this message   

Return to Index


no Immediate page?

by (no login)

Thats a big problem for me in debugging algorithms and logic. Where I need to know the value of variables in order to work out where complicated (for me!) code has gone wrong. The work arounds by using print statements in the program is really tedious and nowhere near as effective.

On the plus side, DOSBox simply would not run my QB programs let alone QBasic that I wrote in 1982!

I am using Windows 7, the only command in these old programs that doesnt work is FRE(0) where I need to know memory/stack sizes in sorting and using large arrays. A minor inconvenience since i will soon find out whether there is enough free memory as I rewrite to get rid of old work arounds.

An amazing job guys, quite amazing. But please get a window that is capable of giving values like the old intwermediate.

Posted on Feb 12, 2013, 8:36 AM

Respond to this message   

Return to Index


For a workaround Immediate window, you can always open a second QB64 window...

by (Login qb432l)
R

It will work much like the Immediate window. Although there will be compile time involved, given the simplicity of Immediate window code, it shouldn't be too much of a wait. Copying code from one window to the other is also possible.

-Bob

(Oops, sorry. This idea was already suggested by Clippy -- but it's a good one).

Posted on Feb 12, 2013, 2:26 PM

Respond to this message   

Return to Index


If else

by (Login portaljon)

I've tried Search without success and this question has been a minor irritant for years.

When cases come up like

IF a or b THEN do nothing ELSE do something

the THEN is unnecessary but QB requires a THEN so my workaround has been

THEN goto next numbered line ELSE

Somebody here may have a more elegant solution. I've seen ELSEIF commands in other compilers but not in QB.

Posted on Jan 10, 2013, 1:57 PM

Respond to this message   

Return to Index


*IF NOT (a OR b) THEN do something

by (Login qb432l)
R

*

Posted on Jan 10, 2013, 4:26 PM

Respond to this message   

Return to Index


encapsulate...

by portaljon (no login)


A pair of brackets works wonders.

Thanks

Posted on Jan 12, 2013, 9:48 AM

Respond to this message   

Return to Index


*QBASIC has ELSEIF

by (Login MCalkins)
Moderator

Posted on Jan 10, 2013, 5:27 PM

Respond to this message   

Return to Index


Not always

by portaljon (no login)

> QBASIC has ELSEIF

Must be version dependent, mine gives an error message

"ELSE without IF"

Thanks

Posted on Jan 12, 2013, 9:49 AM

Respond to this message   

Return to Index


Re: Not always

by (Login MCalkins)
Moderator

IF condition THEN
dosomething
ELSEIF condition1 THEN
dosomething1
ELSE
dosomething2
END IF

Regards,
Michael

Posted on Jan 12, 2013, 1:44 PM

Respond to this message   

Return to Index


ELSE without IF...

by (Login qb432l)
R

Did you try to use ELSEIF, but not in an IF block? That would account for the ELSE without IF. It must be used as shown in Michael's example.

-Bob

Posted on Jan 12, 2013, 3:22 PM

Respond to this message   

Return to Index


strange

by AlGoreIthm (no login)


It appears that the basis of your problem is that IF - THEN should conclude to ... nothing ...

This could be why you have been struggling with the notion: if 'nothing' is the conclusion, why would you even want to test for it in the first place?

Perhaps you should post a practical example of what you are referring to -

The typical understanding of these problems is that 'something' should have priority, and that 'nothing' should be secondary. But maybe you have something new to offer ...

Posted on Jan 12, 2013, 7:30 PM

Respond to this message   

Return to Index


Re: If else

by Pete (Login The-Universe)
Admin

IF x = 1 OR x = 2 THEN
REM Nothing
ELSE
CALL something
END IF

Posted on Jan 12, 2013, 11:00 PM

Respond to this message   

Return to Index


IF THEN blocks

by Solitaire (Login Solitaire1)
S

IF NOT(a OR b) THEN
'do something
'no ELSE is needed to do nothing
END IF


When using a block structure with IF, each line starting with IF or ELSEIF requires a condition ending with THEN on the same line. Nothing else must appear after the THEN keyword on that line:

IF condition THEN
'instruction here
ELSEIF condition THEN
'instruction here
END IF

If all conditions are false, will do nothing. Otherwise, will execute the first true condition and skip to the end of the block.


If you include ELSE, it must be the last keyword before END IF and nothing else must be on that line:

IF condition THEN
'instruction here
ELSEIF condition THEN
'instruction here
ELSE
'instruction must be executed if all conditions above are false
END IF


An unstructured single-line IF-THEN statement does NOT include END IF. Examples:

IF condition THEN instruction

IF condition THEN instruction ELSE instruction

Posted on Jan 13, 2013, 9:41 AM

Respond to this message   

Return to Index


Thanks Everyone: I'm taking a brief hiatus

by (Login Clueless_in_Seattle)

I'm grateful to all of you who have been so helpful to me over the last few weeks as I've tried to get my old MS-DOS system up and running again.

To those of you who have posted messages for me that I haven't replied to, please don't think I'm ignoring you. It's just that I've been sidetracked by a task that's taking up all my time.

I ran into a problem with some of my old software, and that problem is going to require me to back-up my entire hard disk to floppies, reformat the HD, repartition it into smaller partition sizes, and then copy back all my software and data onto the HD.

A couple of my essential programs aren't able to handle HD partitions larger than 1 GB. And I cluelessly formatted the HD on this hand-me-down laptop into 2GB partitions when I started using it.

I've begun backing up the HD to floppies, and boy! what a can of worms this task is turning out to be. So I'm going to be busy comparing all my HD directories with what's on floppies and vice versa, and labeling floppies for a few days to come.

Due to my health limitations I'm only able to work on this project for between 45 minutes and an hour each day. So this may take me a while. And is it ever tedious! Argh!

I'll be checking back in again once I get this housekeeping done, and I'll then try to pick up the message threads where we left off

Thanks again to all of you, see you soon,

Posted on Jan 9, 2013, 7:39 AM

Respond to this message   

Return to Index


*good luck!

by mn64 (no login)

Posted on Jan 9, 2013, 12:07 PM

Respond to this message   

Return to Index


Yes, good luck...

by (Login qb432l)
R

You reminded me of the floppy days, and the endless boxes. Today, the memory card in my little Sony Cybershot, the size of a postage stamp, holds 8GB, the equivalent of over 5000 3-1/2" floppys. We've come a long way (well, memory-wise, anyway -- those days were more fun of course).

-Bob

Posted on Jan 10, 2013, 2:55 AM

Respond to this message   

Return to Index


Memory sticks

by David (no login)

You can get USB memory sticks to work with DOS if you can find a USB card that is compatible with your old computer.
I have been forced to do this as newer computers do not have floppy drives.
It certainly helps with large data transfers, but it is a pain if you only want to transfer a few kbytes.
It is some years ago since I set it up. The info on the net is confusing and misleading, but if you want to know how to do it properly I will check how I did it.

Posted on Jan 10, 2013, 4:26 AM

Respond to this message   

Return to Index


RPL

by (no login)

http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/archv017.cgi?read=112519

For you were made from the stack, and to the stack you will return ! that's the life oh variables, hence this is RPL :-)

L

Posted on Jan 5, 2013, 2:24 AM

Respond to this message   

Return to Index


* happy new year ! (i forgot and, don't abuse QB64)

by (no login)

*

Posted on Jan 5, 2013, 5:54 AM

Respond to this message   

Return to Index


*wth are you talking about?

by mn64 (no login)

Posted on Jan 6, 2013, 6:54 AM

Respond to this message   

Return to Index


*my hardware doesn't like qb64 so much ! screen 2, 8b cpu, 32 Mhz

by (no login)

*

Posted on Jan 7, 2013, 1:22 AM

Respond to this message   

Return to Index


The last comment made me laugh:

by Solitaire (Login Solitaire1)
S

"Get a half-life"

Posted on Jan 5, 2013, 9:04 AM

Respond to this message   

Return to Index


Any way to speed up this code?

by (no login)

I've been working on a pong program and right now i'm working on improving the visuals. The problem is, when I try to add a background, the game runs too slow. I'm using _PUTIMAGE to add the background (all of this is under the "multiplayer" label; haven't had time to work on single player yet). I know that it's running slowly because I'm PUTing the background every iteration of the loop but I don't know how I can add a background otherwise.



_TITLE "Better Pong V.0.97B"
SCREEN _NEWIMAGE(1280, 720, 32)
_FONT _LOADFONT("C:\Windows\fonts\lucon.ttf", 18)
'Pong

COLOR , _RGBA(0, 0, 0, 0) 'makes the background transparent so you dont have _clearcolor everything
DIM menu AS _INTEGER64
menu = _NEWIMAGE(140, 144, 32)
bckgrnd = _NEWIMAGE(1281, 721, 32)
CALL gradscr(0, 0, 640, 720, 0, 0, 0, 127, 127, 127)
CALL gradscr(640, 0, 1280, 720, 127, 127, 127, 0, 0, 0)
_PUTIMAGE (0, 0)-(1280, 720), , bckgrnd, (0, 0)-(1280, 720)
CLS
CALL gradtext("Single Player", 0, 0, 255, 0, 255, 255)
PRINT
PRINT " ";
CALL gradtext("Multiplayer", 0, 255, 0, 255, 255, 0)
PRINT
PRINT " ";
CALL gradtext("Options", 255, 0, 0, 255, 0, 255)
PRINT
PRINT " ";
CALL gradtext("Exit", 0, 255, 0, 0, 255, 255)

_PUTIMAGE (0, 0)-(140, 144), , menu, (0, 0)-(140, 144)

clicked = 1
DO
IF clicked = 1 THEN
COLOR _RGB(255, 255, 255)
CLS
_PUTIMAGE (0, 0), bckgrnd
LOCATE 8, 570
PRINT "Better Pong"
_PUTIMAGE (575, 300), menu
clicked = 0
END IF
DO WHILE _MOUSEINPUT
mx = _MOUSEX
my = _MOUSEY
click = _MOUSEBUTTON(1)
LOOP
IF mx >= 575 - 5 AND mx <= 575 + 140 + 5 AND my >= 300 - 5 AND my <= 5 + 300 + 18 * 1 AND click THEN GOSUB singleplayer
IF click AND mx >= 575 + 10.77 - 5 AND mx <= 5 + 575 + 10.77 + LEN("Multiplayer") * 10.77 AND my >= 300 + 18 * 2 - 5 AND my <= 5 + 300 + 18 * 3 THEN GOSUB multiplayer
IF click AND mx >= 575 + 10.77 * 3 - 5 AND mx <= 5 + 575 + 10.77 * 3 + LEN("Options") * 10.77 AND my >= 300 + 18 * 4 - 5 AND my <= 5 + 300 + 18 * 5 THEN GOSUB options
IF _KEYDOWN(27) OR (click AND mx >= 575 + 10.77 * 4 - 5 AND mx <= 5 + 575 + 10.77 * 4 + LEN("Options") * 10.77 AND my >= 300 + 18 * 6 - 5 AND my <= 5 + 300 + 18 * 7) THEN GOSUB leaveconfirm
LOOP


multiplayer:
clicked = 1
CLS
COLOR _RGB(255, 255, 255)
plen = 80
LOCATE 18, 500
PRINT "Loading. Please Wait."
DIM temp AS _INTEGER64
temp = _NEWIMAGE(1280 * 2, 720 * 2, 32)
temp2 = _NEWIMAGE(1280 * 2, 720 * 2, 32)
_DEST temp
CIRCLE (12 * 2, 12 * 2), 10 * 2, _RGB(255, 0, 0)
PAINT (10 * 2, 10 * 2), _RGB(255, 0, 0), _RGB(255, 0, 0)
LINE (49 * 2, 10 * 2)-(51 * 2, (plen + 10) * 2), _RGB(237, 158, 41), BF
LINE (99 * 2, 10 * 2)-(101 * 2, (plen + 10) * 2), _RGB(255, 255, 255), BF
'CALL blaa(temp, temp, 0, 0, 50, 50, 1, 0)
CALL blaa(temp, temp, 40 * 2, 0, 60 * 2, (plen + 14) * 2, 4, 1)
CALL blaa(temp, temp, 90 * 2, 0, 110 * 2, (plen + 14) * 2, 4, 1)

CALL supersample(1280, 720, temp, temp2, 2)

_SOURCE temp2
ball = _NEWIMAGE(23, 23, 32)
_PUTIMAGE (1, 1)-(23, 23), , ball, (1, 1)-(23, 23)
_CLEARCOLOR _RGB(0, 0, 0), ball
paddle1 = _NEWIMAGE(8, 152, 32)
_PUTIMAGE (0, 2)-(4, plen), , paddle1, (48, 10)-(52, (plen + 11))
paddle2 = _NEWIMAGE(8, 152, 32)
_PUTIMAGE (0, 2)-(4, plen), , paddle2, (98, 10)-(102, (plen + 11))

_DEST 0
_SOURCE 0

RANDOMIZE TIMER
dx = 1
dy = 1
bx = 15
by = 15
bsize = 23
p1y = 10
p2y = 10
CONST p1x = 10
CONST p2x = 1267
p2point = 0
p1point = 0
serve = 1
DO
CLS
_PUTIMAGE (0, 0), bckgrnd
LOCATE 1, 600
PRINT p1point; "-"; p2point
IF by + bsize >= 720 THEN dy = -dy
IF by <= 1 THEN dy = -dy
IF bx + bsize >= 1267 AND by + bsize >= p2y AND by <= p2y + plen AND serve = 0 THEN
dx = -dx
ELSE IF bx + bsize >= 1267 THEN
serve = 1
p1point = p1point + 1
bx = 15
by = 15
END IF
END IF
IF bx <= 13 AND by + bsize >= p1y AND by <= p1y + plen AND serve = 0 THEN
dx = -dx
ELSE IF bx <= 13 THEN
serve = 2
p2point = p2point + 1
bx = 1267 - bsize
by = 15
END IF
END IF
IF serve = 0 THEN
_PUTIMAGE (0, 0), bckgrnd
_PUTIMAGE (p1x, p1y), paddle1
_PUTIMAGE (p2x, p2y), paddle2
_PUTIMAGE (bx, by), ball
END IF

IF serve = 1 THEN
dx = 1
dy = 1
DO UNTIL LCASE$(INKEY$) = " "
angle = ABS(ATN(dy / dx)) * (180 / 3.14159265)
CLS
_PUTIMAGE (0, 0), bckgrnd
LOCATE 40, 500
PRINT "Press 'Spacebar' to serve"
_PUTIMAGE (p1x, p1y), paddle1
_PUTIMAGE (p2x, p2y), paddle2
_PUTIMAGE (bx, by), ball
LOCATE 26, 1
PRINT "Press A to increase angle and D to decrease it"
IF _KEYDOWN(27) THEN
IF qr = 1 THEN
_AUTODISPLAY
RETURN
END IF
END IF
IF _KEYDOWN(97) AND angle > 10 THEN
dx = dx + (SQR(2) - dx) / 100
dy = SQR(2 - (dx ^ 2))
END IF
IF _KEYDOWN(100) AND angle < 75 THEN
dy = dy + (SQR(2) - dy) / 100
dx = SQR(2 - (dy ^ 2))
END IF
LOCATE 25, 1
PRINT "Angle : ";
PRINT USING "###.##"; angle;
PRINT " degrees"
LINE (bx + 12, by + 12)-(100 * dx + bx + 12, 100 * dy + by + 12)
_DISPLAY
LOOP
END IF


IF serve = 2 THEN
dx = -1
dy = 1
DO UNTIL INKEY$ = "0"
angle = ABS(ATN(dy / dx)) * (180 / 3.14159265)
CLS
_PUTIMAGE (0, 0), bckgrnd
LOCATE 26, 650
PRINT "Press Num-4 to increase angle and Num-6 to decrease it"
LOCATE 40, 500
PRINT "Press 'Num-0' to serve"
_PUTIMAGE (p1x, p1y), paddle1
_PUTIMAGE (p2x, p2y), paddle2
_PUTIMAGE (bx, by), ball
IF _KEYDOWN(27) THEN
IF qr = 1 THEN
_AUTODISPLAY
RETURN
END IF
END IF

IF _KEYDOWN(52) AND angle > 10 THEN
dx = dx - (SQR(2) + dx) / 100
dy = SQR(2 - (dx ^ 2))
END IF
IF _KEYDOWN(54) AND angle < 75 THEN
dy = dy + (SQR(2) - dy) / 100
dx = -SQR(2 - (dy ^ 2))
END IF
LOCATE 24, 1000
PRINT "Angle : ";
PRINT USING "###.##"; angle;
PRINT " degrees"
LINE (bx + 12, by + 12)-(100 * dx + bx + 12, 100 * dy + by + 12)
_DISPLAY
LOOP
END IF

bx = bx + dx * 1.5
by = by + dy * 1.5
IF _KEYDOWN(119) AND p1y >= 1 THEN p1y = p1y - 1.5
IF _KEYDOWN(115) AND p1y + plen <= 719 THEN p1y = p1y + 1.5
IF _KEYDOWN(56) AND p2y >= 1 THEN p2y = p2y - 1.5
IF _KEYDOWN(53) AND p2y + plen <= 719 THEN p2y = p2y + 1.5
_DISPLAY
serve = 0
IF _KEYDOWN(27) THEN
IF qr = 1 THEN
_AUTODISPLAY
RETURN
END IF
END IF
LOOP

options:
clicked = 1
CLS
_PUTIMAGE (0, 0), bckgrnd
PRINT "This is not available right now. Sorry."
_DELAY 2
RETURN

leaveconfirm:
clicked = 1
CLS
_PUTIMAGE (0, 0), bckgrnd
COLOR _RGB(255, 255, 255)
DO: LOOP UNTIL INKEY$ = ""
LOCATE 5, 550
PRINT "Game Paused"
PRINT
PRINT
LOCATE 12, 380
PRINT "Press 'y' to confirm or 'n' to resume game"
LOCATE 10, 450
INPUT "Are you sure you want to quit"; yn$
IF LCASE$(LEFT$(yn$, 1)) = "y" THEN SYSTEM
RETURN



singleplayer:
clicked = 1
CLS
_PUTIMAGE (0, 0), bckgrnd
PRINT "This is not available right now. Sorry."
_DELAY 2
RETURN




SUB blaa (sorce AS _INTEGER64, destin AS _INTEGER64, minx, miny, screenx, screeny, quality1, quality2)
$CHECKING:OFF
DIM ws AS LONG, op AS _INTEGER64, cp AS _INTEGER64
IF quality1 > 16 THEN quality1 = 16
IF quality2 > 16 THEN quality2 = 16
FOR main = 1 TO quality1 + quality2
_SOURCE sorce
_DEST destin
IF _DEST = _SOURCE THEN ws = _NEWIMAGE(screenx + 1, screeny + 1, 32)
_PUTIMAGE (0, 0)-(screenx, screeny), , ws, (0, 0)-(screenx, screeny)
_SOURCE ws
FOR dx = minx TO screenx - 1 'goes through each pixel for the entire area of the screen
FOR dy = miny TO screeny - 1
ra = 0
ga = 0
ba = 0 'reset color and other values
difpix = 0
weightednum = 0
op = POINT(dx, dy) ' get the color of the main pixel
FOR cx = -1 TO 1 'gets the 8 pixels around (dx,dy)
FOR cy = -1 TO 1
cp = POINT(dx + cx, dy + cy) 'get the color of each of the 8 pixels
value = 45
IF ABS(_RED32(op) - _RED32(cp)) > value OR ABS(_BLUE32(op) - _BLUE32(cp)) > value OR ABS(_GREEN32(cp) - _GREEN32(op)) > value OR ABS(_RED32(cp) - _RED32(op)) + ABS(_GREEN32(cp) - _GREEN32(op)) + ABS(_BLUE32(cp) - _BLUE32(op)) > value THEN
difpix = difpix + 1
END IF
weightednum = weightednum + 1
ra = ra + (_RED32(cp))
ga = ga + (_GREEN32(cp))
ba = ba + (_BLUE32(cp))

'check if the colors of the pixels are different enough to antialias them
'find the average color of (dx,dy) and the 8 pixels surrounding it regardless of whether the pixel needs antialiasing
NEXT cy
NEXT cx
IF main > quality1 THEN
IF difpix > 0 AND difpix < 6 THEN PSET (dx, dy), _RGB((ra / weightednum), (ga / weightednum), (ba / weightednum))
ELSE
IF difpix = 4 THEN PSET (dx, dy), _RGB((ra / weightednum), (ga / weightednum), (ba / weightednum))
END IF
NEXT dy
NEXT dx
_FREEIMAGE ws
NEXT main
END SUB

SUB supersample (destscreenx, destscreeny, temp, des, factorscreen)
DIM curpix AS _INTEGER64
meanquotient = factorscreen ^ 2
_SOURCE temp
_DEST des
r = 0
g = 0
b = 0
destscreenx = factorscreen * destscreenx
destscreeny = factorscreen * destscreeny
FOR x = 0 TO destscreenx STEP factorscreen
FOR y = 0 TO destscreeny STEP factorscreen
FOR cx = 0 TO factorscreen - 1
FOR cy = 0 TO factorscreen - 1
curpix = POINT(x + cx, y + cy)
r = r + _RED32(curpix)
g = g + _GREEN32(curpix)
b = b + _BLUE32(curpix)
NEXT cy
NEXT cx

PSET (x / factorscreen, y / factorscreen), _RGB(r / meanquotient, g / meanquotient, b / meanquotient)
r = 0: g = 0: b = 0
NEXT y
NEXT x
END SUB

SUB gradtext (text$, fr, fg, fb, tr, tg, tb)
div = LEN(text$)
FOR x = 0 TO div
r = fr + (tr - fr) / div * x
g = fg + (tg - fg) / div * x
b = fb + (tb - fb) / div * x
COLOR _RGB(r, g, b)
PRINT MID$(text$, x, 1);
NEXT x
PRINT
END SUB

FUNCTION qr
CLS
DO: LOOP UNTIL INKEY$ = ""
LOCATE 5, 550
PRINT "Game Paused"
PRINT
PRINT
LOCATE 12, 390
PRINT "Press 'y' to confirm or 'n' to resume game"
LOCATE 10, 372
INPUT "Are you sure you want to quit to the main menu"; yn$
IF LCASE$(LEFT$(yn$, 1)) = "y" THEN qr = 1 ELSE qr = 0
END FUNCTION

SUB gradscr (fx, fy, lx, ly, fr, fg, fb, tr, tg, tb)
FOR x = fx TO lx
r = fr + ((tr - fr) / (lx - fx)) * (x - fx)
g = fg + ((tg - fg) / (lx - fx)) * (x - fx)
b = fb + ((tb - fb) / (lx - fx)) * (x - fx)
FOR y = fy TO ly
PSET (x, y), _RGB(r, g, b)
NEXT y
NEXT x
END SUB

Posted on Jan 3, 2013, 11:40 AM

Respond to this message   

Return to Index


you could try using PCOPY... or...

by mn64 (no login)

'draw background here
PCOPY 0, 1 'make a copy (do this only once)

'now everytime that you want to PUT the background:
PCOPY 1, 0

this may or may not be faster. 1280 by 720 is a lot of stuff to draw, if you're using sprites for example, GET the place on the screen you're going to draw over and PUT that section back when you're done.

then there are tricks like PUTTING with xor, but you probably won't need that if you try the GET section, draw on section, PUT on section to clean up trick.

Posted on Jan 3, 2013, 12:15 PM

Respond to this message   

Return to Index


Re: you could try using PCOPY... or...

by (no login)

There was an extra putimage statement in the first line - I removed that and now it's running significantly faster. I'll implement the GET-PUT method you're talking about later, but for now I think PUTIMAGE should be fine.

Posted on Jan 3, 2013, 12:44 PM

Respond to this message   

Return to Index


Happy New Year

by (Login GarryRicketson)
R

I had forgotten all about this piece of code,
Actually I did not write it, DSman, and Galleon had helped me with it,
It creates a "splash image", uses qb64,
------------ code -----------

'************************
'* SPLASH SCREEN VIEWER *
'************************

DIM happypng$
DIM byte~%%
DIM count&
DIM splash&
DIM happypng_bin$

happypng$ = "89504E470D0A1A0A0000000D4948445200000280000001E0080600000035D1DCE40000000473424954080808087C0864880000001A7A545874536F6674776172650000789C732C2AC9CFCFCBAC00000E610355A9B029260000200049444154789CECBD7F8C24D97D1FF6EDAEB9D93D27F6090E79A2B6EFE6867B92EE6419C2E5F6382B72409E1D4487FCB1149D5D5E030112C0808198420C6C1B93950829F2CC2470C0F030F00471442A8001030962A0A95D88E6FDB5FA4747A18FDAD5DD82909278CFF26E9A836B87591289CE72B43B735D5DF9A3DFB7FA5BDFFA7E5FBDAAAEEAAEEA7E1FA0D0D555AF5EBD7AF5EABDCFFBFE7AAD288AC0C3C3C3C3C3C3C3C3637DD05E76013C3C3C3C3C3C3C3C3C160B4F003D3C3C3C3C3C3C3CD60C9E007A78787878787878AC193C01F4F0F0F0F0F0F0F058337802E8E1E1E1E1E1E1E1B166F004D0C3C3C3C3C3C3C363CDE009A087878787878787C79AC113400F0F0F0F0F0F0F8F358327801E1E1E1E1E1E1E1E6B064F003D3C3C3C3C3C3C3CD60C9E007A78787878787878AC193C01F4F0F0F0F0F0F0F058337802E8E1E1E1E1E1E1E1B166F004D0C3C3C3C3C3C3C363CDE009A087878787878787C79AC113400F0F0F0F0F0F0F8F358327801E1E1E1E1E1E1E1E6B064F003D3C3C3C3C3C3C3CD60C9E007A78787878787878AC193C01F4F0F0F0F0F0F068380EC7CB2E41D3D08AA268D965F0F0F0F0F0F0F0F0F05820BC04D0C3C3C3C3C3C3C363CDE009A08787874701DCDB01AF72F2F0A8050EBD2AB3003C01846447EE3B750F0F0F17BC7A1736965D06771CDE5F76093C3CCAC56134237EFBAD6AEFB39AF0368000706F07A257EF42850DC8C3C3C3A3AE388CAA1D403D3C3CEA082F0104004FFE3C3C3C8AE0DE0EACC00CDA933F8FA662D1D239DBFD9A2729F40490E0DE0E445287BE1A9D7C5538FCE1B24BE0E1B12CBC7A175ACDEC1F9A37587978A4B128D5AFA46AA62AE8AACB520DBC0A3803D8B97B29A18787878787471DB00CB305BC67B3491F85970032F0D9BC277E1E1E1E1E1E1E750297C4D1DF7971785B389641FACA2EC362E0258004DC1984FEF792400DDE80DC0371781F60FFE56597629168AE0399FF6E3D3CF2C1E671DCCCEFC94B000938F9A3BF14CDB4F92913AB2302F7401C7EC5319D254C9244FEA4D974B341BFFF2CF257DFBE62CDBEDB56ABA6EFC1A3BEA0367E8711007C31AD024648C7EB2F0D5C7B02C8891E97F4D15FBA5FDF8EBD6A48339DFA37748F2CEC7FD37E3E9EFD6EA48F278CA51941DC7F63FEB23517CD940EAE1090F845917F0F1E39919A247D473EAE4906EB3FC9F22A6098A971E82F9E9354C0CD55FB1405277D3671773345E11E79A0BDE3C308009E00C0F9E97FB58D8CD344D2637958E16FB6D58A1646FE16792F8F0540F3FC951C4144214858F77E6E6D258012C993A47D5CD25794FCDDDB8177E62BF132810D9CBBC5F36398D6A354B45A57967773FE9EA50E30D1519E9FFEDAA4C4FB1BBAD4B8CE2B56AC9AA49B0F70CD78BE5CDA974512324FFE5610F4DBA01325FAAB8E81C1428A3807BC0490419302728790F5920072D08163114BF17888408943E99207E9FD52F0F72E4988797A7AAEA96D255FD97D3F510D72F7C555AB81E9F7E7A5802B085BF897F858080041BA3FAC777FE70920439627B0EFD01179D4C2CBC43C9EA987CF00EC7F546E794AC042EC9AB23A311BE95BC589415DDBB787154D27644D2F7FA558E637C9496156FF584F7802E8E1089BBA4892023511873F04D8FFD4B24BA1820F06950C0E872380FD8ED91766BE089BEA23AB734CDDB3666DA76EE55904D6E099CBFE5E3C395B331C8E2121E503488E7DCD33875A4B02786F07BEF2EA5DC8F07A5C6770A919970601E8A4AF6903C9E118000600FBAF2FBB244EA0D2BF4A54BF360F37A91D68D0A48759EDC7C323897B3B307EF52E88C6F4F9B43225B7374F006B8045F42159F7D026C8F5C75A3A81B890BF7B3B60897766BD6E0518B544FEA82380EAF504CB6FF887F72D0E06D287BA31257F79AE592078FCB2286AC5E48F9E2F1CE7CC66D7A2113E3C2E397BF0BC8B2C9D543767849AB68D354139E40FA0F4BEA96AF2E763173A6011E34D6202FB1559D2274D9C693F5A4FAC25017481D6E9385CD708E65F1C92248837F02A1A7C569E71395ED23B054D7A659BE1B9A82FE744AB759FFD97271FAD56146F480429192C04E9F9F83B963CDEF87BE769119C04BA90C1541E852663E5A168DBA8211A4E2AEEED4054CDAA4CF9BFE3D598EC2F02878F2BC8734975BFFFCDA440840B46E274CA7EBDE009600958ED8E405309D2461F13AB77E46B165D0E7A5CCBCB26E5B2CDDC4AB2F368B5669D6214BD4C8E471045E9C90755FD22E9E3C7785A27B8106B0AAD9E797D7252CDF779E769ABEB65C7D25AC404A720F212BA86AB2C6988AEF921F501FC1CA875FCEA1F55589592BD6F63B1FF7405792EB91D3783E065612D6D00AB84A49668B6F7B0A4F65D7483D7D494925DA2ED3F1E631D7EAB7503A283AF1773E12FD1068576F2D4C64F52034BD78A833B0FBA6C7B3E2940B3ED9D4B7969F63059EFD096B7871334EFF09ADAAADDDB811BAFDE85B7C8FFDC92BD66F7AD1ECD049FE426FABC7F0D0017F28D21CB8327800B42F33AAA2C1BBFBC4429F7FD85F02DDA4CDDC531C196A628F1A3F9960C97193F8F3D9618E8B356DBC820C5701841EB40209BA94EEFC96C86AFD52DBFA76B3DD7BBF3F4981F36078FC27022BC35695BADD66388A2A7CDBE5CEE9A12F82916251410FAA785DCD70689087241494DDA99024F002B42F3081F85F4B1691240EA1ABF88B24865D2244F1C2E1F2B4F2B5D87C7E6842D90B3768C2273B0C892B001C852535525F62B806B068BF7D1DA4D5EE8D735FBBBF2E0E052BFB414F030BAB7B39F587F7D3D97E36C0AEA40CCAAC2E12380FD67D93165FC40D4BB1EBC0D6045588DCEC966EF169FAB90FCF17BD27BDBECFDB89D9A964EFB60AD2408DC09A780A9EDDED4E943B2F1A14E1EF43F4F9FCE534863B16BCA4DD4F65B31F983C3C789F2A90E20B6FB4BFFE931FA3B4BF7EADD437B313D66A013869ADA90719BBEB48DDFBE786E91FDAB68E35DD3FA8C41FB8485A2DE84A7380E6FCFC81FED9B34CD923606D50B5E02E891019BA44DB3EDAABA1CD2BD34B2EAA2CA96CE69F72B30C3E5E44CFB4FC125833CFE1FBD1ECFAB6A224DBD7D1801C01701E03B8BB7F1943A4F4DEA6C2F4FE9D2A0566B0451D4292D3F8F146CF67E7C394E2A0D04D8178E2F1F65B6C17B3BF0F8D5BB5081E3C4AA60996A555B1F596F75AF88288AFC56E2F6FE67A268D965986F3B70283F4DC3D31FDC5F4CB9F0FF4194DC177E01A264BAACE791F2918E676C00723A80283E47F76DE76CE90AD563AA3E1F59EAF1B1F3B34DD38F731E8FA22882F73F13DD97EA19BFA9E96FB2DCCDFFDE2ADA0AB58D6A37FAAED8FE981EE75B9EF75C757BB0E5EFDBE2BA6D0791BC9F3AF7D879CC58F0B6F402F8AD4EDB4164275ACB2E9F4BB913FBD381859228FA1C296228ED4B75C2EBA6E0063076247F690296BB7EF2BCE7ACE7AEE6DDBDFF99E8312F2F923E4E06CC3667BDE47E5F8BBDDF1A6E9C4425FF1F44D22460D95B2D889F6DB2191DDCA8EEDECB7E17C2E4B4DAFB457A7F8AC7A53A59763DC99B57017B08C852A7D645CC6D754E215EACB87FC0AED754BC2EAAC839C4FD36670E493D5CA907A0F47CB667CDF22ECE735F00C9314756A72D48BD526B8FCB6682AA74A51059009072F2A0E766C7EAA7625B86338A7780B1611163D4610471F4039BE360FDE19D400AE3F0C6B24B502DB8613F76BEFBAD290928E804512A68190507043A9047512B996EBF357360C8B2F5B391C29CB019664BB67D92334869E0CF419F873A5FD06737E4AF50590E6F937C5A729D2609C094044C3D41B9313E5D15221768106E0E4FFE4A870B59A1EF314DFCF0F87EF985CB09DEDE1641C472DD937F970B770459F6B8B008E2B5DF0280F3D9F6804907B65A62D92248BFD5693B8892BFD2717EAEA99BF6AC523AAD3E940D40B1758BCF47A90D8F4B69E77F568B9A843F1FDF5FDEFBE636639A0D59291B57C567A5F19BF4BEAE98DF4CB59CC51E30E2E9D2EFFA20E77BA8CA2E7929759CF3D92387769BB73E57652BF2DCFC1AFC7F1015B6155FE2E655C04E4848834A5281AD0296AD92718D4148245DB12A58B8460DB752E273BAC4FCB3A529D543D516EA06E1E6893B2F24A90F5775D9D48529E451E5726F6B2D36634D514930E50AA07BF726CF2FA774F54631CFE765F7CF8B86B4780040768CD35CF750FA4CAECD40489AA2FABC134F0033B14E1F914BE36E18F8F26A78CC3AC897F4CCADD66D88A237ACE591CAC7D3CECA3D5B35602EB8103F8045BEF7E9E07F083CCC471669288C566B0CD29ACBC934CA84C0230B59E49DBE5384642758C7902F8B40654B8AE69B18E9DF8834694A60198212C98ED9D697CF6BD72D9902D9CC89E8B17AC0DB005A91AF4114B247AA156883C5ADA0ADDBB2D16A8DE37DCD8E4EED084BFA48A3E80DD1E183DF573A261D2F85FC01B83F9FF4DECB6C0BB3BC6880672E0194247F785ECC36CBEE692A454DDA3262DB70596DC523857B3BF048389690EA4AA42F0BE9C0D071DEBA1DE70A407AE65248709EF6EC42FED43C97A2257B42EECFC62D6E8F278DED999A2462FBCE499D44F63811D4A4844BC4B275D0F5DC0E2CBA7BE95CFA5875A101AA74E9CF530F0DD85CE2F065A55DE90DE3F2F1F77C102DFBDDCFF5FD64BD4B80FB897690A79DF84D7A57A2CDAB12BAC729C65F2D42ABF8ADA4ED60C1EFF220721BC3793ADB750723B77CB2F25B745DD8372F011461538FC54CFFFEEC5C7AE690D356C371367B3806D87FCB3DDF79913923AAB727B436DBD5A4708BF0985BBA971EC5FE863C4BCE9AD1963B7B95BC7BF197EEDBAE49204BCA11452F27D2D9D654AEA104B06E9A06CDFE50B3E5A4CBB9092ADF47348D847B3BF095B2CABEBE70FC86A5FE49EDB3789E79FA89B2FA142D1FAED50248472290A249C4E788DDB5D427D27D1E41811E97FAD5E5C113402788BAFC97755BAADC03E579C772D4CCD07B4646EFEDC033CB2C891512E95A96BA4F229E4B85D40902E8F1116D6DFA70346F69901058547FC56DC2E87BE7EBE46A6DA1866BBEE679F64592451792EEB096EF27EFEDC0583987797CB37021D716AE8E0887D97D626ED31949F5C97FE7518FD27E479BBCA6AE89B2CF6B90ECFC5C50F4BAEAE009600A3CC61D4AE7A60320C625A30D78D6D1D908A1343B726D0C451B6A9174EE20D299F1AB77E123B33F32BFB76DD72E04B635736B2ADD592E6C1DA78B07DD7EA677F2BD1DB8CFEDF8249B3F1EE34F0B249C00B5E793607BEF1AE15B741B2940386D246F91CE135A00679BED1F3F67D2D76CA2BB0A70251C799D20CC16B75B4DFA45F3D79C26F07A51FBF0D8447D90CADC49A6E75A0C7A2F5712E6E22467834D9A5834CF0AB06C1D7433B68328FD9BDC66362B525A7E8D8B2D415659F8BEEB33CC570FDE3647AC9705DA6556FA1C91DE6E1369C6C9FFF9EFC5EDC0E83129CDDC36815AAC45CD0E7091B67F39EE655F2AAD5E5B9DCBE637DC0E8ABD23FB5AE0513AEF83481F03B532E4291BC67AA4F7D6B60822755DF2BCF5C69FD1F60C05EBBAC26DE905A8FF7610490D96AE519A1D00F2404893BACF237B198A94D3251F5AE6AC3CA6E7163508BDFF99E87629797943FE821B6F1BF438DD68DA5CEF37C25F5B1B9ABB7D01DC4F1140801B89FF523B5956BB2978DF3A102E5BDF209C1BDB1C41FC56F32DD54E0FA2E4FE81E53C4D43D3F27D5B7E111047B60C42A75D5FE6A695DB5607CBDD965E80E66CF4E5BABC60291D3DC6F75DD2F0F4DA7DA5E3B67D9E3E7D4F6990D6A4375903FBDC129D79B7D20776AD2E9BBCE1BBE71B6F23529B2976CF2CCF50F60EDD1781A7E48F13BED96699802D786BD88445FBDEB3DEA5277D0DDD12EDF3209AFE3F88E2FFF12FDDA46307C97CC4EB23484BF7B4ED601CA5563DB295A7CC4DCB933F57BD366F03E804CD7328D3268AD91B24D326D7B6D4ECAEB8813E35C6D70C6A258F27BC5EBB17BF27BBB63D61EB72EAF65892C71FC0E12363D7F5D81CFB2ECD4B2F4F055E7FA5DB75D530BED3DC90DA0D84C9FF922D4FFA1C8F11C76D00A9BD9F93AD1F40BE9888D4DB977A7B537BC0287A36714DD5CE1FB6FC1B669B4A1D3B6C711B3D5604099BEA03B2CE3A854B240D3C2ED9C727C6D897E5EBF8FEFE06C0FED3695B40CD369FE7C391A72FCFB219AC87D30787278056489E90B6B45283D33E8CFD160D7ECBCFA5C95C963BB966F42A91425E66EDB966C75FFDC376CAC01BFFCB03F66144CF03EC3F6B0688A701005EBD0BAFC779938142F11C5C82D71F86F989FF3B7606599EB255433394764D6B33DA462FF454072D187227F63F89FB920308F7F8959C090A813B8550E2A7790323AA0E0B54632FE322E0241E8FD377CBBFF1755BDD6325114516A70E711209D982093E764AE396ADFFB139ACD9CA614B9B17DAF85F2FF8A5E072419AC564357ECDAB49BA46CAC3764F49EAA24B629279F0B26948DF9FCDF01F830963A32DDDA52D0325FDE29DB4E3D500D7908C7FCD324687EF00ECBF4ED24975FD1500F846F6BB772ECB6300780A5C42FEB45A37208AD271215BADFB1045264C11FC0AC07E06813E7C3C9D39A78E2BED90436BEBFB89F797B5B287B63C98BDEC16F025FFE82F47C3A46E754216A1F36BFCD60145FA22054ECBC9592792168246AF95D265113E170F5F7E0F9AEF7AC14B007301A56C9A54CFD658A5D98D5D459C4C8FF95150098E34404B332D49F4AD490593924C25CE572286E18CB41DC6CB7B4904408B07C607936A060E2EF98A550C489A02736287A593DE8F21575857DAAC37BE77C68C6BFFE914F96BB5EE2B89BF2EBE4F0C743CBDFF37E4FB2666D5E78563581EADFE9FA467E8B4ADEFB7A6EAFE691BA0D21F2DC61F405A9DA8DCDB0D3CD0335FFF590A09B32212B94582BF2B6D8DDFC597CC638612C98D13F9D3FA4189ACE135F45752A9720D9826F890345F74DF4510B31EF004B03464D93C707290247EE958821A194C34D2209D46BB3F3DA64976F46BB8A466FA7B1877FEAFDE3D64B65DFBA9FC3555AF4D0A54CDC091255D8B49EFD37A47A2117B894C4B79E74074F0422AEF562B82E820233FE97DD2FF929A429AA98B6D52085E9EECF8A7EAFEC4FF843A50921C952A2DA22A5E29D8331EE376811EB9C06D742B5BC7D6A3E6D0841C784E237F0984F2B8A48DAF9AF025AB9FE544D1E59AD5832780854025489C0824A566782E2B58F4CC1E308BACE555D96A124697FC92D74CCB78389E49F2F68964671F66E96684901ECF92FED034342F9B7D60B990EA4392D86A2A089A9E5F5FB43C0033F52CC92B3A2069B499B434E19024C0FCBFA6D2CD73CDEC9C46EAB4C0C13C5D2E703B3EAEF2E58BD8DB96836B08962D5D431BDD6597C363D9B0A974A5F1461CEB02597822DD47EB93344921EF0F33C9E8CAC3475C2F042E41CA1EE467039BD418F97FED838127B3B489C179AC0FC02E84C4F6514E8FBD7A170000A27B3BFB01407A0587E9331E02C03E9E8B21A5E5FB3C1DFD5FBE3A98131BAD137025DF12A9E28491DFB74879B5776A104B05B5679248A0D61E25B87496E9BA92D4FCDC14A034F2C0D5BCFC185FE37705247F7591AED5A51C1ECB8646F4F24AEB78DFC98FABE324C87D66A2EF7A02092D4646DFBAAA58761C9AD5DB0E22B7209818078B1EC7FD745A3D1F976B5CF291F24BE69D15A72DB91ACA2C7FFE9CB6788152FEE5C60B93EA5B7A7F2ED7D077ADE565BB4F561BCABA96DFF7208A122B5B1CCC7ED5324BF7CA4A136FF785746240562986642501C5D3019F23759B9E9F734500BFF96D5DB7832B735E1FB91F3F88B2372D1F9E86A63D88A2E8E087ECBA77965FB78BD9BC0AB874A0E4275BF23653FB4AB613B6FCA5FF5C15CD6193DCE07536D1FB6184367F5ABE333BC0D9AC8DAA8867EB28BB1B8ADB8E652D1A2F3F27FDA57596A5DE94EA2F6B166B7B9F2EAA7761669B0869C2A4C6AD83A96A383A48C7EAC2346AD934D5B124998E8FBD942C2F40523A4EDB06971697E0E4D16A7D3E758C4BF2E8FABF92BA378ABC16C4C3A310F6DF2E7EEDE13B721F68D392F0B155EAC36C6320CD87A6DBFFD4EC7A0048447E586DF830300B86660F95DFF83D4B259925CACE12796BAACBE9BE16DE236DCB980A1BA3123F492D385F2818CD460D00A6418D03D94ECE05AACA0143C808F59B47052CA93FC87F247B1CA9E3FB3355677C5C504DC7D7EDB7A0D51A278951963A25A98EB9B7B31FBE7A37695E627B97A53B7E48767F3C06608355BE1E8B47A737391D1DB7CF2DBB1CAB0F49BD0BA0F4D3A136E1B4F7EB52FFB59EF004706E1C5E996F269499BF917239C4852BE77E79480A929D31B020C13332B89F92FC189200F85F8A098877A8280C8CD4E83F8084448BA695EC4D34FB942C7BC179CACCEE87923D247618953F41F6283819B43D177F86945DA1B1A1D1A5A3BC0D54066EDF271D07906D013D4A47A737B90900303A6E5F5B7659CA0225809DDE241A1DB71BD3763ABDC91800C26612D8ACBE54981CA7FE6B7D14054EDE31B2467CBD890DBBA258B60EDA6F75D8B216D276CE274AFF1E44DC36D06E3F58FAB339E63B2D5BF61AB7C967D3ED4A8A94C1A5FCFCFE11A4EDFC48BAF89C506E7A2E611327E405F04EB6FD8D547FB3DFD2D780E66BE64A367E5A3AED9CDFACDB85EBE14DF3FBC0FC9E5EB81E8E2F5C0FC7F8DFFC8ECD76CAAF6DE276E17A18E1469FB38E1BAD6753E635B0733D88ECE7F03CEEF38DA74B5CEFBEEE78C3362F01AC099A162DDFACEFFAFD57EFC21BC933C91998E6D9FBC76FFC7FD12FDCFE775A49896195CFAFA9BC1333C45F0580AF27D3493348290FE9F89C68B5EE4374F0924D15AFCF6CF7654960BC76272977429248A47FADD618A28340BF3FB9570E9577252A5FBA2FA97F25C9A04761A05409003647C7ED164AC53ABDC9291E33E92200002A316B9A3A159F891E6B820490D67DD3A496C591E81789998F8B798FA8F9A858C3B75C7802E851310EA37FF977FF36FCEC6FFF53F35F22138B29876C17E26A88ACA9444B2B1F51A38BE7953219246CFFF639217A0C51F4F44C157A904C83A0C490DA048A9D2A854D75AC632E2288CF243D43964AD8A3300CF10B20DD0E847631231FB84FF2B9D914153196DF200480A0EE648ABCA718752FF3FCA04B5A725B6F00D33F7D0560FF9BBA7D789EF169D16358F9F05EC04B44B303A71E5EC9381F7B59FDEC6FBFD0BAF78BBF09B2A468F621565B1FFC43A5DE64B4BC581EDA41481F7AD91FBE44FE14295BAB15C5240D0092BF241D12424AFE30AF04693A608BBAEFA3C76C2818635BCAA9FDCE509A7D2792BFE97ED2CB17202D0DD4C85FAB95D3937C3DD1E94D4E0D11425241C9C5D9E8B8BD313A6EB728C96092A7D0E48364B029E46FCC8853000067CB2A8F0B880D66E25D2CAF448B02277FFB2D4838FA1D4600F08DCCC9F4EC5A01ABE53CE225801E25435399BA78772DB27C5279B3A47E99796748F10AE2C96F4EE0FC7FC3266B28A5A3EADC7D41FA459E415AE7F6FEDF0378E97F20E4F2607A3CB1CC9CA6FA0560EFF4F300F0DD6A25A5065CF58B90499E97041644A737B9343A6EBFCFA460CE8402D5BD4D5247767A934B00F05B305B0B1C09DF669DCB4D412580A89A6F92DABD7CD0F1C63636F13489BEEC36C03E33796A363C01F4A80012D9933E3480E5CEA2F2A885A5F4CB0691026A7670FCB89626919E92C903723FAA5A168E6399AA7EC759DEBEF81CDA710F2720F933FB7746C7EDCBF3903742221F8E8EDB2F1AE95A6DE33072D28BA83B09F4E48FE33002356A81362ED1F32EF9D7695C708757017B940C4D5DCA3FBA3A7C3079CB55873253ECA7559FB3303061EA384FF3CEDF86C4B178193998FEC6D730E95F14A5D5E7ADD68D54D912BF2502CB4F891D5DE24D227DBC9E3C9CD0E94DEE1827889D7925774445FC1C532767A21B6E2D5452619E39341B2D7BADD5BF0671B9CD3B3BD7E94D1E2CB94C4B028E47FB4FCB244F237F9AC64342DDC605777802E851322435AAA442D4EDC4168B067DBCADD663A7E35382B641CE47A9DF286AC1EBFF1400E0F766C70F665B7CED01A4D5C8D45612C010D1B766FF2B56EF4B71FDDCD5C1DEE62F1F3E01006F03942AF9DA4442D5E94D224DD246D10F4E16FE9D1AE964C88ED55A9266A47F9B302BF71900C0E8B8FDE2D20AB55448DA09AD5F928E37687C28004F003D4A8626512B2A5E5F3CEEED0059C2AE468E3AD4F1C1E5F8EC7C0B7EE27C5A6D3AC52FC5C7A3A805CF9C33C4EA00A652C0034848F312FF01EC9D6605E49E133E7E0EC1A580B3E3B55539D609A8FE35C4E14B65E5DB0DB7DE61C4CF49A2D60DB7229402F2DF8AF0A129DF26404CAC5032584BB0B2A17475534A8B58B4647539383413646ED38C9B66079E777C5AB630233F3C01F42819F4237321839AEDC572905CB1A4AA954896803F7B92B4FFE3EBE2A264EF233A8670E711621B189F3F1C9973E364475A915D8C4462511DAC9DF3C80DB4FD337056D566A11F9CBC6EF26FED1E6D031082D5E94DEE603A89E4F583935637DC8A501A88BF941C9601A3364D48CC88ADE28765DDA72C74C3AD31402C9DE45EDA0F6DD72E43B2BA78ECB309B23446E5D14869692A9CF856044F003D4A0655FFF15955D687B37CBC7A175A2B43FA34C892B1D6CCAB987586B16DA0799F09E9DB7EC7FC6E24EDFE4A7CA71A89D342BF789402E30D1B432259F348E3067BC390D8D67D1B002E69923E89A860DAB2480C79DE331EBE065117552A923E00807E70B20100A0D8F95DB4E411D7EF7A480229B8141061EBB75C4D5BEA339E65C113408F9221357E4E0AB5F31E9563E624F18C780E0E1F9138803095F81D904492AAA462D8D4BD94F4713B40EFF83117A8147074DC6E0DF68689F3DD706B3C0FF91A1DB737BAE116AA82AF0240D00F4E5A54C2C7A57C2805E4C48F97A320A1F975F38B52C94B18DFD0C54E719140D287E8F4260F08390DD15ED3C56E13EB79FD482080AE8D72355992D235673CF304D0A302D08F888BDBB50FAB391FCD4A208A3E4A49CFA6C4E993F17E22C48C9DF051BB49ED7CE1B272552F050FF64C8F7BCC05A3968DCCFEE9EED136275601802EA1E3E8865B637A3DB92E262CFC3CFEE72445227C59124307C4C1ED8D7AFA3D5727954543206BCFA19D2200FCC094390405521DAD0F09E4367F7CBCCA33B96DB6E38827801E1540237436517B733E9A95424A5A46A47FB1EA570B913003579D97EA3C2385B0E165F7A8044492740E2049BCB84D9E0D86580492D46EF7683BE8865BD1EED136702923BB3EF19F1FE3E571556D621A1A2EA51F9CB4889D620800AF014CC3E264E5B708D07A3475473D7F9F33BF81465ED7C3F64F033555C15FDB7874B8B291033C015C3354E7D58ACE0012A83D20FE4FC5635AFA47562B8FDF452111D0991E47A99F40CC1D1C2B38197CF52EB472D5AFA4A2E6E5E3C48FAB82A7F92CBD5D35189771A7D39B9C52F5ABA492B5912D4ECA785A8DF8A1E44F228E542AC809113DCF8F4BF7400FDAD171FB45AA3635D707CC2966E1C822B2A69C9B0031598FA5AADC9693E6C9DF45D9C490DA25D6C783FA500EA7954C4355C30E910370FC6A96264CAFD1140000200049444154CBAF04B2A2E0DEACCB85F851FC2AC0FE5BC2F185004949D6B1B546CAA9A2F85277A5D4ADB672C98A397F74C3AD114CA5659F5AC6FDC9F26F0FC03811705B324D15CBD350E297A5621CEC0D51F51A43BA86923E29BF3C92498421279B0053F5EF606F7806B3102A67CB8EFF672369BC9E791AE93DF0B4653AD348A8EFAA2FF3DA33BB5CBF609BE91CF004D0A34270AF29C9F6A29E1FC65A23B59E703E68930F733C7CF52ECC3F10AC3001A4308E160B1F3829214250122811090008B1AC36F297B58F445023265A6898A2922CBC6EB03784D1713B714FBAFA890BE9AD024A5D8EC1A8D44D9D85A3E3F646A737B909005735E70F8D305755765C96AEEECBE7AD2BBC0A78C5B1F880C69203083F4E7F3D6A87842AD5ED3D71271054F9D2E3C64E70A3705B949677D3CE370C5A88952591BF9B60E2DD7DEEAD388A48C8D5858293C60627493C6E1F276A7CDFA8826FD17352B8129B2D2227A64ADD6260E74B0033E923E683AA4B2A91E42AE54541B96760CA7973B037BC0B337BBFAB00F23AC6D2BB90D294E908825ED465E5E7512EBC04D06301902481F8DF4B015701DCCECFB63FF7CD24E95F83A5803629571EC956196ABC4E6F726A9C21C660BC7CA904CCA66AB4959BA6A5123B495549247267BB47DB9B1A5191F2B4D5034B731F005E1AEC0D6F81214D04B746C7ED6B5C1A69CBBB0A74C3ADC7FDE0E469E9BE521D1A4FED4DF23FE2525B9ABFF61C653D236D43084F06EB054F005704F5B3693B7C0760FF75FB22DB5C42581511F42AE7458112419B2388942601EEE12BD9FF211A4AFC38BAE1D6ED7E70F206F99F69CFC5CF97011242840EDE0F47C7ED1725752E2F9B8DBCDA1C31CCBD2F01C07B458882460AA5E3000083BD61FC4CD4FE905F834BD6D5C10E90D7E1606F1893552C2B7A533BA8EC6354E4FC21DA8FAE1E78B8B3E68C319E007A940C4DF5CB3D7FB957B0C72A80AB81F9F1D226240D96F849D0A48059C6FBD27F25FFAFF483936FBA94052547548DA891097A8CFE2765BBDD0F4EDE90A498D23123350A25B2952575A479710999AD8EA47AC66797C8D432E052E7E8494D2596B6F408ADBEE62185DC8674D9F5E721C313408F05212B00F42248A0279C55834AF5B8AD1F3D9E2901A4D0C8DE8A914084A6F2CDF2782D517547EF13024020A9416D44D446CAA47BF2731AF9B4C145F2289142EAFC41F3E35241973254095BFD1A3BC01D5B7933EAE731009C2FA9FD9CC2547A1C400D24A71E3ABC138847059016D946F0F5174B5E37D68A45DECB433249286496A091BC06913F637386FBE89C30E20E0E79A45C36F5AB765D1648ACB687867805007036D81B86ACEC2967104DB2E7422A18F9CB1D2F4E23971AF9A369E80A2783BDE15D2C330F4953A673840BD05185B70BA51C3B0053D28A9240DEB66C2A609893FCA1330DDA90C2CC7C6053BFCA63D9F012408F8AC097D991F63D195B55689EBE5CF257AF7895D5C3E6AC200DF29A13882D6D96CA330B5CFAC663B865492279F95CEA82DCFB0E00BC62FE067963C765D9186AE76D52C03AA92F3547199AC656661767997940026A9FA3C7BC14B09EF012408F8A40499EB4049C642758357CE8992A21A97CE9C6D32011B492BF06AEE4615B2E8C131149EA6793D6D0B436E95616E1B1819207E35410AFF9CB9F83960BCB20DDD3263164F7BE6CC8C2A6896B17D1D524847C3F4FFF538923FDA5F7C4E326D87388D23E81FC9D2D9BFC69B6951C28F5EB07D325EC3ABDC9299520F25FFEBEF8FB295A5E7C77E6BD8DC9318F1AC213408F0AD7B7D4C2BE205055BC481530BFB7475960442E0448C6A1E464909F17338DA21AAE1E9050793D30BF6322FDB84CD376A72B7BE07E2689D2EEA9490BE9B59C50E691F0603F8012C09DC357E3FBBA385568C44FBAC6562E23318A1D3146C7ED172DC5BEAD9DE0C487D7D5EED1F6E6606F1808C42F0400A09235131B71E1D0EA098F73E95FA73789BAE156343A6E9FEB931892BCEE35C9B2ED9E3660DB27EFAC55CF953F3C28BC0A788DD1E94D6E8E8EDBD7CACFF9F03EC0FECBC271412DCCCF79341D363B3F291CCC624B572EE88047BC671F8C8EDB2FE2926ADD702B1AEC0DEFEE1E6DEF64A97C3934D52A9EA3696DE7723C4F22769BB4049C50DE2F02C077B2F276755499D783B41B6EDDE807276F91FFA9BA45D5E9606F18EE1E6D6350E53BBB47DB3B248D75459245C0D88EBEC4DFFF606FF810009E03804DC9F183AB5D5D25894540D4F69BCB96987AE4839700AE37AEA0A8DEFC46F32DD87D7863FA2B91BF380D510BF3B030000087571CEEE3672D3586E605BC4A6B2DF3EF04D55D86105E34BFEF75C3ADB151255E96ECE328B9D0549759D2B379A47EEC1952522E9428E17F5E46B3FF36BFAF560E97B28D8EDBE7E6211294FC69F7FED467FFE70D73AF0D3C8E925BF27F2EA95819E807272F038824F63923FD0B01A664D5F4DF7700926AD7EE743941F5598AA87C99D307AAEDC515483CEA0B4F00D71B38CB4677FDD67CF61AFB62C79B94F849F680893CDE76B8CF4A9088758224F9A3CBC52DBB7CAEC081CFAC96419D2550DD1552E230D81B0600B0D90DB722639755C8F68A92409BB38596273BF658BA87D1065C26FF634FD84E6F7249CAD7666BC889AD2B28B94627943CD7F3F2B0323E010078F1CBBFD9C663FC5D1889AD6A8B4955FA8B805487B8E2074A2FF13DED1E6DEF08242CC07CF080647B9A07A3E3F6FB667793A97D7DDFDC207815F01A8375140F8DDAEA0EB7612A073C5A3A802772AB0D4EFA10F55AB1A618F8325BC2F9314CBD5813AB33D0C0C2DCAE8E5E6F730C31FFE3B86DDA402E5CE3A27ECD5401E3BD34B5A2E6989207743592A2A422EBF9B354F07C19B865C246B8D10104212DFF26390C49FB59E540B306762C0E1CEE0960B3E08D343D00606A685DBEBB3E257D5992BF45C3DB1C560D247512B96B92D40F61B39915264EA1F1623D4D923E4849F12492C707635722A7A997B14C0E8F192F0137952A9DC464532A970D3682EB88203B890E5EAF94EC4C3E3E07EDA766E514AF3B5A6CDC3F57D07A35E605E7506A89EFCCA41B03A4D5F612E1737D3F48FE303410257D9EFC350F5E05BCA6E06A15F32197ECAE9F97601D8AAAA96AE0C9DF222179FBDA08621D313A6E5F2336562D6A33CBA5E6BB47DB9BE88D89E971904670D5A3EB206CF3E0A4E7B90A937A8572747A934B3C1A00DA950DF6864F69F7E1F68A65384B903A8D558A9DDEE401AADFF3422A5BFBA9D3C4799ABE0C679A32D00DB7AEF0F2E07EA737391DEC0D43638A703AF978DA7533696020A97DE97B13A4A263CD4400EF8B79CFFD801E4B8727806B0412B22202F3012F77F6965A25E4697B5AEFFCD1146449F86840E88649032FA1C314403AC699F1DA549D20768FB681AE3061B3A163F9269CA334D247FFE751EF19C9CE274018D8D1CE8CDBCB71BB397E9DCD83598321A19F03805BD4396D74DC7E91AB1E8BC010A7C431A95CE6FD7E30EFFDE6413F38795B7AA7E6EF26C667DC3DDADEFCDE573F0062AF194FEE6D76A39827FBBFD10F4EC47E984F10BCCAB7F9F004708DC0E2698500716771660BB65A1DF248E1FC326E4D0297EA496BFF364D02681002C413A6332E4947AF4D84195C433A000FF68621EE1B091BC034940ABD26817E7092708EEA865BB731AD2445D49C326C0F66FA87900DEA67AC1C09A99F4644350F66DBFD4D192E8F8EDBEF3355FB6B59D7D9C0A45C71D8148CF74731D81BDE2241952DD10C1603AC634AC0E9796E36B07BB44D1D92E23434ADCDBC2003AFD0098F277FCD8727806B06E2F81190DFB73382AD2E19DABAC21E4D80F1F41D358CE82540A41F343EDD39205EB3148CF42456D2181DB737C8C07D363A6EB7067BC3EF98FB9C4A037237DC7A86FEEF07276F90FCF1984A1272A866373B49EFE673829AF7317D1E5A0E49BA54C40B986A2900E0BD3CD7730CF686B7BAE156144D5AB1330E7AD0D274E6D855BE06F0B241DFDF606F1852E794C1DEF00C9D8CA4102C5AFB7091C60A509D833C9A09EF05BC66903A09FF317B7864C3D83F7D1F0076B2BE19178F534A9ACAF23815ECFED4E5E2D8B35D02803B403C970120110899A6D73C67799ABCE547671A73FFB3B2EC92934E12B3F26984B5040796D28165A5CF114D5A51AB1DB5A4F57F6DB68C8E1EE19700E0D7511A4BBC7D4FC1077D5E097802B826E0D1F511FE23F658249A18F205A0D8EA142E6A5980581519C0CC73785C64192D4EF8381C06FC541F81CF69237B9A538A0BF194CA803116CBEC9BDEFC783BFAD653C338248F56560A5C2DA44E0430EBFDA2C9415F58068EA6CB7BEFBADBFB75D9EA2F1E6EF02AE03500DAF7A1571DDDEA1DB95D52F936570DBCACF544EB046D959006E043DCC94BFE2472446DBB08D943C7AC22E4EF8A9437BDAF4DFD47025CA7ECFF1C1C544A9392D100DB65F54D9DDE64DC6A4FA01B6E455CCA6A538722F9B379C52E0244F21792B2FE8A5101A7D271F2C7ED36B3EE4757F940479C3A933F007DF5170F3BBC047085418376D2609D344DDD3FEC554351E98EC7F26088FB2B60D65E0590BF9BEE74C9AD0DB32FAA8011542AC6246F73AB3D358F5C976B51F50A6C8D594D354A254E9A848AD7838324325E59C2A5CC0ECF340680C0D1B62F8E835817C91F42AA5FFADF8485D9D0D2D2F4824AF83E777AE1EB5CE37E354FE7B10C7809E06AE3B7E80C8E44D70730C6E7F3ADFDEB510001407A2D598FFA6274DCBE669CA444F28712222441EC5C22F69A2495C3B56F4DBE9B45255FD2604F559CB6B02D9DDEE4C1CEEF7E230200F8DC5B1737D1598297955ECB254E12B91048881A8CDAC4FA1B93FF734B27A8CA179D3FA474C4433BC07AABCB378A9238CD7E14D3ED1E6D0716696DEC792ED50192BF4E6F72537AEE452FF3D665618FBA26A835F9EF255725C013C01586B4A4DBE8B8BD41D7FC2D3FF8B30705AA7D493C338CBBE8EBBD99083931E90B71D32819B2496D2868BE66D0770ACDA4855991BC7F99472F1D54BBA3DFFFBB0000F0EE8D877148119A3F5E2791594CC7D5D0441275C51CB749BF7F8CFD133DC8E3CFB9809298C1DE30C0758DB5FA304E2221A631CFFCB9BCF7AD10715F8EF53AD81B9E490979D81773580CDCCCD5DB66B273AEC8FACB65A2CFC21E49932B8FF9E109E08AC3A8041E52E99F21234BFDC0D7057CE9B07ADB5C7A38401B4853923FFACB257116C7081CD4375D43335954951FE03D391135C7360062B2F45BBCFC546246CB6C937272492321846F4B03385BDDE3129D2891C95291B5C913D25A8D2453D0B0308600CF157EA62CEC1E6D6F02C07B5C0AB67BB4BD496216D2E7FA227FDF16C9A7167C3F5E286099634537DC1A995F91B87BCC076F03B80620A4E30C925E7EA58559F0906106D7C06CBEBE1B0823817AC5F5DDD9D4749C50B1FB243C605D8CEFA9DD21CD57724261B678F7FBC1C9CB9DDEE401124D3A39A1F67FB667D2A49992DD9F66FF57665811F3AE7668FDB97A632366EB362F3F048CF2EE3243F2D8DA990D682FB94C5BBFAC32BB90790F377809E00A03EDFF00E299706256ECC948F530758C92854D80F43ACC1ECB0397AA28780566EF2ED2A4B85CF2C5EDFF300D9E17B2080C216B1967A1CC018E3A9DF07CB93A9696136DBE46C7ED17D9339DE17D077BC3B0D39B9C5272213DA35636AE82A6656092BF801C9FCBEECEAC24925AE94252C3F332E1CA2094342E1B4C721CB755BA9A8CCDE9C695F402CC960825EB2F2FAC0EBA66094500D99481EE379BF8D52B8A8527802B06662F831D6B683A5674FCB8E3BDB9AA07277AA4CEE75ED3D4A31C64D8A4014072A2E4620C2F910BCD1E90E13255FB961536C8368062BF0044F58CCBD3ED1E6D07599344C9B185DED33258F7CDFDE98A1F8526A5C679E40EC90F7FE3B0295C0A2939C3A00A18F35826D1B8FA6F7FFE314EE0FFF037FE181D583600A6F10941B045054887FBC922EBB48D11E277BAE8D02F7DE2812C994F082605AA44B4DEA8D772A69E00AE1E5EB1CCA2378D9AA9884D8D470E10D56FBC6E2C9EF3F55F4F48F66D9DDEE41291CA45F86D75C3AD47F43A9E8FEDBF3618D3904D50C05B9C979FED8FF1DEF4D98C07F239984A386FA1EA970EFE9AED9566E7E8881FE30E89495A48323E3A6EBF88AB87D06807BB47DB419EF20EF68667C6A64E74AE5824EEFC577FF29459D7B7153EF92B0FA943CEEED1F6E6E8B87D8E87B591C891696B9FE7C749DCC778950F120268A92A60C95C40FA66EAAD0AAE97A44F83B7015C41D099A124CEF7D2BFC5A1094154D7015D16E78C0E305CD220D8E68DC1C487D362386A767E348DCD0E8EDC2BF78A23BC1C2EAA41723F3E00DC0280AB440DFA0500F8AE6453C6EA6D4C3D35B9B4AD1F9CB48CB4E9B9577FED6F7EE63B3FF54EDBDCFB21B541CCF3BCD47E915F2FD53397FE11840010686AE245427AFFD496D145A59BD7FE0F6D4F4B287E26BAE1D6E7FBC1C91F38A453A59BDABECBF7553D0EA3BA49F96CF00169570468A80ED3B54A01203578DC0587354C3DCA01CEA6A95AC5DB5C2E0F7D16E4969DCBFA26427C7726AEDC07FDE0E465895064D95FB90C4EF37CA3B681919605CB210487A7E40FC0903F8D7010A9931AA6833CF395693DBE439F15C95F11B3941F9B671A0FF6860110C99D56661B29D7DE5337DCBADD0F4EDEC859B65CE8F426378D342E0000F8F77FED3F80B77FEAF75BDD70EBC6EE1100C089D304823DC713CBFD5043111AC7A35300789B472D281B2EE44FB8C63A515B36694FA239E40FC0AB80570266267C19A633C71D73F8CC9C3B351DFC8E76BDC7FCE8CC964FBA490654741CB8E9C95F7DA01103C92E0C60B63C5937DC8A46C7ED169249AE726306FB111F982415B304160FD02916202DB72625921C52880D580853B529868039D3244992A38B94462B078F890990DF2CC21096573ABD49144DDAA8B24CAC63ACA94435B5703F38690DF686E1606F98780755933F832B00B36500DFFEA9DF6F195BCCAF4B92CCB33FFF04000044933696311597B12F847821ED691392218D82AAC91F07A9FB47A8A696DA12423345909EBD9EA89F5AD8AB805708CCE3971EAF6481750F3778E9DFF240A537DAC062930A757A939BBB47DB57077BC3BBD4CE8CE7A749916CAA485BB98B7EAB9AB303C5606FF81A00BC8B6BDD723530BDAFA45A73512D539228E54FECF5727F1BD4C60FE3E069EF04CB906587C9DE79DC8F76C3ADC712912A031DB2542779AEC4F348E0EFD645754D9E2D5631BB861A2A1B59DFA1D66EF933575FD23280A4AF9E92414F0057045AEC30DEA910558347C92046ECC1B23A578F6CD86C87B40186BE4B8DB414B1F963F7B809534990BADE70D673D9549AD273F3D87FC6FB170000067BC3BBBB47DB3BDAB3D848A6B9FE0C831513823636F7F8F7FAC1C94719CFF3A81F9C3C8BF71AEC0DCF70220B6CBD622C23A6E5C7E8711B2134A160502D5AD9BADD4663D0E73118B3881FEED35885F419685A5BBB73B95F15C863DB279DC33C9A4300EB0D4F001B0EB4E5A01D152579385B86257B76AD0B5C3BD645D81579CCD0159C14CC7155726208C1C3CFBDF5E94FBF7BE3FFA4EA4A550248F3CC3B48F1EFB6E8F7AA49EDE8608A04C21091F770C24203406BCF91F5DC983FE2B35F7B09BEF7D50F9CC9469705B7E6E54792FAF15F3CF3F8A9BFF4D1D35A3D67492D35E92C2F3F4CFBCF1F8C1C57669907C476F81C96477B060B9E28EADFC458B1AC09AAD67EF03F4D9B45FA3C199C0FDE06B0E1C040C334FE1597F055358BF598C2D859DEC40ED53180AF277F0B447F1643ED3580E9779245FECCB1E7BEF5D40FE27E520B8F82D7503BBB1C0336E67DAD4382B79B723A8546D1A426F43827379DDE24FACCFECE1F69818FF1F93A2418B4A67EA465A6123F0080EF7DF50300B30CA50B28F9437B414AD88CA432E4E48FDA58D27252922011627A1D0084FDE024FE86778FB6BF0B53D2542AF933EFF926F91F4F1C997439A4EF465BFF1761DA9EA6B2DE04257E60D5E0ED5192F8D163FC1BD2489E277FF3C113C0150033A6C64E3B361EF7AAC8CA1100C09700E65FC9C0A35A68EBBB4A84C9A4DFA4C49E12328940525221E5E78010A6A158F0BB2D3479A386F17C6025C9CEFEE8F02E3A1B9C19627586AA61240AA8C6EDF426E3C1DE30CE8F92681E93AE1B6E4518C7CEFC6E74C94A16DD70EB362F33C9F714EB10AF0798124B420203BC86933C1BC9A0F5A3A8163790D08E8EDBADC1DEF00B9083BCBAC0F41121005C35FF23723C817E70B2C1C8EFA69026456E2DB78F57B4A96A4CD0DABE54DF9CB0DBAEF3281F9E00361446E2C4977A8B31324B3C91F4FE23AA16F1726FB423EF865BCF98DF9424C66371A083CF606F18D2EF05256212A13376673121A2848C0F64AE52BFAE7DF9B900661EA1CE03B4268DE4E90449D36B866421B1D844F226950DED044D9D85643F065523777A93312128B4EE6209B8215C0FCCD27363249CD41B9796C955C54ECFBBA8FC293EF7D6A769DD055A3A17E0649C90EA4D601ECBF83EBAE1D68DACFCB0BE6DEA6D7A6F120982DEAB34F2C7FA36FABE13932197F2F2FFAB23E1AB9F07308027808DC5E8B87D8DDA72F0F3C6501D3FF4332F01AC061DB6E20757E1A0A1FB6A766ACD011B7CBE8DB6645C5D6993A27009A005BFA7D996997BA8523DF34DA7A43CAED0549E9C9C767A93E8977FF4D9BF00982EC946885CAC6264640F2584F1BD3EFBB59782DDA36DA0C74D7A0C41350680CB86E05D325B22AC0D5183BE303A6E6F10827D8679DBC0259DAEA49013649A4F3F3869B5DA117ACC167294E8CC96A63BE5937104E6CBDADF5B348D24C5E444989F67780EEF51F5184025A8DD70EB31973CB3F2FD881F17EC01DFC1EBAB2CF762504F2F604F001B08EC98E86C5E1898E8BA968507140F1964200BB073FDF2939FE1AA8BFBE6B796B3BF750351A35D05980EA418F70E20AD16FCF2E94F4F88D72900CCEC69250241AE7D038F712296059CB8E57D2E5A0E7A8CFE224943D5ECFBFF7010EC1E6D5F64EAC084B4CB1C0F31640C5E0F00F0BDAF7E10D27B120FE24D932E0080F7CCF1F7601A7AE622D69DE9C7BE64CA1550499591028659F526493AF9648B4BA0B82A5C53398E48F06F575B4CE3540300F0A1A9D7739DA4D4B595878CF167E1D2569E863CC3983CC3269160574644585B3F2F958B1CFBA464F347CA1FF58393D7AB2AABC714DE0BB88130B3E6AB00722C27F4265C96ABFFBAC00C0A74BD5F152ED2098F72D125DEA474B0A1DEAE34EC074F0790EDD5AD394548CE06345F0DB44DD9EE6B2B8B54361ADEC53CF7DDD171FBB285C48ACB6B99F35F0480EF4865C0FBD0FB91328460D4C8525D691EB0D22F5E4FCA84F93D06433EA46FCEF67CD2B98E1243D5164E4B33B79987D863B908414E1CA7F545AE1F9B3ADF0452AF65C010CCC464412A87D6865CD5C11E15238A22BF3564BB703D3C35BF11FD15D2DDBC703D1C5FB81E4624EDA565977F9536FE2EDE1C3FFFCEB2CBE4377D7B73FC3CBEA7E8C2F5F0F4CDF1F3113D467F8BE6CB8FD37BE4DDE8B73BEF335FB81EC66521FDC11D521F1169CF5837F769D94DBA9B6F8E9F7FC4D2F13A1CD37BF1FBD27AC167A4C76CEF84D7A7ADEE2D75F2487A37DAFD485FFA80D611794F637A8CBFB7A2EFF0CDF1F337787D656D55B5A322ED4EAA5B7ECEE51B99E71BF25BF6E655C00D001AF20AEA2871B684F68134702D00BCBBA0E2AE3CD0EE8F4A05B2D4159213C8B255C3687F45D4562B0B2A59407526F568E5E8F426775025C9BD34D13689498E9E705B26AED6CA0B23DDCFE555CE55A2A8BAC4B2903EE343F4EA3540E70F54F5BE44F334E5B9D6378199D16984DB760DF6863F00E3354BBE8D1657B51B0961EC8C43C39B747A933B92EA5C92F8D132647D4FE6BD3C2BE50524DC0AB5A31C1DB7AF1955F64553B6088C4AD53CE3063F469F038A7B107F9DAB480152F109C540D7B84FFBA7799D0079DE74E3C7D9758FA43C68F96DDFC8BCDF90871D9E003600260655221C45CE2C36CB14FF7B000059ED831E943A3989F02D5A252C913C63261082991C18CFF29BA98B1B06A306C4FD8811947840A66A34AE061C1DB72FE33743CC2CCE0124C93E217BA9D86BD4103E0FD8242FD7774BD4A937077BC387BB47DB01922F5A96DDA3ED9F9742CC48CE048A7D56C2BE11AFDB3DDABE0816AF59664718A7A3E14D70F51169D2642B23F92B922EED194C5E8144360100067BC35BC0482D80BAA671DC3F9B3654388C0F7D167C5EC929469A6CA0A77B11BB3F4ADACCFF31AF1B7A3FDAB6843EED9398869FF3C46EF9F001826B0E338BDC29782D7692D6E0A11EEEA09258EC5C3B64C92869464E072C4E3416515E00F810005EE8F42600B35561F0DB6FC36CE9B16B2831324E2EDD1159ABB429A0648CDB1DE1FAB11D988C0186097B333E487566ABE880493306812868EF991E23E548AD724141257EDC26CE065E76747441509B3C62DF163B364C8341438A5409CF1602C0137E6F735CAC03ADAD6B844B237E349DCDC1C056BF349D8B5D269938E1F270F13BE954B8541C291B06303F1362007E51488FEF35E8F4260F244FE32CA09494FCDFD0EC31355B4BE978D67F8FC5C34B006B0E338B4C7C2436B59020C529D5F877DD211984F341809209CD687D811D1FAAAF4200F8364CC91EF51007DC37FF7155998B00F01E397733AF3AB20EA0D2892E7186306ABD4DAE2215B28857D9E99BA0BC98174DC4DF339790996B4659E404C8928D3CA490F27C6317E9CAE8B8ADAAD2768FB6A97A5B226BBF4AF2DD0080F37C420382D4CF46F0F82448228B5CC2A8A5A3E8865BA3AE3DCEA248F6E93DE9BD46C7EDF78D494D2C0D26EF249E1C941D664590AEBD2D24FB0EAFAFFFE84FAF8518247B34E7EA25D2BBB0A521654D4D10BC04B09EF05EC035878BCD5FC6756155B3D475839951BFE82299E133657E7C210586443BB80B5349720800DF36D23EF4260F4157DB45A3E37662A268F380AC13C860741ECC33522F5580EC6F8A927D26C9132522523A807C6160CCEEA6CBF7CEA5929DDEE414EDF89854281A9125DFA8A488641793079767E2C89AECD848B39457D6B39709498A4BFF2FB23C9C206BF537D81BDE4575394C837287B44F9A27EC8BF4CC5984D0A6D5F064AF9EF012C01A81DA6975D8DAB2793F642245F0E4AF24D0197516F9D3FE57DD117666AB0E7029080E1401005CFD5B7FF62A5D333A008068F768FB47A6DDA0C9C01900249605AB33BA647931C1362FA06A501E0390BF3342C462F30949A2C54920BD3F9ECF49FE3E2C6AF787B66C26AF04A1E14E189DE98A1B5CDAB8C1259759044D9ADCE075361B3E7ACCA58E6C6A615774896DA896B7544649AD5D1528F192EA923A818C8EDB97C9A5C1E7DEFAF4535F7EF2337409BF8424AE6879A467D6EA834BBF0DBE3B6F393CAA819700D60C5AC478B43D73B8FE148CF4C0C7012C0724AEE21888F3872D369C745C9A519745083BBDC9256AAF47EC1323989298C0782CA20D63667B6279440040CB3A191DB7E75A22AB0A18356BC7EC5B25129A7D99256F7E76A99E000020004944415451B267930CBA961BA5CB66DFF9BBA56D13A57748746DE5404921FE374BDEC5EDC155DAA3D9EE49D76549C535C957D9B0BD47A9FCCB9200D2FDAC3E05CD1B0080C6610C1D4C0EACF7CF2A57D1BC3CEA014F006B0462741E8BF239D1C8FAA05C498A473ED07AB5A5CB529555A952EACC96A553CB69068AD7B87387397E0BA5822CECD02D2081C7CB2EF72220A8CF629284E7E93BA1244C52F977C3ADFBFDE0E4659E7751228813379892759CC0C5A450B9260EF8CEBD43354245CB4AA5499430F267A1702107F418CF270FC95B1479904896D62E94E78CDB421965A1FF35F237D81BC6EA7AF33F11787BDE3268F7B5B5274FF49A074F006B026EEBA74968B48ED6A875E20181C47FAACC536D5D406DDEB2A433AE9D661544909136601307D1FBD4A50CC634E13D7AACAE44B04B56289006316A03C86DE2CCB51FF78393A789E454B4C513DEF34FF483938F5C0843165C276E48F8291140E0F3F4672BA13C03007F46D350D2C009850B9175B513CB92F015912C558545921B2AADA6F797EA4AF1024EA048196DF59DF52EAA96D47A540F4F00970C2E5972502DFE1E00FC12FFE8D07E10253B66007B38AF2798476C5777517B47D2A051A5A44F28DF1D98867AB90A53678F57768FB6277D21361D8536F00AD2B03398AA80E301A8CE12E62C292C213E4FB43A6212C0847A3D4B2D87A88AF899328C0D89DDE093475A465E5E5E2F4884A9F308BF5EB8B755FD5B94502C127C4224117780ECEF789E67EA865B8FFA26E40AAF3FFACE067BC35BBB47DB57998AF7160FF5E35A0EE9D9791E369573DE4981478DB1ECA548D675C3A5DAC8FFE8C2F5F0A696DE65391CB22C51647E4FF394C96F99F5ABD66B9E258EAA58DA88BE7B69E9275E36ED9C92F71DD35E27B41EEAB4BD397EFEB1F6AC7CA3E5CF58426BACDD437BE745DE2F7EF7B665BBF0DE17AE870F68FE742935AD1C967AB8292DDBA5B5DFACFC72BEAFA5B7A137C7CF8F8563A9B691B154D98D12CAA1BDF354BB9596CC2BD2F65CD269F7AACBFBF3DBFC9BF7025E1E62750BF1DAFA124FD40D9371CCB4CC8C9A7203BD17E9CA051EE541ABD77EA0074515DEDF8F4A2CCF4D12F835E5C9AAB51F7ADC419AF521005C06E3114CF2AF8DFA002579DD70EB7196D4465A4D0161A4A90090F6A027F710A55D45A4BEC6CEEF5A565DE2BD47C7ED17317F2E31ECF426A736091EFEEF07D3A5D8C0D875627A7E8DED7ADCE87FCC87E669799EA54B89249308549D73292FFDA5DF0E4C976C7BC4F3316945AF639626751FED5DF076CBEB374FDB93EEC9F7A5F7BF48CD8647F5F0047001A0838AF98F213AE2701B26506B2AA0B0EB3DCC2072FADA3FD8D9C4FC9A18B8B74E6001B5AD767F9A1A981E23FF9F95F22952BE115BF7999689AAF428B8AA4BB2C9A2E9CD3D124E2375227F0CE771274B75279D1F1DB72FD349147D4E7A8D346016C48FCD7D5BD4C4404B6CCA74CAE3FA014C975393066F4AD0067BC35B5279B5C1DD90A11B5259B208485348027F0E8118A6C298B0EF3CFE9E29E9CB32C1E0F9E07FA95C54658FAA60DABFF06BF3423311A06D472AA347B3E10960C53024E215B31FAFB6604EE3125CB92475C22C14309FF7FEEBBB00D3150E1ECC5DF835074A66F204E39606450027295B11BC8264003D41778FB66174DC6E0DF686EA3DB5813ACBA81B2510A40EC21A12C10F341B403A704A035B37DCFA2140E27BBC45DFB7ABA382EB7B364E3B97691B4322D80DB722B4EBEDA457E9D8A4D220FE2CF8DEA57E62F768FB2A95260DF686E1606F988A754808C1463F38792BEB592A68DB0B833649EA9AB8927DB2F63339A7D90CC692687A0D7F0F7CE2257DABFC9D9EFDF927E2F89598C7606FE86C93AA6902B47352B93D560BDE09A402106F5CF4CA8C9D08689C3E7A4DD78412E08397D631481F25C6F2AAAB717ED340576500169E87427B3F55CE94A9C7374022F61700C48BC16F644917B28CBAC9FD6878210C590250A3A506BBE1D6957E70F2B6D94789C9C3DDA3ED8B3CAD8DCCD99C2A6C925E520E17CFEA381E2364ACFA61EA1E971DDBA4E16BE8B3D2726924851363297C88747D16095805A9904D12AEF5B9AEDF7A913AA56591CA48A5C02E93132D9D85CC7A078F15879700960454F39AB02BD70066EBC6C28CFC45308BF195500BF7491C29698646C1678EFDA94DCF194C257F1190352A3D8AC110AC7330233A818DE870C9091EAF62F6FC1FFF9B5F189B3252F2171A3382563F386921F993ECB334A9A4D4B91B49D44D5433D3365CF673CD0B247F66BF050020913F80997DA465404B49FF24D24CEB364BDADB21EB7493B6B44955B9DD702B7AF3E3172644B28B619C3EDC3DDADE44E9AE2441E2CF2ED40F4A161F00CC3C803542E22295D288A8F99F6903572768EA4EFEBEB5EF84FE4AD054ACD2BDA57782123FDCC7D55D6CE4AF6B5917394B2229D58F9706AE163C012C094695330680F771602601645B264D8BEC5FE679689D82F631E27EA737B94963445167108F62202B7F88B0A94CAA9E25DFFD07DF0F778FB6AFEE1E6DC3E7DEBA880339C67B5397E0E2D0480C1F0C768FB6AF92BA788D868031931CB59E16893CC4DB416A79951F90547539D4BD77606A0A72C5FC8FB00E3BBDC978B0373C4372D86A47ADCFFE773FFB1400C0EED17660EE71D1DC6F2CD97BD27D87325D347943A73749A59708852639A2E768DD9874993670758626E595BE715E4F14527BD126655219E879AEFAC7735ABFD39FC5818C25905AF95DFA2D2F015C2D7815700198CE1CE3EE21D94235218DCDF510005E008715240064D1BB8BDA01E394650529F6C8071EA311615399CCA326722C531C209CAE00A1A927256449FE6C8311DE93AAA0E67DA6B2A0A9B5A5B4ECFD8931E134159B707DA66AED8D7FF19F84B77FEE9F0528C5C17C71F515724F24D3010088EA6BFE1C9A5A5153E151C9B19656BA8EEE6BF5BB6A04C1A60EC5E3AEDF9AD486B4362BD5B791FE85606CC8B5F797F73B90DA8CF6DC1EAB052F01CC0943F676C07C881816841AC6635A13843974701C1803A46774DA47CB3B08C143D34BFF4A80E45D0BA07792DD70EB3EFECF9218148151FB6C52E91100A4BC027939A5733C5F1749167D5EEA295BE459AA0097D0499249AA4233DB3B7DE6F539D81BD275904F6DF56893069209DAF8F6CFFDB3A0D39B5C228197A3C1DEF021923FBCDEACC6814E6217A57B73CD00270B9CDCD232757A933BE84840DB8DADCFB169206859B804905FD344700939FE6ADF934B5B31C743FABEA4FA928E69ABBEF0FC6D420497BEC95522E8D16C7809A0057405009406995321AADCF800388F44A41B6EDDE807276F65759EDA6C11ED85EA269969225CA4A97C766D93C2CC430289C3076D83A9F55B35E981545EAD2CD26061A40F671856A6AEED4BFA6EA89303852601ECB0E5F470D5054AD424E0CA0CF47D0CF68638198CFB8DDDA3ED802E47479C7680DC0F005407941F01C0275DA549B46E067BC3BBBB47DB3B529DB8B64DA9AD4B52A4B2263D7581A32439D369845FE370DFAF00C037C8BACD67401C81B2EA5DFBE6B5BE4BB8FF4ABDC7F9711801ECAF4C7DACBD0410432DB0630FCC60FB9E91B6DC0132F0B2E597CED0B62FC7324EF7D9FFB1F910BFAECDC06D1F211A75F365A13C8A81D6A14D9A6A7B2736695C5EA053114CD77D4DD8926A5284AE1086820F00BCAD499D3DA661EB909EA11492D8BBA6BEA3AAC1BF232E1903D0833EB3E70FBAE1D6B8330DCA7CCE48E2E23C778FB6AF92B4B1849F0CCA80CB72617D189215AFD36BA46EC11FFEC61FC7D770092E5DA3180DFCB10CE4DD7C923E1F7FF736C9541EF2D70DB7AED0BAC25FAEA5A06593A492AB022EE9D4A46CD22490E7C3A5A49AD4D4D4EB37516268DACB87BB47DBA1A6BA65F93F061274DE55D2CFCB9B27FD6AE290D4D9EA903F002F018C41A46734C40500CCD63D85E9EC2B00479B3E0946E5F43AF94F176CB7DA6ED8A449DEFE6F7EA0A4CDEC3B49B924090CFD5F46074ADAE4C3DDA3ED8B38884B644D6B332EE0037C567A242BEE4F521DA4679780924C00B96EE877A44DC6F20CA294DCE17F4AC0B43035FC9EB86F7B472CDD0FFBC1C9A7E879E36472954B1F5D25C7667FDC0F4E36B4345944B4C970A97B17ED8D964EFA9E498C468C192BDA9AF2BC5DCAA969923CD6072B2701ECB0D51B2CE9D086E914833363880B30B32DE6B5DBA2E78A96AF1F9CBCDE0DB71E77C3AD5137DC1AC154FAF048FA68B94D4746E77A261CF3C8011AF8D925E0B36DD004701F141CB009300D696224394E1769EA2997F412A8C48BEE2F13DD59B05E277B47982E6B67257294FC49522D297FA93E08C9BA6BFEDFE5EDCAD80927CACDEF49253792F44FD210F483934F75C3AD09FE3752CDAB00F09A39748BDA434AF5C7273726DD4697913D3EE1A89448B45A4B935848932B1BD192DE952D6F7E0C437BED1E6DC781BF695B28E39BCE9BCE63B5B0521240A3C27991D8F16000D500A57BE4780026882D866F81A973473CCB5A84AD53776AA41DAB979581E9099825AE14A905E671570A2FE3E10616ECD88904E2BE2631B11D73284F6C8F466C7EE2F692258D52547B098F57099254934BB2F05CDDA480B6F316C9E9B81F9C6CF0FA46E491FA0912BE549DE1BE54664D1AA34DFE6CED4A92EEE03B0348BF4BD6861FF7591897ACBE6A1D4944D6245093B475C3AD47FDE0E4599B048E98A2C49EBF36C9B45436E9BC97F679201A2301ECF4267778F064763E02808BE8958B523D98065ADD108EDFA5FF47C7EDCBDC8E6F4E878E2B0E69223E182B1FE7792A05A41FB69178863025B39EFCCD098DFC99C1CF497523A168874BC99F3994F002D4240DDAFDB2C81F2D2B6F8B188418D552482496E975DE0DB76E778D0D2D3E375DDA0C00524E15E63A3A38A6EA4491AAA9F675F82B48F8C47B6A523DF66CB1676E5E69AE416CAFD8614B434A7680AC4CA9187EFDE9B2706AB064C732AD14F8B76723F4F43DF6CDFAC19A5419BFFBDDA36DE8FCCD6FB6709FB673A93C59AA694FFE3C286A2F0134A4EF1328D903628347ED75C86CE92E98302DE8A96BF24979EB92500FF8FB80AA64AA80362BE7E96C5207940419A9C54D9806974DD88878B8834A8669106D8760C100E0269D2928014CD875767A93536ABF66B3C32ADAC94BD23F04CD1B07284DAAB668E07780F5436DFD1034FE1E40F27D49DF914B5DF072A0373049932935D306ED324124B977778FB677E83BB4DDCFA59FD2D2978A562B82286A5CDFE622A1A5C7DEFCF88509C03418B8691B8FC1687FB26093C87AE2372F56CBFB17512B09A064BF67247348FEBE0FA633A5521A4AEE8C142CA41EB1C6B85FB59B23767E95903FDB8C5D3BC73ED8904B76FA535B9C31003C07E0895F5174C8127E908CEB98207F5D164F8D4B7078E75BC6A0CEA547DC79814A6DF80C3F879428F14CD23EDE0FBF275316AB4DDCA2313A6E5FA3848F1041B4BF8B252800E9C192785A27C0BF413CCEA439F17749C99FF9DD60F9A4F2A6DFB6A6FA2DF23E29067BC3D0484277303F6257665DB28DB7735E4E4D52592A1A48FE00F2397D00007CEBA91FB401A6EDD5A8EB63F2C7E37D4AEF413AA6DDCB230F24F27738D7375907D44E0248A5307410562478E24A0D2CBF38969FF97FEA2AD9290A571B30DB60AD4976A4F38B905CAE03D82A1B629DDA6CB8E83B2A2A8933E154DE357F3701208EBF679308E7B98706AD3DE695A62D1A7948AF2691454FEBCF7EED25F8DE573F10EDF68A406B275219F8B3CC5BA7283DE2CF40A5B62EF7B1A9A0BD94291BDDF44A33AA1D2E6AB9768FB60332F17AC03DC5B3A4D2FE3D78B8A0361240E38D7B4A2477F18A0728ED23367A28B9C305EA551BA4D17489B43BE47FE9E48FDBFB69B33E9B8448C83335ABE6BFC62E720C003F36FF1FE0F1B91F6A4DD049AE68B169EA33531A6C538FDA06D66EB8F54C46917E0B00DE0613EC95923F49E226491EE7951609D8E407701DD9C1DED02AE558045C880C5F014448FB360084DFFBEA07719EBC9ECD6E0816B84A6034D5AA265515FA92440C4405E7E9BDD036520A22CCF6AF7009B746FAF0DAA590BF257A04E701277B1AF94320F9EBF4266323A9BDC8ED5A5D840CB6F1C7A3289A2FF5A3A89D0410405C5EEAAC6AA9DD3CE82663F93D03007F06903600C6F459523F2E05B048FEC63FFF9FFFA7C1FFFE3FFD2F00104B456F6AEA2C0F19796328DAA4399601FF7E3F3879D9A12CA70010133F6AEAA075FA78BFBC83302D935171072E122F2C179392393D5FD9E8865BE3C978B3FDBD5FFB97B9C3E30852C0443BE0248D7F93B65F52BECC555716419C8C3A31B50289D09E54E9944DE224E5553A1A6A07E8021A7F96ACB57D134D0A1074451EA97DF27CBD54B60C50FBBFD5B205AC8D0410C1ECF950EA5767F2F718A6B1FC70469E227FC235AA7D18B5F9C91A8C47C7ED8DDB7FED7FC56BEF9A639EFC390263409A01FF969446B38FA2921E4D3AC7D25BC911BE67A36A8D3B781AFF4B93DA14EDE06999E8A04F9FCD488EC4EB895D599C979106B948A7E646A73779D00F4E36DA1B67A71A793FFDE859F57A33C8DE0100F85BFFEF6B13EC6FBAE15684D2748960DB481E7F1736F2C7A585E6786AFDE2A2C0B2777A939BC639050092CBCDD1FEC65C16F0E3922682EF574632A8942F8A5AF1FF8648FF5C3122EBC9635D52F287CB0A72530C2EF1E7EF53197F16F27DAE0E28E15B1DF207504302683E8244B0651EC2A04EE807274F9B0E900EA6EA406D512D3DE179F38F58FA980961DE29E379D605B8EC97D98F00E0AA94AE1F9C3CAD493E34D5ABEB60D80DB7DEE17962478F4480BE7B7E3F4B5B2A044A68E94022C5C433CB95A90BD32F08CF01000CF686E7CD3BFC3D5E9673CF3C4A958D3EDBE8B87DB9D39B9CFED1E1DDD8D1A51F9CB4B809804DD2254DD4BAE1D6E7A56BB53CC8F1CC303DAE4029927190A16422963271422BFD6A2A5F813C960F2EF1C3FF2B2609C47EFCB35FFFE99489413F3889BF35F62E9EF0638E12FC854BEA3DEA895AAA809B089B4A08C06ED3E3AA76E3D71BBB908086BBF1C807D780CFFC5D4AEF5523095D21A8AE761F69AD560965122D4DD589F7E16D73B037FC70F768FB395A8E45A99ABAE1D6E7FBC1C91F98FDC700709E3B35F06B5CD6BFEDF4266333C8866054E1E61EA9EFD455DDDE0DB7AEF48393B70B3E6A6940F5A2D4AE5CD586596D7F615831353053FD8683BD61403DEC5DC8357927219F407815F0BC381C03EC933AF52AE0B585A60E04D02535F45C9624C0A646A262FB4E6F72079709A2E16E3CF2812E07A8A591545F7C30945464340F17F20710DBF7E0353CEC4F22044799D217493286E7709FA9817F0A7768DDB1EB4A5365B2B2FE01DE77B0373C6FA475A2E30D51A5A912AD4E6F7213BF1FF38C1866EA2697DCB37264BE8365933F6A56807524A9F35D4C5234496015E54E80AB7A39F95B2D5570404D3E00A66B45A3A3150F0343F7CDFBA19EC6DE1BB814EC33E1CAEA903F80864800BBE1D6A81F9C74965D0E00D57B2F9E794936432C6D9CDE9656933250278FBCCE0B1E4964D55F37DC7AA73F5DBB39D199DAEC338B74B89C64F1E59E5C254EF342925EE3440320619C8EA19AE812750B9334D0703D923D9E74CD606F98080C4FAFA3EDC026C16FA234C58415BA0346B229A9ED01E2E7BBD10F4EDEE2E734E95F77BA96F985CAEB6485A47EDD70EB2BFDE0E49BF89F2F66A02DF5C6A18D19D5957C1D801EBEFBAD5593F469688404308BFC95256DE8865B8F32CEA73E38F35FEC54311D404ABA17687665342DBD9EE0BFEDF426A75F7EF233F567EE0D054A5BFBC1C9EBE657B48DC37336E96FC67D1EE37586A024080985568632A530CA7304B80C15DE73F7683B40DB40492A51253ABDC91D5CC21155E63BBFFB8D28AB2E38F119EC0D5F93D249525C4DB2DB049818A8214C55C00195000A12E5AF73E9AF85FC4560C85F55D2DE5504923F5267E1EED176E84AFE067BC3875A1B5D884476A5B1DF5A07D247D10809A02BAA9E0549365E362227A5B5952F6B4687C758C0E24C1B368F345CA4A736C99FCD16CAF69E51AAA8DD03CBC61D2FB2F22D0A57091A9603A58264A58D852E056796C3FB0F077BC3EF0224D7B4B549656D2AB1373FDE8EBEF5D4500CBB24E5D32469A0595DE915134B2E25E5C4745A1BEE865B3F04809FA4E99AF2EC75072E640090963E8391D80EF686219DBCE4E96B3CB270F81860DF98E7AC87C48FA3961240DE016BB3527EAE0A1B15970145FB003592D8358BD7D3735CAAA3E419024C4306747A93B1277FC56008B42A6D43D8ECBEA4638E76375F90EED10DB7A24E6F726A9B6408EDFBF33007A476E6324141F2F7F8D1A797317BDCA4E4CF95BC4A78F3E3172657FEAFBF11BD7BE321004C6D30A5F7CBA4648D1A748DB9481700D4D54D783B6344E427791F27A52FBDE0AB65DB2762F7683B5EC54A781F01A601480732C731A429EDB0A6206B2C6BE46FB5023FA7104551ADB737C7CF477CFFCDF1F38FDF1C3F1FD173DA35B663D279E97EB86F4B83E7B3EE632B0BBF8794E79BE3E7A36B8F7F3AF31E7E93B70BD7C33B17AE87CEF527D5BFEB7B7679FFDAFBBE703D1CBBB69B32369EB7509E5439793DBE397EFE31D94F957FCEF7764AEF77E17A28968996EDC2F5F08ED93F95F2FCF2D9D604F3315B229DF4EEABAAFF2AB70BD7C307587EF2AC63AD3FD3DAF7BCED3EF706D0C8FA767C27A717AE87EA9882ED96B667292D7B3F3796FD5C8BDF0EEE97904734DD96FD2C8BDF6AA702D666359A7A14C5E5FDB453C57D0078493296C53459F7E7B332CD1E86A70580277D123F8E4B29D8FF384488763F7E1F132BCEBA06B2870C1A760120FFEA1F92C4495011DFEE07276FB8E429BD67E97F1533FD2CF5AF313748D82665A948CB2E230555DBA3DA562AB70DE45D8DFAC14907F3E42B6350355C960AB9AE30EADF2FC1D4CE6C93AF0062EB17F33CAF9744B9C3D8B05E46FB55FCB6A2492BFAD6533F68D37AFFF2E94F4FDA1B67A97AF56AF84501D5C22BAC1E5E36038D225DFA2649DDB266A8B6FF2E69B57B669529EBBE59523F4DFA47D35109C585EBE1388F24CB6FD359B7F94D49AF6C6DC426952D221191AEA512192ED95A44DDBC397E7E9C258146A9641EA9C41CEFEA26D98F6CEF4C2A33960D7F2549DE85EB612C4DC7B65185C47799DB973F7EFE09AF0741726BAD57AD3DF8ADD886DFBA569F59FD8DAFFFAAB783B5A9DF5AD9006AB675DA0C5FB205D43CD7781A9A96DBBED8249036FB179B9484495A6E735B46DB7DC9F56F03C49290C0840E5063D879A4403D41CFF8C9EE741DE7146CEF33CF2CBC3B0D9B91CA83489BD0CB168C14B1BA25B692E58AC048BA34099F2957C27B9D0716366D5A8D959907A3E3F6B54E6F12513B572EAD95BE5D9E0F977875A76BDDC6F9FDCEF93F6D99749B988EA4AD977AA400DEFD2F871BD4F39707C5E65240529FEF48767F7CDF231FF05B0348DB976AB6ED7CD9BEF5A97F17FBBBC3DB05F2255EEB780FE95E2B6EFF07357102B1A87653E7E97FFAE1F0C1920F0E92BA8DE74FA11938D332F20FD8B593EC07276F90F3F11270FC598401F90A8B1B157B037BE4C6263FD00F4E3E62FF131DB3D4C6F2DCB01F9C746CAA9B7E9008D4FB4BB6BCBA6419B932A07D6383BD21985880A99037786DA7371993E34E41AF6DC0490D257C749F3F3BEF3FA480DA26E907C6546484E412379BEA739E775E035C064890F578A2C1FB3856575F90FAC086D7C55281EB4E2324C18354A774D9BE559A9C6463BF05707865BA7F18C9846CFF8DD979E77C3766D7A06A97AB78579FFC01D48000F201168F4BB65092F48D0FCA9C3CD9EECDCFF38144BA5E2399F498C333DF26657D9A12C80CA96782B478F2971B71BC2DE205ACAE33CD0746490A588004B6A4C177F7687B13A57F982E239FD7F3DC574216D931E50200D8E493AD6EB815FDC93FEE433F386995B514A1B1590348B6F394A4B66F82734BDF8AA9C34DFA9F5CF7B2B1BD8AC39A98767046D2586DE08ABCF365C1048D7F1FFF9BC9C5652D7D37DC7ACCFB5CE9FF522551ADD6FDEC44F541D7C4FB3375F6218FC3C8DBB156A7445B85B16A536BC7AF26F6CD6A3A48D00E2380C3FBB3FD385D465B3C2493461EF0994A019114F29880AB49086BE70402207F085A870F201BC5DA3A692DBD22094C3869489D22BFA7ED23767D2E4D2A8986C3DAB379D8810430EF1AC0F4BD4BED671E60BE543DC757AE5804F2105CAE4A2C522728C146C71C7C2F789E90F4B1541779CA8BE5FAF2E94F4F7EE7DCBF6A9B7CD5954C8CAAB8F16B6C9BB8899BD86F48312679BB96F69751F6A683B6297C0F78CEA675E2E3C1D99F7F027EF727EE658E55AB0D8DECCDEBA0C1891D259A2BEAF841B07409A00449D227A5D124865C8DAADD43533333C9DE79E97A7A8D56260A36134C490FB3A40A9DDE04BD7FADB1EB3C64747A935357F2C7245D54BDA9AE87DACD584546489F686738401B952B20E1A952DAD4252B38F04165B037E47648A1F9BD6582D302802C3D7429B3217D6893B909443ACBD3B225DC12DF114C3DEE53F7A52B94D06FFD77CEFDAB36AA7D4DBAB34E6F722A90C780BE23E999BA25D93B56854E6FF26074DC3E87759197FC4992EF3C7DD6BA83B5CB4DDA8FF07AA4FF3BBDC998FEDFFCCB3FB68E85AB0BAEF6A5E48C1F73CAEF9DE4F5541288BF346F6D7F75507B09A04DF247E1A29AC94A23497BF0789E3267A47BDC372162343241EF8B6103CC80750B00AE7A09603E747A934BA80A3376383B2ED23FDCD7A480F394491A7817BDAA8656265396332AB10090CBCA438B48F9B2FA47A95FBC0A82C1191829A04B39856FF90990C99A542EA3EE7F8EDE874A665C24884D01E93712CF87FFA5B6ACD42BD0341EEEE8865BE3C1DEF007BB47DB17F1984DDB63343CAFED1E6DBF4755C574951092F71A49013951A3C7385CC3B61CBE03B0FF7A32D40BCF07EFC3F757473A587B0920973098FF4FE87FC9868EE683FB343FFE8BF7A3BFF43AD7327374D39E9F4FD38E56239AB8FFB9B73EFD197328044FFE0A81908F6874DC566DA038B804C4366BB7C126ED359D7E6C8346F7AB044A2CF9B3F583D88922260DF41781D24A257E1EB0B4EF136FF580A974CF4C9B76227F782FE13E09493DF75036C7BE09247EA6690FE7A4EF8EFF3649F2D20DB76E63AC3930F69484507C68D25855BDBC2F6DD2F32F1B5D13E561B037FCC1E8B8FD22806C47CCDB563F3869615F85EB6F4BED985EBB7A3814D695D6ECF1245B3D3C6EBD4704F18A4C94FC65114CCD61A4C158761C1A697389DF97271652569C3E8708EBF179161B2B7714722DE621DD67F1E16ED208FECB7E374DDD2E5C0F1FB095241ED8DE8FF6DE5DDBDD9B66250C5B0C4921CEDED2DFAF4B8C4B1E574E8BB3C7EAFF1457A0E02B7AE428DB482BB314035029476AD50F5BFFD0C4986B17AE87974CD91FD33A97E24BDADAA48F3937D73B88E3586A7161A50D57FF30798C6D79ACDF7610CD62F4D15FBED1F4AEF9F2F43CAF3CF93567ABA50A9823877A55740491665AE4FF937E094167811C0000200049444154A12BF2C045558DFB34D48B5FFBB73888042A25699254EF544AAB3938E46D978A8AFF124AC8A8B17EC1C72C04A2D6BD353A6E5F33D28BF83C0BC1926ABB83BDE16BD4DB1420F640BD368FAAD7A5CC9A1D1B07AA3F81A97F47C7ED73CCDE33B6BDD4DE7BDDD10DB7EEF78393970192F6C2744517844D2AA5B5F726D6C922D0658E43BC5E3BBDC918D7F6A5C7A5714B5AB5855E53E573D41FDC8B974BF13415ADED3A3C0E0070F81860FFE9E475653A9ED4078D20802ED03A25C9B079591F93462AB2C8868FFD571E685D6A69341B28CD3655B87E0C001FF705EF714DAD660688CCB2550D57551F3E0FB1053C43DB3254F192DF529FCBA64693CA486C005527201B496F2AE1A1CB1E4AAAC4ACBAABB8782B876EB8F54C3F38F90889A0E4656E332FB2F50D786C7DEC002592A59136C97E2F3E16CEE2FE611E348D46E4AAF23AAE176A6903D825DE89AEB07D0892FD1FB7715914247B325A4EFABFD39B3CA08315DA2C2DA6A4AB0529BC880D596D24A3BD6DF485B5A06947CE1D2EF0FF32A47FBC2D52E91F827F3B3458B321819B00B3556ADEFC783B82A9BD5F04333BBF52A0D925D2F3D2B744CA77A6113DDB7DBA35F7FAA5E0E44FAA13FAEE359B3F9A268FDDEB9AE28700D3EF1F4027DD12A1C3F6D7E94DC63CCA8364A329FD5F2D48248BDAE0E166257F00007FD31244BA0570A8446FD0EEB13AE40FA0A604B06FA2F5E7B9A61B6EFD3023C90724EDD23A319BC1393D6E82E23E47A47E2DAFFE2D06242B461D690577D0B111F62CD07C681E8243C539BA30BC09597353CAB36CD001A9D39B5CEA07272D128B50F51045E7896E380D5E4D48630800F0ADA786717B2D6BD2D20DB7EE6359F05722259DDE243E8EE547637C5E768DD4704268F25AA8A9C83C30751E3B1465B55FA11E422F19CC073AE9236615782E556F9CFCF5A74E201B9C380A6DB13113916A40C3B870C78C5468973F10C2C77C30F5023E8C00F69F4DE7C9377EDFD5412D092000403F38E9E44CFF29E5387E642FF36300D593419EBF66AFC4D38D8EDBD770E0F452BFF94006C34023D136DB31FAEB0A8DECD9A42E57FFFCAF9FA1346D74DCBE96E77EF300CBB37BB4FD1E926424825A1B9588130E6034A073C9EB55FF651C2815E9EC4F486BDD02A463E06179693A4D3AC3D3360146E2B9090021C696D4DA1D1E63BF1B244D48CF7902924637DC1A639BA1123CA92D92FF54FAF484BF1F2E8927E71B3311A90692D7AFA49A9548E17E0B60FF6588BD80B5F02F7CDFB6667073B13236804D826697487FA90A0760B976614D0671B2C80C02CDA55C9A5DA646EE785EF43F231B8FC1842DE1792ED209A44B56B9E16500D09D3F2475291EAFB2BC525924F0F766EC1327D2B3F2EBF01C6F07653F439530E4EF223DA6ADDAA2B5D3BCEDDD638A2CD302694208248625AF73291FFF1E3878AC3E84B6BEAF6DB50F1B21F471003D0A82AA06F8472ED982A04D95277EC5816BA152D5AFAD3EE9C0280D9254AD98D509739B39F6AE9FA6D7777A93F1606F78668EDD9AF3B19DC125095826240B5C454A9F9B4BC7AA1E9450C2C28F4BF7EDF42694FCDD322AF6F3923A5F2BBB24112CF7892AC573E6F76C74DC6E516F52DB7BA26A716EBEE0911F46EAFA8E76BE3B5B65288E61D9E94D1E68ED7311DF59F3A0913F7A3E2B68344D43E30A4A3686787C45B0EC3834EBB4D96200F263758809B72A1BD6258DAB657B47B6186839E2008AF1F1F8F517AE879768FCBA45D78D2D065C56ACBC65C62663E57CA094FF128DA349EA5C8CAFA6BCEFCC3653C7CDC4FE3B9562584A6DDC16D3B148ECD555DF780C581367F454AA435A97DA7BE0FF3196A594CE1CA36DF89965D7C772B68328F9AB9DE76971D3F291CED9F26EEEE655C015C3CCE63E0080975C5467466A1182B157235E94DE0EB0205CD6FEB5497A34B5B02D1F7A0CA6365441563EC476E821755AA8125CAD24A97A2555A04DC5BD88F24AE518EC0DC3D1717B83AAD5CCBAC581F45E5CD4FD4D033579F8ECD75E82EF7D75EAFB469718B449F5B254961E337459DC3FBAEC9E84AC3EA3D39B5CC265E06CF6AA1E7990E9250C49B5AE14F30FD3AC1E3C015C006C0443207F67E06DFF4A4591388A79084E37DC7AA71F9CBC4EAFD5ECC93888AA12B08C2ECF5405B01C58068D0C2EDB468EDF970FBCBC6CF8FECDA01AF6A751069642601701160226B146B2CDFE8F9E2787BE0800DFD19C633C66E071FFF07856DDF1B47CD2EFEBDC0587E359BC3F89CCD9D4C0D67C57CEEE8FC2DB00568C2CE912B7B1A2E4847A537ACC8533E20022923FC9DEC9B5D3A5E48FE5277A4BA22D8F644FB70CD067D7D61ED5ECE7C0ACCB4DF27944FE5FA9A8C8897211F2F7055AC6C1DEF035733E26B55462C3F3A9BAAC8B00F1FE050080C1DE3041FE705F7B5E6EEFD90F4EDEA6E797DD56EB866EB8F598F71D79DB527FEAF1FB1ABD76F7687B93E6BB2AEDB31A1C46C960CF54CA678B0198450E579BFC0178025839B831B5CD78BED39BDCC17D12436D251BDEA2601C4036B91AB8CB828D4B8323570FB24E3E456E046789F32E240FE33C167DC6798013141A72A21B6E85C2B388E8B3D54EFAC1C9B3E4DCDBDA7545CB2A959D1CFA2EB9770BD5692855C95281367D9035B123BBF4187500A1C735671EFCF56A60679C1FEC0DEFBAD4912DCDEED1F67B64DFEAFCD1F4765A3E8AA86CB9E3872D5F29FFD580570157048B3D1800C836605C05ECC95F7190B568E3F55FB342C0E0BEAB7D9F06499228D9DAF1FC16B9D673A737798076869AEA4A82D6A6174912A85D253F37D81B3E1C1DB75FD46C2DA56F0ED349E7CDB184AD579D41D5BF6405A14BA3E3F6FB36FB4976FC513F387976592AFEA681489CE360EE45EA0C4D1970C2229177AF0E96703802D8277183B9E4CE16DA65BDE1258025824B95CCB144A8179BEA6FB037BC0564B17A8FE230E40FDFC719DAD5486969A7CAA54428E9CB3303CFEAA005E78FD345ABFA47C7ED1771C50CB39CDB431715F822D5525DB61A50D7AC04621000513F23768FB62F9A89D4438029B945E926B57DC3CD36B8A20ABF29E4CFE0FB0049F31189FCF17D493A9A25FD5D67F06F001D37B87D65D637C2CC2F36F118598DE796F6EEBAE1D633E53E5553C1C95F7CBC95DEF7E48FC213C01241070A4D9DC20750BA8FAB3F2C5212B4E208614AA8CF99A5F412F67F5CC221BD2B54632A46DD949024C007569B53082D57A737894A5C3923059E375921E2A2949E0C38213D6EAE79C2D2948A3E5B0DA81F9CBCCC06D4D8BE8D2E5B07302582E61780AC642149FCF0971FEB3768C5854E6F72D34C7876B8EDB024C96304E5FFA6E7518DEF558D69E0249FB625EAB54B575C31F840AA47722C140401F4EF73A0A01F9C7C54E011561C2EB67D59E7D6079E009608490208900C06ACD9E218D52F55DBF8063A075CBC7D25DB3E7A2EEB1E8690DC96CE49D2262D5F246584F46F527BD079806B0A1B8210AB0769FBFA3FFEC93F498409A14488D44D42DD6ADAF4D3B63AAC0A92048B2F5B47B17BB4FD31403AB8B326896FB0D42B14C8DF33BCBE847AFA497ADE5C67F55E5F57D0493E3A6E00C019B62BC17EEFE50C1BDA0D80D8FCE72140D26E7374DCBEECEDFF6C3814FB5F799D606D99B7F5852780154252037089031D608DF407D536BE81CE870FA924D52655E324C6621B251D7F835EC36DCFE8F53C3FDC4709A579F70FB1FCA6DC375D1F5883910C7DC910E210EB05B7BFF677FE4EA2BCDA44C5668C5E2569B2D9CE52290C1E3BFDB34FFDF9606F7836D81B864854E9B58B52612F12B87678A737893A7FE3B701207626484889B4671648FC773D099481F5313A6EBF6F62B67E3FAB5DB91CDB3DDABEA87D5FDE1E53C3FE1B0087EF08C799ED5FEC152CA45D5F78279012A10DFE12248960A737198F8EDB1B7CDFC31D2410EE18007E80B66E59EBFFD2FFF4BCCD89A02BACA56B33AECF28F7290EE000C9090079A63BA3E3F665DBB303C01D48AA6B130E30F497DE87A8749F02C1B9428226D52E1B161BA8940A4E289FB8EE3257072F8ACC5609AE3590DABC6B1BF5844346467F110EF686DF46531EDB75FC9CB1FFBE8A4E24786E51DFD8EAA278081774242CBB4475829700968F9FC01DAE6EE252148C530630EDBC3FFBB59702DCF7E4AF1846C7EDF7CDEF0600BC600E3FA4EB01537075A7A416B4EC27C81FCF9777DA9AAAD478E49E33E56E09F11FDF35E72E9B386FFC7A7422790FA6E4EDFB3055F5AAAB12E07D84E70A00E057B5EB68DA45498634DBB53FFC8D3F3E0348C62E6413AAE8E37FFB57CFB310372AF993DE5903113B3A71422849A9F9F915AB8BD2C0EBACD39B5CEAF426A7D8B6CC6FC009830B9136AADE6B26FD08CD81E8F9D21E64ED505CD5BBEAE40FC013C0B211A2CA459B65D363BB47DBEFF58393582AF3BDAF7EB0D49870AB02247BA3E3F686A9DB176D849A10BF900F921A69EB865B8FD0E6539210724269234B7CD9374A56CD20BE49CD03E8393C6FF269C134E8F5651A4712D5DF262D77E61891723F6DCAFB7569D0E1447891039344027FF11FFEC2A676CEE0ECA97FF7FF8909A26692C1AF6FB0CAF38C4E24E80949C2E9A57CD9E82A8E5EBB47DBEF8D8EDBE7B06DF13686B0D52DB70F36B880DEC05EFD5E35BC3AD8AB80E74437DCBAD2279EA2D247CB8F19713F8C8EDBD78CF81F076AAFF62D098644058A1A2C15D7CD3618BAAA60E8FB970659E97CD6331012DBCAFA4FAE9BDB8BDC46182816451EB206C2BF787411FED2B30F13C750359CF52EF018A6691A213276A2AFA0B9031E47F2CF97C903703275489837AC23BA261EA2D97FDC0F4E9E7631F3C9D37E4CFFFF1A06828E266D78F7C6C35400EF26B6CB2603C70F80D5B6C7F712C039D117C28430FC887EBC46BCFF25142F13F21799C13C21FDA16141F09C51F9DD31FB37E9AFC74CD24555A9C63E0E815EA163AEF2A2B3F22CC36E099234900FAE393AF28049FD024AEE90FC91E73E352AE29067E45A76FA4B8FD7DD46EEED9FFAFDB84CA896A3C1AD6D92192D4D93C0C91F004037DCFA3C98418CBF3349FD8BBF280DAEB8C8B5473FB9AA4DEC480430ABAF8F1EECA89346C77BB490FC0DF686D06A4F522B811814FAA63D8A6174DCDEE06632AB082F012C117490C79516A8A13A1AF8A26482C57B429C196780C40A1630B3ED89D57D66B07FC1FCDF208E042B6FBC2AC190E24B308BFFD7B2858391D47F5912DC2CF293D5F1E7254F925498780BBF5085C4D865F05224492197AC96551E4DB2CACB6493F26969F833350DA61FB808D33681BF2F8C8EDB1BBCEEB4BA80E9327A5FC0E30B7E845AC326D1A7E9F23A6CB0F162BC7BB41D64690A24ED8587475178096049C08F95C46F7B8ED9FBC5AB1258661521123820F1DA4810E358956348C04598CEF051521418E299207F92E3C02AC278C87E1B483DD962014A52111BF971B1E7C17454DA37A7BDDCFBFC80690F56BBC6A228486031DCCA420626DB20DB0FA6EB1A73692695C4E27F7ABCA9A4C77888BF08D3092206F3BEC855885CE209907AD75F90F26FB254B42CF076933521B449932502DE0DB7A2DDA3ED84E73DEDB3D935957C6365C51DF568163C012C019DDEE4017ECCBB47DB3B661DC7CD68D24E7510A3E376EBCB4F7E26FA937FDC8FFF93731BE61709DC1910AF3E6AD8CFC4D321B9FE22AA827EEEBFFFC3C87424CF1135F2295125AFDC478F759757742FA93939919354A3343D4D2791942224C316F6A56C64492F34A947D5C48F4B69E92FC04CE5DBE94D4EC9F11F4912764EF65640F58B138478D2F3D7FF8B37A3C1DE30D4DAAB8DBCCC2B15FDE57F34B991277D13207D17A71FC5DAE1549BB24D28A4B64C817D378D09B888C989893050D90A441EF58427800581366586F45D7CF3E3ED68B03784C1DE30C4D977AB3D497CE4A802FE9DF37FDAFA17D77F9187FB48D878A0D48F4BB038B131FF0300B8CBCA37FED9FFECEFA187E926C96713A6C180C79C5C1872486DE51A076E07E502CDE1C1663786FF2D2AB544DE4D201954EDA4493634DBB132D1252BEA64BD03809907E6EED176DBD854C1606FF8491A1E86E62311FD32CBBF6860E400EC1BFEB7FFF15B2D00D8E46D398BDCD3FDA2EFF59FFFFDF65B45AE6B0ABAE156D4E94D6E9E7BE651FC1F603A9936FBA9F5A9F9F5B8CF279966C2122F5B58C90310605F6FECCCC7366D89C76AC213404708C4E8D73BBDC929AA9CDEBDF1F02EC04C8A47562110A5403410EFEED17658449D4706CA3300D8C1FC90147EFBAFBE9708FC4BEE790ED8CA2326DD391244B9912822F9A31D7191812F4B6262931CD60DDC21824B2104229592349580581D46CA739F0C9477F1BBA318EC0D4FE80400E3A949F65BEC196AFD4E1C90F896012094026303B8077B6E3A292E13BC2E768FB6AF024CA3391087A31D93EE7C2A0305F89D3153A1C066E75A32FAB8431DCA9A2E04F0708727808E20AA16E8F426A79FFDDA4B57810C54BB47DB3BE65C144D5AD1EED176609B796307DDE94DA27E70B2217DEC598313AADE0C714B4906513240EC085B207893F1B021D819509500EF14EAA63E46D5B64B0894EE747508FA3FB2BD2B9B9A9012479BD450B2C1AA1B8AB6C17924464A9E52FDBC44CAF10923794F24181DB75FA4C730FC89EDB916A966AB0A7CF2F8B9B72E0679DAB1261D2D03BFFC8FF24BE4EB0AAC1B12A8F92AAE412D99804879507227104B6BC8A52A60247F7CEC48D91D7BAC263C01CC80145EE5B35F7B69F37B5FFD003EF7D6C5C0D8FBC531C746C7ED56AB1DA5EC8CF8878D86EAA816963E7C9741C9D6518C8EDBE7BAE1D663ECA48C773092CD8746FAF8844A08511D60B2D8245285F74C7D20297C85FD5F2A8C543326B71952CCF32EF53CD81B22416FF1E8FC1C1291A024A3EEB666D8062547160A6900CB522F96512EDC0798DA47012406E214A4490027AA757F2779119CFF37303A6EB7BEF5D45095F269EFC9260D9C07FFFCEF373F8C069788A3AA9412360E5B3DD24995F49D153163B9B70357F25E63CC8378A8298F3582278002486CBDD3D171FB1A25470000BF73FE4F5BA3E376EBDD1B0F63C2615B6D00C1254FD45B11210D52745F1BB02CB3F8582581AA0BD389BD6854D84F63F9697C39A55E2220A410D5C65857D2358B02277C2E2A754A2E067BC38783BDE15937DC425B4ED83DDAFE80E4778E5C7783E6417F115C3288C78A3EDF02F0AF7147934268DE8F45A516DD70EB1917A9A346D66980E3C1DEF0A1CDCE8FDF83DB5F3519F8ED854FFE0A8D157AC9D5FBDFD4C17757A12EAA006D273891C673D244338BFC716921C0FFCFDEDBC64876A5E7614FDD6AF670645B64B412B598DA6DB6868EC944F9D8D4903566B7493A829701E269AD3C143B40A028C9BF5D2200DB9950DEFC9122FF8829D11DB51383BB0E90D80882C06A6B26BB6AC23F8689007231454D895312027F0C21CFA4B7C162B85C6BCD9504CF4CB3EA567ED4796FBFF5D6FB9E7B6ED5ADAA5BD5F7010A753FCE3D5FF7DC73DEF37E9E6C6638673BCBFBA8B7F056685A428D459D62AA4285D8D097980D4A3F800CE4BBCF7DD444DC715F7C439C05C1E14982CED3354AA371854877843880BC1E3E057CF92FEB21CB49AB4F282EFCE6FFD6FFF8BD5F48CEB9681918DAB51EBBFB335528AE8DE1B95D72E8008CF866E47E187D6DB2DE4FC8BB9D07B67B6B8FEC578F7EA871F27CE2AB50A2D053EEEDFDEAD153C63DF55BB1C63B902C9C7F402A18EC5A95360159B9EA8B08E60B907097FB214DC3B2F64B1E48FBA60929845F323F515AED5B62F3E8D39DBDE8D6B4B8EB4E8527D11B0F519D29B17C2839800C8E254EDC236E394BC61A0006C486B2203D2C172F3E61481DB3CDDD751EC43EB11CF3E99349C8854D3EA7ED3479DDB47CF835BE1BBCF59FFC62C5F5C1077CC220BD3BF6E8AAF3659870097D6DC803C4E9F04D60C47D955C25D937CFBEFE64C20D25D139F3C3A8E53B122D44EBCFA2719BF6876356BFC68ECD8825D6B8CAD2368BF893B0CA920BE2E6EEFA2A117FECDB5AE57ED57CE2F9658024FEC84F244FE3793F3D8BA8D936E2E08662D1F5FFE43C99757324EEAFC8EF441E933A919BC79A328D0FED06B2F6F58FF39392F83B9D28094087DA4E7C958B7A3777D7EFD30749041FA5EDEC45438AEF69223383E5CFD39D955C184B87504E1A6962327E8FD7372D9FFDEA518529D17331C78FB93EA0DD6AC275A39F24FAA64D043A9D30D265B9A6A5D9AF1E9DD5F43999C8F778BF7A54891E7AC09F09D2FDD3C489FC7DA52D0EF3C67EF5E80DB16151C55A3E4E611EED93E3D6FA06E89DC974DAF7E8DBF82C11CECB0B5A5B0D51F88A3687B87B41C4BA068DF85B3482907FD782EB3C92868ED3F2E47DCDF3A4B989D482B87A83F63D4AD45B182A3B8D20741B8432BCDC29C7A9170193D8D71DF7311061AE6EEEAEBFBD5F3D7A51A6D7C4528EBBF42206E1945245657C02D144C01AACC9455BF4D20852597F2D4F9FC8B8A6849AE322586A17BBD7C720CAC9B4BCD83FC0E09D6DDDB872782077B3CED26D850807C3DAAEC7EB0F64138B65DD0C1415966A8125E6CD22FED5CA91C4A4250296D738E8797AB7DA3345EFF749C03880436A0ACAFBEB71822FEDBD2E739FA561DB855CB324057CACD1FD94FCCCB9D6E547F34FAFC342F859F9B51BE873A24F9EB3EBF7EA2D24719D1DA1F9A50E8B1D5D72FF4E2F4E2D01581B8450BA45C4031CE1078C7E10A16C7FED5CCB432E54BE0959E3B64862422BD39AB8AC3A5A69E4221DBA28D44EE21253FFE63ED16CF7D6EEED3B23164700F430F081B64AC7103A9CFFC1DFF819FCFEAFFD4E427807BEB377F7AB472FA4D4458D2BEC4B53341863E60338172C1CA10456483F589C2ADF7B2191190095E8E3E97C9CB07109D822C02DE65F011BE7DBBDB58FF7AB479FB7DA2ED003901A7F761C10B76FD1AD80B58D0A396C263503DF6679CCBC470879CAD722F408C4F9F3A521947A7F254E2D014848331EF01160D6394716F19FC5114923E6B4E7B4BC797B78FBB4FCE43D994F081811C8C5E7D350682622330989C7B882601336E0DEF58D2B8777C99D08C1D7B66D23083B2742D93593ABC5EF676EE81421DEFBBDFDEAD159AB1DBECD02CF2B8DCB67719A2D82ADB6135FD8DC5D7F5F19E743DCDB90CD934CBBC87084E06560D43549DA7C426958763D6D9C9718DDC423C530CCCA43E1261ED3A6953B82CE02220CE5BF969638C6A5F14789534B00127162DDCFCAA508E19AB11D5E4208F976DE2144A68F98CB9A97757F1202A6B613DFA43893440CE639E1D476E2076EF21CB9C7C4EB1FDCB872F853948E384637AE1C669EC02DA471CC005B57AD28F08DDF342E1F1D5B9B88908D0C1DFBEAC7446500702C5CC1240B29F37739522F8B985F3438C2EF12581C608BB3ADC1230D20F1E7A5FDEA5166F7228B0EB9A993FD78E3CA213A7B51E5E5CFD6FB95280630BEBA486D27BE49464C37AE1CB600341422BEB35F3DAA0140BB81D7EA2DBCE18E87EAA511801A21C8094077EE5D0B4B2C2F4EA511081FF02284920A6D2295D7F8391D6B13B17423A34D1CDBBDB5EB964851FEF8731631C89FB5DA23F39079C936B9E3E7AC7C587B29DE70E27094AC8B5DF48E205F651C2F7FF678EC9EBF09E00F88A823C2CEF5718BDAB15F3D7A6A73773D76045FD23E1E2982B791AE85D6C7A5A5D07F4FF1BEE6FF1A9193A59CBCC1DFA9BCAE1110721CC83E4B7BD61AB3923074BF7BB27EEE9D713DCD559E57672F3A4369ACF2DC758D93FB554F571512520F9720FB549B2F94F1C83D11ACB8FF5347FC01038331C0DEA891770072B81D32AF8AFC93FC687E747358C3485F63A7BF4E07F5162A9A1EA0240CE9BCB613DF7173E679774E3A8025F157308C61D53D164E2D0710D0773EBE5D6FA87855126FEEA3FBF1CDDDF5F33EE5618BE8B344655AFD42448F1677535BB843B83F5976BFDC7DCCB846214CF729E104C11103521F2C84C39A267ACC0A0F61AF118073E346F9384516278FEEF1E7B5FCB4FEE7F95A75329E4B8C17F8F3E4EF4F10855E3DD790EF68D12036B0C72E0250507F1396A52FF28635574A494E963CE475C7D90ECA8B73F4342E1FD70194DC3FE6B4BA8793CDD3356B235162B6D00C7B80D17799A6079A05A7920024BDBF8098B15E0281902686650627B4E30A52B656269F11D184106D0DE96E696D486B634AF9B92DA0E358A091F5317F7FDC10401207DACE362B813B2EAC72D871174E013FCF7253EAF4DC7EF5E83BEEF863003F29D3F8EA631184DA731A0192C6F9D4D28A323F01F013FB03D159BF936241EF236E65DE8B0839AF00A3734BC89C55428732BFFA2CD62D1DE121C7E7727DF06D9078FE1E2BDF243F8B40A073B6F92EF5FE1604598C7AC6C1A9140113E72944FC0B0C8BBED2D230514B2252E1C1B5B908923FABFD2BC4D790B181224E4B25FED21644519EBA806AF742C51FC030C7C2714743F115F23D48FDC8397E3CDFCDDDF5D5504E13FD6769830F52FC26AFB9FF9973FD18F1D7DFAF1E7D9ED565484C1D321EAD63D987726193FDAC8CE1A4BF5CBA0F581E8FDDB87278CCFC730EE5A3D5495EB3EABDA0D897A1C87C049F31E77C92D7B85F3658DF0771FF68FCB9FEAB1A793CC5D2A863507E23320D304CDCD1BF4614CAFB8CF8A3108125F15750D0FBE2E7C0E8BBCF13A78A03E83E826F03B8DCD98B2A7FED87FF7EFCD09FFD57FFDFFEB08E0580C1CE0D4C993F6D47ADA56113C63500973777D7EFDFB872F830309935EC249C0B1F572FB4AC10EE8E96676D27BE00609FFBA042061104E71A1211008CFAE42258E2485F5B0C91E63BFB8A1B98EDDEDAF57DC557A4F2BCD95F92BB10D20F79200FB1605ADD2D312C9DFB0841AB3C1295697DFBF267EBFD7FF4D061AA7B9F6583B5A8A78D3B9E7699FB671258E35513018BB9E6ABFBD5A36F2AD7CDFCA4F1878634C30F7E6D6B233E06B07AD08C401C4059E712C5828FA807F2E7049E3602B0CFC4862322429FD8CE074B5CB55F3D7ACC959B846AA280DB7928DE5A628780E75245BBDAE29E95806269D4F8AF69EF83A763A77765982BABDE542F595759DF903664C1B610EF16510C19D21721CF6B6DF48D9149EA4C16DFC4EDA505936F06ACF6E4517ED1E08CA9AA60DC27AD1F7C792C5B9FE409DF068EA0CC91DE39599B6B42C6A8A5EF1762F99BA7CE5889E962E6EFAEDFEF9F8ADFB9577B0FCEBDDAEB9F7BB5D7D7EEBFDCFD629FFEE9989FCBEBD6B39EF2FBBEF2953C6F8FDBD697BB5FFCF8E5EE175F0B48773DA42FD2FA6646EF2FE93B5EEEB9577BDD73AFF61EC87AB9FF4E96772DEFBBE34F32F67D571B0B5A99B3EA3B5F5DE47BCE5A275FFAB4B68E53D6B9577B7D595FBAAE953D8FFE9EC5EFDCABBD0B6EECD3BCD27DB9FBC57B56DF1BBFEEBCDB51B45FCA1C7E93FADC9DF7439EB3D2A48DE17EBF8F5BCFF4FBB79EE9DFE3E7EC7A5F9ED3F1B9577B5D59C7F257EC1FBD3FF93EB5F79B5799A78E0308A8913EAE03F8B24F97C9421A27C7F2D5355603A684504EE238E2CA947EE196BC327C1CE76E245CBFEDDE5AF7C695C3EF3A3132F7A135125DC5E244110CCE4F5A60080000200049444154ED5445B2BEFCB77B6BAFED578FDEC8BB4C5F1DE85A9A1A405A9AB4B2C6ABE970F95407A68795F801F4BDCB49CA2E3A6A3B71FF47CFDFFCEC8FEF5E7C481347FA74024F43FF6445C85C90854B1E226920A3366EC8C6F3F6598072AEDFD6467CF7A0199DDFDA887BCE197E9FC4BF3976518929C172E303D8063E9362E98D40C8E79C86EDDEDA6D47FCBCA82D88FC23B48EB77B27C61F463197B868B368C41F306C9020170C6A1F5DE7FFDA3D7EEEF256DBDBD98B5E22631CE690F4A6FB7FD0D98BCE74F6A295675F7F1200CEB3C973A5B3173DB1DD5BEB4BE26FBF7A5471FA96BCFE9FF0BA507D32EA025E0FE94709D92F5AFEE2DED4883FF95EA82EFC5FBE639E2E0BA1308E6E9FEF3ECFA3B61353DF25AE7F280FADBFB5762F0B4885E28FEF5E7C68E38D9FCA6CBC536214EEFBBC272EF78093B1C49DCEFBC697369718F30E45271A4923177CCD4D08006C6DC4C707CD88221B550180E9FE996B6089624013DF733F8F52BF33AF724F0D07500B47B63D1CF0FB3E808701BFDE18CF3364074D1FDFA23ADBB476BF80DF90C1E2C019DC40D537A0546ECFCA954D6B8B763D6FAE481AD771DA5C181FB7CFF72EF328D32A4349AFEA8872D476E23BDC8FA6D3FDBB43E1FCB4368AEFDB5B874503972C70D71E96BE9AF67DA20CFB9660BBB7F61A80D7E0DC0CF938A8A477EA4E559D64A38C118EA01557D882E52B6E6B231E0A87F8AD6605CFB42A4B31D64F2B7C9CC0BCB0F404208FF50B0C117F49781DEB23973BE8142E91B9704AE293C2A3E5D2C019C1D73EABFF429F97FDF3E23FFB4FFBD7FFEDFFC314B98809F42E585823EB192B9FB47AE7813411D2AC4471163128C67562BC3446FEA9AA04E3B6959E93BE347DCF847E9F8B082BCEB6AF4F7C44F2B4EBBB48485B0F00A01F47A84471A6F942E67BE3CAE15DE6114135826B37701DC0CF40B899E19CA0AD8DF8E98366F43E5D77CF95861F0B0ACD01F4D4FC01CE5BF171DA3F9FF107195A58860E3E63880CE5E7A6B059949FD63F63F4CB4D769C28B3FFD58F5E18329639F76AEF81562E3F9686012C7D97A7CFC3E861923EF319D4CCEA9D59F5C9FAFE6650DFDBEC587D6F5C797EDEFD3B8F9F36AF790C3E927EB1DEBFBB9E6A3C36EDDFD6FF30BF39D39ACBC6312A92DF9676CEAFFFD62BEF24F7A5A2BF34F6A07991DE7F9E8601E56FB6BF5BCFF455634CFEBEC5B56E5EEF7CE97500B55D95139F60BF7AF49425AE72F74D6E89A52FC5CAB8C962DE06399C2E1AB8FE9CA5DF27B94A56BFC873E28092636700BD677FED2FF47FFFD77E67A80EA4E4AF8139C16D39FDBF636347DEE3F5903A39BC6E5A3BF384A503A89537691D64BEDAFB2BAA7E181709F377C4F5AFE09CAD4B1F9069FDB63D70D3B3B010CED37BC2213100FD5D6ADFA64C374D3DD450FCF65F1FE6E6FFEC6FCC6EEED4748415CEDD716D27EEDFB872781CF28DD2F72EC6F15D96E43E00FCE6FFF80BC9054DCCCB458207CD68955FCF5B37AC44FEA8EDC40F343AA0DEC2902F59ED3D0AC7DE2B797178979A0064FA77431DD5D98B5E920BA326B2D4264AFA90F9B93109BC02C7B6EFEC4595221A7FA461BF7AF4182D96B2DD1C5C8468F50B9DFFFC833F1F6FF7D6BA4414D7FEF2DF038016806AF7DE8F523FF5587FBD2D45A6540EE9CD6CEEAE379C0ED41951E60AFF176D1B1127A7B5731C581B08D95F3CED766FAD2B88C4CC048B46E82AE57889F4A263DF8E8C9344E131C4790B2FF2648AFD5500773991A18D673AA6E7F31CE3D3862408A705FAEEE4DAA024A54DE96A5A1F5A7971BDC1FF7AE3BB0FBBC39E8CE4018C8AFDB636626C6DC4004E0C3DB474250A87552061080D19E6B41BE86AD15D7C06217960697500296EAC3B4EF486F8BD34C5780DA193666D27BEC3F43BAE01B88C0161B3308BCFB6110183DD37DD2488DDEE350097C8892F90BC9363A6C7F43480F70198911E2C0577BA26CB1775BD07E0614BC15BD3F31CA3CBCC7EB2EAEAA9AFECD34BFBD5A3B7D2CAF1E9AECA3A58EFAF48E075BF71E5F098C690681329C027865CC078465B8B02B780AC02A3D128007DB331F34A66C4CFFE46DC9F15B19706C9A5E7FDC71D92A7E5D36EA0FBFA7B6BD5FDEA51A5F597EEF7FFF63B7F0137AE1C5EDBDC5DBF0C00FFCD0B7F8895E38190CA8AF5CB17FEAD8D1807CD13BE4D49F42D0E4223B158915D342EAFE6F83B13E62DFF9EE68F9C04873A80A6FF34FD99C0B22F50D9EEFC41E8B38BF2B3FA863B99757DC0FB614817865DF73A2EF5E93159E9D2DEB12FCD34FA4A2B2B4D674BEB53259FEB229DFA4EACFA2875BD67DD9BF78FEBFBF163EB5D6A3AA1CBF03BF76AAFFFD37FEFBAFA0E2D5DD9A2EA7BCEF3F772F78BCF69FDF772F78B9F587AA434F6E49C2EF556AD6F9EE9F1D171322ECFBDDABB10E210985F3BF76AEFEABCFBB1FCF97F59D67FCBC977E9083A238405B01AFACD23C24DE0E34419E55E00D084B2435F3684724C295CD78D2B873D00E09C508D43C639B89C7B47E96F5C39EC6DEEAE575D7ED5903EB6EA3A0B6B5136D63EDEAF1E7D3ECD5A533C93EAA646A6D5FE65198BC0010486DE5BCFBDF721BD50E3FB7C1BC2B9FB3CF0CAA3E8BFF969BE5C1ACEFD0386AD7F35AEA77C7EDE7D12827971037DDF8D9B97BA6EDE0190E89F7EB05F3D7AAADDC0BD7A0B67DB0DF4FF68ED0E3E77F4440F40F5F5F7D63E02708EF2204E1E0F0B2A393BCEAFDF2AFF078BEB0BD896BE548FE9F4508971E138803D0C2481A96EE1346E9FEFFA38581871E498F82E13C39AC604805797CFAB4FA5A1B317DD02704653F85C3668A2113ABF71E510DBBBD4A787004608BFE700BC4BF924FDB5076CEEAE5FDEEE81F49ACE72BDB5FDEA51057B406DE7B0BFB9BB5EF5BD0FFEEE2CE25DA699AC477484105C9621087F26A4AD72F1F2B5B9C87A7F4A3F55E10C7AB4F609CC9DF80BC12B8FE29D373F85A966110A6D8360A9042C02E644FC5DA2638DF87BFBE7EFF43BBFF544A5B673D83F684678FDBD357CFDD923D45B786ABBB7766FBF35D0497DFDBD357A8C980FE788F0436B706173771DEDC6511F1B27E553040FB7C0AF3A3DBFD57A0B950EA2216310D209D388C092F82B34AA18186E752D75309FF36FED7C1211F0527300015DEE2E2749C04F00B2FBA48CEF253A5CB949DA65E400BABEA83AC2ED0137C010FA7F80D37D4CD1ABE962E010758450974413119A7C17AE703E46FC9BC9FA69C4D2B416494D4F92D7456BA74C27F3F11DCBF22DDDC045200A3270E87BFBCEF17311DAF5CAA383053B4F0EA0164211C3A11267EEEC7C1C1449DF8FA3DD409F117044E00DAD0D5F7FF608C0C01883FCBA1E34A306118412949FF6AD537A5AC06B3B71F7A01955E91A710B8113830F2B1C5CBE3D51222FD476E20B9DBDE896A5B7ABC167E82139C02501684058CA55E1C4C0726797451C97A16C6EF1B5B41F2713C77E0EC0A72E52C32FDDB872F8EBD2316D9A01067012FDC312658A72E9D434AED108BCB43ACC03A1223CABDE6904A04CBF08B0DA44DC621EFB793E359C3D9C0B9886B89C3AFED3AE9D264811A9DB50FEEED79F3D7AFEF5F7D6B8DACA838366B40A0C71F5000C36B6DC1803385998E5F777E3CA21BEFDBB7D44719587665BA5E739A1D7D98BBCEE5C4A426F31E1181CDF0670D9470FB41BE8D65B03C9AC46E0E5ED107AA9DDC06040F4AD02A86EBC310893C8456972129462DE3C3843CB48FC918F4322729D3B964F81A4BDBFAEB55B4C8CCFCBEB4EBF06E4638B3F4BEF8271168F5D19D7C0FCFCC9F2B868D7A7EB374B51689A2E22136D5E4F1BA7322F492865515D281A787FF018CFDBBD35D2271D4A4FE3A32862ED571E459F7EFCDA84D95E0086E7158DF8E37DA06D2226ACC34243127F0056BFFEECD1F3C4696B37D077636C756B234E88BFAF3F7B84AF3F7B64127FB59DB8DF6EA04FE90807CD08BF7EE3A792BC0F9AD1AA7C9EA02DF024EE9D861B9012B381FB462F6310C3DC8446FCC1AD6FFCBD733741938C87A5E6004ABCFCD9E371F3B5FFF7B3102EE0A49364A8C9F7A28238753FFFE089DE7B7FE30FA3ACA1B938420D16E8982B626731FEB0C4FEF3128D595CCE1071B14416CEE6A270805C3BBE06E01B403AB79ED2B0676742EC6431F498C428C471FF2E60B0B1BD86146E0230D0B3DDAF1E7D679CF29615B4B83A63BDF789EB46A2DEAF3F7B0472B742841DD7F90300E98E85E0B9DE23D12E37E878FDBDB52135196E14329350602566867168829071404422118F59B0B404A0F40368898B7C44074FA33DAB94790140932C7C968D08D4E28F4204434FD33F93E772C17622E4A167E9BEA233988B7EA54F076FD6B0FAC58245302EBAD88F743843376A457A8744E4BDF228BA6F7E8A15CEF59B541FD08A6D6E61DE7D5174301DBBE38366B44ADC3E3E0F11D147E2E1108E8BA50F48F7888BE816F52E8FEE90A7956789E2407EBB30E23F03A3F180E958BB37C9F8585A02504388EE94C565089D44B3287A2E02C8A1B53B4E06B0537EEE07887A4DEE14C78D2B872D003F0EE03CE59F52AF20E2DA479016815820F8F4DD2CE38D34A38E908DCB766FEDDEBE88A8314FF0FAA4713E2D6EDFB66200342D109127AE110138620432A95B1836BF5C037029C49DC422E0677F23EEFEF65F9FAD937CBE89D4165C3AE7C61AC03071E70BC12609462DEDD6469C10013E5D2FAE1B566271918529A419FBF0FB7958032FBB0E6082AFFCE0E9914595E95AA97A439AFE950FCE42EF4376BE0CD4F517B8318DD03DA205F71EEFCB34430660B46F3777D71B00BEE08E93E72C82312B71CD7501E99F1352F3D61BD3F4FC649DE598E5E943C4E7DBBDB54794720B43FC01C3F549D361F488BAABB3789FAF3C8A8EE3F0752DDD3E22F672B408A6CDE54B8E1BFF20ED0182F6FE8B8259137F4E172F99CF48FF8FF0FA7B6B78FDBD35904E1F07F9320586E778AEAB47C41F1F87B59DF8A65CA03901EF5BBC4BE26FF1E1361CC7EE38687E922101AD18D1E372024F0507B0B6135F75A1777A37AE1C5665F078C2A41C211291BA63953BB628E0A1ECB476FCFC833F1FFFD6997F11016116A89ABE9DBCCF432CF9FA2FCB2ECAE2FAFAEA366FF80C544274FC161DAE7D1FEC578F9EF27101E7A5BB694172FE08748DFF8F933FE3C09BA2A31261503871437175793AE2F8D13FE9F00148F4FA00E0F5F7D63EF8FAB3474F02C3E23A290E66C466EFA01955B532791E2596073C04AA2F9DC5FDD342C4D1F138F5597A0290883FB76BFBEEE6EEFAF910FDAA49161446DD177AA2E67A92FC1A069CB8068979F97DC6F5A3EB49FCD53451AF4F2F8D8E659403081F82A122769F4145D1083E09D6776FEF578F5E4C13F5F26BCB461C0618C0BCBD5F3D7A91D26AA2F15942E3044AA270420290E21E2FA57FD159438A7BF93917E1725F7E96288E44C552444CF7686C926F415E07AE0B38CDF696982FB2BA87B3C6671EFA7FC0921380DBBDB5CE7EF5A896A6486EDDCBBA80702389224DCEE488D2B8C7B9965D67899670D8B4B6F814EED3886ACDE255A6732E6056A58367479C5E76A741BEFF34BD398B009CA5EED8A40825768A4CE85A48D317E5B871E5F05A672F7A699E449F059F2EE038B0364793E4799A418BA9C6914BD3EB034E1CD23FF8E16378FF6FB6EE6EEEAE9F978EA339B1474E9E39B7B174E27CFAC0D7598D4E901B019F7E2ADD57FC057E526FE1B1B4BA2CB50EE07EF5A846C737AE1C3ECD1715CBCF9C964F067DA2D522EAFD392FE477E8DC115284D5DA4EDC7796D2BFC39FB30628E966497D345AB835DD2D8D4894C4F68D2B872D4AD7D98B2A8CE347ED78891D9B0B9F2C2BE4FDB9BACF6D31B5F4B3B4BEE2449DA6A7BAE85C40A9FBC8AFCB6B839081B6CFBB69E39547D1B5EE71824F130D4F8056672FAA94C4DF78903A5307CD0807CD489D53B85E1FE7E6B971B60A00671EF90407CDE83C71FDDA0DDCE3CFD371672F5AD9DA88B1F1C6F984482C89BFD307CE64D1A071812581A7F9841404612AF1072C390148D8AF1E553A7BD1ADEDDE5A3FFEEC0C2D2CABFCFE766FAD7FE3CAE1D374CE8D0342B811825019225CC68173B67CC1B8A75E57D275FF9DFFF97AD771F99ED8EEAD7DEC6E5D160390E2ABBE48173A7B5145EA4A86105394463352905C1AB9A077F6A28BD46F449472113ADDE34429276C2534230AFE5F24EC578F7E685C5789A194BC4ED5A222FA48750A3E2D9005B074F84C90BA7F9310819DBDE88C23FC2E4E52E7D30AA950CF174F6904A23C7B89D27FFDD923EC578F2ADC4D0C197E385171A212030CE69BDA4EFC60BBB7D63F6846F79BAFDD45BB8185E3CC97C807E34808A5D3673E96659A2C9B8AA5270069B1FF6B7FF2EFFEEBFDEA51E5BDAF7F30E41790637377FD7DFE5CDC5D4D3E521E89808388312254E8C54ADDBFDA4E7CC147B81157CE397B05802F39CE5D97A52102E81623944608208AD2F1CC7FF774F55FFDB3BF5225B1F48D2B873F49D136A84CCE49701355DF45E378A04D509230E6FD65B5CD8221B6FB90F7A520A4B90F25B8344FC86B5639BC0D1A77C9A57D27BC05F3C169593834DD47659CF504077A6E5C3122F02C222F0F22B0C4F89056945B1BF131E702F2C595D25254907A0B6F49EE0B45A2216B619A577819344F1E34A3EA8D2B87D8DA881FDEDC5D2F0D3C4E299CF87744B79EA3DDC0C7FC5C72A1E5D8F17105D3B0D40420E7DE3DF4233F3C0B0C5C8C48DD32B9A8386209D1CA71F2A2A4B104C39BB59DF8AA23D4AEF117CB88390078539441041C117897DCFF9784AE4F95B86160E25AE69099BB692125D3D5CE5E54F9D6A36DCE11B9E6DAB1426D27F1D9766FADDFD98B2A145ECDED6EB9AE914AE059569969E9B8A85849FE383F61FA89573188A588DA4EDCF57D40299CBEB7ADE75C1B5EF0DD2F317D4842CFA7B3AB117CF3E2F0725D3FCD129844C2C22FE03D94982968A1D40CF41C27EF3E9D93F147BB81FE77FEA3EF0F8D491EF1E3F5F7D6405C3E4D6AF4FA7B6B55381720EE9EA93A50627911A2B6516FE1F36961DE6468404D141C82A53502D9EEAD5D07F065FAD8F84291B6403842E80C71C368A7B7B9BB8EE33FF95CFF5B8FFE7EC41D24136A3B710C009DBD2872C79F3102E60E9893636203F37F7E8FF2248E22BBD673D7575EFE6CBDDF7CED2ED8F52A7F86DAFAD99FFE185ABFD2BE2BEBAB19C738BDBBAB5CB15EE02332ACD18C66D244E621AE3B5C5B7BACAD67C4BDA1BED1E033FAD0384B007A8B6200B2CC701CD8E701DB28CB67F15C44A397499D3F97C81F34C75124102B362F37E8D0BC09B0FC86A24D599BE32C2EAC4A2C2F881E081D079A93706034245C56C3A2A52400B78D680274AE11025A3A1E0EC8114643C487C685EAEC45957FEBEFFC6EFF9FBFFA17930FDEE74E85D2B843E2D605858BA14987D78D62F2F2F8924AFF8C58906A849C75EE83B5487BFAFFFE3E73FE4BDC4FEDC3A8894824561DACBA178D3028A163BBB7760FC2B5103FB6883D97EEFB00FE791138B992F02B09C1624173E7A22DA2DAA682CF3137AE1CDE753AD6E69C79E3CAE1F1E6EEFA6A68FCF212CB0DCDD386CF5B07304A0496A1E002A11021C90223AE8F102DF4A2881024A2502C3CF76E5C394CF263045FC29553EE8D7002E95A68BB98DB19FABF93361159C4AFB6BBB58838AD6F7D7D69D5C1D3AEBE20906F02B840C46C9A12ADAFAC45B7905D6658DC3B6DF3E1C694B9D12B1A4E1BF157C4F6B61BE80248DCBC6C6DC4770F9AD179C901948B2CCF43632010B479AEB6135F20DDF292F82BC191D52720818F63766D2C4270A97500017D51D917E1AFB8CE91F2811F732EA013091FF30FBD1F470F33E38F44BFC3112CD79CA14585117AC73C3DFD87123584CE5E74C6E9EF91D1C413544FA963A7193DF0092B4DEF8A1B7FF0B49A95AAECCB506E22774FE3F4FCC8E8E522805E1622398D90282AA1709AC1C7181014552621FE349D52A706323748E7CFA749DFAF68C41F3070AFC117498DF803740B4B77BD6B6D886F5C394C16743E1689A3E3243214062CC88B4389E5C5B85E42DCB8ACD2B17469648D5D0B4BCB01B4766A6962242D1FFE2C39FFE47E04297C99AF0EDCE1B2AF9E6922545927ED9EA6FBA6F4C1C7007E526B73880E9F5696D56759B9330A07F00E802F382E679771026F5A2E317C752BC5C2C5C5B6D3D74D5339C8CA559E378AC8113BCDA045F2EF3F1EE3BFFC6E34E416C6E2AC58A26026293A86535F91733F9C637BD22F9F51334B2C002CDA8043D3016463F603002321084338824B4B00120C7DB72E80AA4F1C9A26DAE4CF69CFDEB872D8DADC5D6F6879C87A595C329FF85242E49DE8CA59795ABA79241EF711A23E515D48DFC8FA72701D4085100CF29FE413CDF8EA5FA2384821007B9C482CDF6571B048842E71610E9A51E2F14089A830B4905A73283106E8DCAD014F93F8B71F4768BE76B71401970090708113B773E3848593D734A411814B2702D6C4B98A8868C49F5C1A4781F2D588C31B570E47CAEAEC4517B978944F1ADB27CAEA5E0E9914B96A622E83E0F2BAC6B0B862EE59AF4E959800EFC9B4DBBDB57B22BF116EA46FC12667B7C2FFE11DEE20DA7A56F6892C5F13571709BEA812A711DA7B72D7AA8B44FC9DA6F7BA287E0E6B3BF15547F8ADCA7B163750038D3F9202917A9013F93681C1FA5089FC8EA64B9C3E70D5B0D0672CEEB4FBEFF174226D47CB6FE9388092D343D77DE2402B0F0E41687DFFC695C31F03506556B8091BD7A5B90FC749B3B86DBEFAF3F4FC19AB7DB2AE3ED1B295B72FAD4FB49C2606B6EA68DDABB198BF8A1B9C6B1E9F8C430821628B001FD76491382A9320645CCBFBC4CDD7363C254A58700620AD8366944868D25C6C848024149AF8174C3C9C4B234A2C3CB8D5AF5BDF5ABE283F3CBE2FB70296E9B258072F050770BBB7F689FB1FE1304962867308C12866717DC8904259947E627377BD4A3E02B77B2786182CDDC32CBD2942161CCBDB927326EBEE232243C4B2B23D96D856A695DC33EBDFC7ADB4EAA8E0321D3827DB0F98B1CC10F1B7DD5BEBB0E3A177AC715ED308D359823B0EE6E71CA784F8BB677C6709AC715F127F25B2C22D8C1FF26B96FE9FF66F81D4568821400EFB1D97E70C661CA6B0C4FC601811C96BEFB3200FF0117F00C0893FE59E1A25240D4B4100EE578F1E73FF2A41240942767D45A4FD1E4F2F89453ABE71E5B0E7FE13F7309CE89079689C3B7ECEEAF7649AF83A4D97CD221C659D00BCABF54DDAB10F4639DE3CB685477C661DD57313E74B2CEAC9880878BF7A54936D979CC8907ACC03A781B80BC1BEB0CA77D782F55F4B141F45130BF38DE4D6469C704D781838F94CDAE2EADC70519A5516729316F872B3B2206837309107013956640CDF9B17FB13E904F88C96B2E4B314042087E0027DACDDF72C264356B18288E31F6F15C0909368FAD7F4040DEEE3507D0C8270A4CEDA7D8DE0D2EA45C496CBE30559067F661C5822604D1CCF8E872645660D95E86932A2EF58EA076A6DE065589B806C2D9B2D8AB6584E13DBBDB5EB7213E0AE7BC7B2C62DDCEEADDD9E6E6D4F709ADED1389031918BB8D9A9B750D9DA185D87F9229A65419591961C27B01C270B887A0B2F86A64DE3F6F14D05E9EA5DBC5989A40EA0B5AE79EA58E184E038EA0B4B470012DC82F1939668D77A4E72CDE4758763E02418B8A60FE7A9D39078595ED7F2F38953A5B8D327BAF589CB2CE2CD876D6704C29FF189DFD3F4BB80610E203F771FC9AA3B56DBA1716E45791F85B46BD690A2609F4878D9B05F3D7A91C6A5E476A7A934D039CBEBA959D4192826415324F0D8C745052DB807CD2828E66A168CEBDCBF44F1C0082C95404B1B1F9248ABB7B042C7ED06FACC2F6415482704A5EE1FD7F9F37103DB0DC50F69BFDF5FAADFCBDD2FF65FEE7EB1AF9DF3EBC6B35FCD5286CC8F5FD7CA4DAB07BFEF7EDD90B658F5D0F2B6CACCABDF7DF50D2DEBDCABBD3EFDE89CDD7B105A0F5F994AFF3C97473F64FD7DED917EFF6B8FF4CD7EF1DD5BD69FF6FD64F98ECBDF7C7F8B32666F3D33A8E7AD67FAFD73AFF6FA744ED7E4B995CFCBDD2FDE56AE5DA7633E7F95BF62FC6E3DD3BF27DF2B1F0FBEF7AEA5B3EED138B2F23CF76AEFAABC7EEED5DECDC036F4651DB46BBEDF527100A5D8D5B2F6F470E8BEE9CB9BE900AAF7427410352310A51E233A8AFC9E66EC20D36862575F599342722A438D54389CC3E7045CDCCB76D35E879916C7948BDA1987F51E7BEE3B21EDCC1392F3C7AF118ACE459914524DC3E2BC6BE3CAE2D697982F1661CC12C784E6958366A4725678DA7603968AC19F9317F6AB478908B1E400160FF516CEBAFF0ABB66EA7D0A0E5E85EEF1681CFC9AC8E6FB5ADEED06FA5217D549BC1A326D1AA43EA0AC9785A57403E313C75AC61369F9D131C573ACEDC47D2526F088A833A41C2DAD56C73CF4F4A685947EBF2F15FD7DEF8079D5AF02F8769ADB976D111356AB4711FB4C42BA7C39452E60865CB9F854297C1B8C79E3B4BCAF4587CF850690DDFD4B89C5831659636B23BE06E04B9DBDE8093936DCBD2F1C34A30617B9B28DC4D5CE5EF49235B6A4D18674D3A2B884E969AA4E46FE3D122B5B69AD31BD1404A045E4D1314F939500E4203F4FEE05DD954ABF0AF131147144D6D567E9A8DD4BD3892A0AB1E3EBEBB43AD2E0C780F83B46800F2D8DE8B3887FEDB9F15B3A198860E09CC0D34E44581CBF71DED52B8FE2AB00F0E6A7F826BBD67DF3D3E1C95221BC6F0378F234BF8765875C487DC7F3AC6789FCD16EE01E710035A2CC59730F1181EE7AF7A0198D049130406B980A467C7601541D8179092C0A96CB4365805804A6A103789FDA2BB154046000D7E0AB00BE3126F1F780DC9130AB9DABA14E89795D8B4688E481ED94F073A10438579C76E2DF6F77F6A297882BC845C09C7314B209581448EBC9D348146AE3258FEF4413BBD3F5903E3E8DEF220DAF3C8AAF7222DB29B537311C65A3303170DB0D74B736E26F13C786DFB3E2AD8A85F57A162BD112C583C649DBDA8871D08C927F0E5217E8EC452AE79859931F1F34A355854BF7118073324FAD4EC010B369244E302760F9B35ADE690EA197420750EABC79AC66BF392EF107A02A4DFAC721FEB4EB8B46A070B036552D0BCE10EB4E20E9E76B744E2C704BFF6F5FF871E4F96B7D5D645D31EE36832C28A555F06981B464A76B32CDA4E5E4E1A6E434586AA781137F0040A22C11E66A24E4DA3CE0A229AC70E24FBA8291DC3FB98096C4DFE283387AFC1A117DF44FE3626B2346BB813E598BF3F1C0C78E7B6E95D28BF26A54AEE56C5C21FEBADAA649722F65BBAC7B1A968203C861897EE5B5AC445769D2AF438AA07DA257451C9CE8EEB9F06F97C0160AEE4A81CEB3D44BAB4389121AB270F6B8E87E1EC4B9FB56BE5274C7C28B1006ADB613F769C14FD3D32AB1D8107A76AA38776B2306E7F2F173D2F53B684697657A40E7C2D576E2072EE67470B8416EA0C4A48D49DD793A99874F0791A5B95D6FE12960C13980D2B293AE6B0407270042FCD10594FD093B3E35C1DEB34023C2DD3939A44ED8D814F1833BC7643E0183893F6EE5CBDEF9F7266E0F3FEDFE0000200049444154CC1450728F4EB0AD38719E96952FF5BBECFFD0F75100CEECE50521FE08ABEE5AB7B613DF9C53951238DF6B379D1566854702E11C1AB9B05A7EE04A2C060E9AD1FB64197BD08CAAF47E39174FAE339C1874CF5D064EC686141573B8CDC5EAD6467C4CCF5B56E6FC7F6B237E5AD81B40127F0E4968418BE0D3FC5812F1072C090730ABA1C138E096399A5CBEC409C6E5BE39967CCFE95ADE01F0389C5EA18F00F4E9802EAA45F0AC208D225E7914F700FCC99B9F0EE24ECE12DBBDB54BFBD5A3B732A40FE6E45B16D68B6680E3BE91D46F629EE0FAD22810F7AFDDC06BF516DE70C7B7EB2D3C25DDC0B0B425F76F09C139BE802D32951C60CDA2561B239C43C8740A8F3917D0677DDE6EA0BFB5115F737AEF77009C0FFD767C62DFA5B302B616FD348383492C8051A0C9AC68D0AC912532108252D7D26BFDCBCE55A39092E03BBDD0FC2A6A9C3E1E7DA5A8AE7838F10700DF6A56F04CAB5288BA0140BB8147EA2DFC1018FD861D463C27CC13693A548668ADABB9DC28B118B044FE4474F99ED5A26FD0314F77F07C3FFEB35DE03F6C5622ED796BA3A1B88619A2391C71F91C801F702E9ECC2BCD829D1B912CB408D8323890D7B467B2801B2194C49F8E34B72BDAFDEDDE5A878E4964E4FAFA1A02C0094E9777553304E2E516D910649690B15A97551CAD852493D78828F41186F3446D277E40866870612801F47E6EA37FCCC248CD1DF5167E58DB896F3287EE4FC3D5D7A9753C511011F05769B14C8B054CE74CA456127F0B84DA4E7CA7B6133F7062FF3E80BBC028878F8C82A498D6D2D7E3EA0272BCD4EE572A7FBA3258CBA478978EE9E7E30802785AD01C5FA8B7F01827FEACFAFA8C41B805F1C212804450709D2F7E5FEA058E0B1E9DA2B613F78D9DEDA905D7D3F2F93534DCF3D4D8E987AC6F2F63B070F4B210DC92E85374014B6EA0838C37AC113ACB4214722E9EB4FC951C41490C16A10F9CBA4995C7C376E76700CC9DA0024E169ACE5E7411C0E307CD88F496862426EEFE5C516FE19B5B1B718B2C3B0180EB69697A5325160FCE70E209006F9138F6A0199DD7D2A689FCDB0D5C0774CB704EC4B51BB8546FA1B2F5EE80FB4716C19645794AB9375D3BF8B785DA4E7C87F451E558E5E7216A0C0B2D02D6C4BF5A1AE5D9C4FAD407F26725FDFF95384116FD3B1FF145FA0E74CEAC9FFAC8203AB244FE79FA925B7448A24F23908C7B234E9417019ABE9F767F3EB5B341967FDC2A1018D5572B0A38F721548D63DEE0569A80AEFB45D7E755C712E383AB4D58D6DEA1798544D660E5723D58D2054CD6312B0F430C3CE4545A5A1DF33AF938965A7B17960004B2855E1BD3F50B59B2AD622096BC541A7F0CC322C4B3185CD476E29B9DBDE8A2307BCFE476C7320492752A89C05182082886A8731AF011B7324DD10841A710DE3B684655723741EE2B4874C917835912297231D4882682ABEB31800F8BA003483A50C209F035EEDEA37403B35C608454AFB3179D91C4934C1FF2DED3C6875CC342DCB668F9498B60789CAA6BDFA5AF3D0B2302E66E222CF19EF24C1E8600AB4E7FE52514C4996951E0E3C2A639F2E56062A163C93990CE3A43EA94E678FA34137FC0B0C5AB3478E0E98A20FE9C143ECE1F4FE3BB3F2F6C6DC42D72F772D08CF82236E47E621E848A4620913E1273A07BECEEB70E9AD1AA0BAFF5D559D65303E940B9BABD0D0C74C0B8984E12B4A18E754B140BC4C471DF4BC245D338BCFC1792B7958EE9E5F6C8797408C751D5271CE8CC5E13FE706564907EBB81AEB619D3B8801C85E7006EF7D63ED9AF1E3DC6CE55AE9F45EC4DCAED2945BFA3D856621C2B693211DFE43456720081301730548E668D5C72FDFC6E504288A46544D1387E129C0368A5610BD93BF5165E985DED744B59E0C4AFDA4133C23F588BBB57BF80952289AD85AB8D4444C75194BA96981CC27ABEC77D006A9CC03CB8BFCE59FB97009CE7A267992E549CEC0E57017B3D4C735BA3A1F00420C1E7EB4F8BFE31E9622F3B1D28AE1ECBBC61187804BF0B2E0296F742FADC220235FF7FA1FA9FCB8A3442709E752B91289B3FB7B511FF6347A08CE8A801278B9A46583945F4607F8A19EB37446872E7B500DE0470A1B317AD8C2B569B15288E3B712CA91F2D571F743E9FDA9698048C00BC060007CDE8B24528B9F7DDABB7B0322E11D86E0C7CA902F809BA96A65BEA8C3AAA5A792E245C121695C4C179D0230B43007268FA65298BFEF5FDEA51E6F88D4227AD74FE2CA010E59FEC578F1E0B21FAE43BE104B7F0802E0D7B5EDBAF1EBDA1D5858E354EE069E7FE01BAEE1B5D97BA72D6B559D7FD34C3123B926359CB77D9B47DD5B51BE8D45D6C53AB9E8E0B38A457C795E08B0047FC254E7AA5C35E4A43E94B0270B161116072FCE6F59E69F3C6893F194A2EB4BC10E68846B02E0D079060391C9EC6A23F6E1CDA6587C7BA7A6C8B5BCB6A3074A7936684324B227051AC65D308C0F9D66E3A5894B6A5E99C49AED53C89139F3F33AA27A128441489D701DC02D070569ABDA287D82B313E682DB1B8BCD3B2FCB6B8E159BE5BCE054C2B2B4BBD17C60804182630F882AE71FE28FD38E5B898950907AA24FE8661117FFCDFC2766FED35EB9EECE749893FAD3EB37004BD08C41F30EA10F934E8012E4ADB3465746B622F025115B2F07C56290EB7A1DE42C5E956368840E50B6C69F8B194E8712325CB9089DF9B640CF0E77999E3D69D0C2235C3C876039F8C937FE10940EED0D9B2EAF459A166298BAC77F844503A7ED69146F0591C374D7CEBC4EB43BEC358189C5484447DB1C64E9E28BAD56C9A95EFA21047CB0E5A3868A2D7A25548A38559122B32F280E5FE8508BEAD8D18F5162A176F9E84C66A37F04EBB017333380B6C6DC477A53535FD8A405497C807E43419CC1F2077D02CAD66B5E38CE5809E0786B9E0969B963438F5B35BEE7884C1506FD9B1DB7D652C84083844EC9BC5EF9C0F6ED2ED39278EA5DE9F071AD795102A7A7544F74D9C28E95EE20E34B3FA01CC6B1C9428314F081F75434E6C653CD3F9D47098F8ABEDC477AC280B546778FC97CD1272F1251F8B3E3F6DF3AA6B897CC08D7EF8F5105F7959A18D2F0C688A15ED7E8EE526317E43515802505A6B5A8E7DF9394F3B66CCDF3B2E5E651727A1974A28D0F42DC7F5BB280D40DCB554F1AFC709F53D000FCB7A4C4B0F7051F4CA4A141FCE82F061B980488E1F611A0B49603DFB00EEC37D676975E3D7A65DB7349022BE4F3FB188F52E910F981878C4C5521EEF598E1D1A679691D13CC7566145C09AAB0E19EBD58AFC90C3225F9522C91227707DDDD37431F93F4B0B47948DC085BB3A8381BB9D168BB77CCD287B44FF41EA824221FEB4F3BC50127F25F2805B0CCECA05218DDB37AB05C4B9A849CAA4BAD65BA8502C5D917E48DFAA284454672F7AC9AA2F1701F35FA90FB8F820958A7A0B437AFDD6D8CCF2CEDB0DDC96C6259427899CC92298E73DEF6FA2B004208725022648C27082A21EA783D201F400DBBDB547C439895857F835E99751D1DB3CAB116F2E603C897A3F64B72E69F5E1E52A751D510F9885D147091B522F66D1D06EE091F454F980131A7C812022CAB720CD6221A9B7F0A2AB47F24E8960726E6992B4CE2F6052B7A211509DBDE88C8FAB1A72ADC4E2A1B613F7D998ADFA3871966EAB867A0B4F71DD41F7DCEDAD8DF82EA91890DE21A529C2375158113030EAEFCFF0F137159DAF9200B491C67DCD2A6A658E3A131DA1349D2156E607009EE4E56B750AADCBA4386DE260CDE71CD371B94E44C32240FAB79B43F95C37E86B00BE11F0D87DAEF7D36EE076BD85A7A6564986B4C58CA29870BDC5221052BE280DD2A8A508F52D911F2C972F128AE366AF6F4D7E5F338CB2D438E63DBE0A4D00127CFA66792DEE4E0FADEA7EA5DF3F054E8CDBDAAF1EBDE0CEBDBEF7D8734104218583A3F39010709A11CABC0D404E1B1128312D25E765865C60D2B803F5162AFFE67F15F7FFF0EFCE7E9EB25C675820CE6011E654B950F37B6CCC3E0FE0DD72DC2E17C81084FB039416B9964B9890FCB5FCB636E2E3CE5E74C63727B659F4919C9B9C8A851001FBDCBEE40167895A75563ABD224C5445C3766FADBB5F3D3ABB5F3D7A61BBB7768F883ACDD50A895E43DE13F95C741F65B085609A9571963AE48D6525FEA4DB0EEEE78AFD77C775A35034B41BF8EAACCAD288125FDFD576E2FE6FB69240F3EFD0756744326DBCEDCA0AF693E674AAE7AE0E506F61A5B6135FA8EDC45D2E5E078616FCEFF0F312CB01165A3171EF26BF373EA6F39ABFF81CA9E994BA6B2BED063E9EB4ACAC283401C817716B31CF6381273D343728CCC0EBA7152EC45BB23B7184E010E1E7F3D798C291EB01C9029188DD438870C3CF6096B27341D1FDFFE5857A0B6F88F321456A37C10D1132C267DC5C0900593E57FAE7D7E8B8DEC2378D7CA6F2BE25F12C3912FC1E13A7DEC780634569A61EE79AC4FAAC6E3D494C711C340784EADFFE7F2A417E3D6780370F9A51951BF96D6DC477E9D85AA84B2C3E88C920ADBF43375E59C1E37803AAA3E94FDCF56EBD85CFE7556E280A4D001287495BD4F3E40A3A7F7F2BC009213249BD970DFBD5A3212793DC09B4E8F78FC625BC6A3BF11DF7DF77FF41C4822FF2C7AC44C159387ECB402CFAF466E8BE9C443971384B9073778711970FF4ABEDC45D5EEFDA4E7CC771A71FD476E207D242741A75E5C433F5716D27EE4BC28AAEB934A61B96698111F7C421AD3AA5FAA174D2D2F6C93FAD4C9D380DC14133FAF780E14D26F76158AA2F2C37B636E2DED6468C1EFA2386578C301B9B93AE8D19177610540EA5AB3B07CEF3981B8102128092DBA72DEE9CD394C7224F8E8739178AF9A63BF5D8EEADBDC38E47E2FCB2E373EE3CE8E3A9EDC437DD8EEC1A0616D8C78C03B852DB896F06D44D25468A6AFDBB88E26122A2E89B90849E47976A886B35CBBA123A7BD12D22E0B636E26BA46E40449623F012CE3FDD3F6846E70F9A51D5598BAE6AE2A02C22D02CE084E941331A8A22000CB817F38CAFCBDEE93779D99250E5DC0F8B3B380F1097D411ADF7B5305D25E1B77CA8EDC417DA0DDCFE66BB1275F6A24A1595A1394DBCF3646315FA8D6B2E5E88D83C6846558A8853A4B15538025073E922F5BCACE813E3801600C9F92B82C7FAA2808C3EDCB1F4B9A7895B1F0E793F9DBDE8A23BBC8CC102BCEA825E57C4FD11582A01B314FD9E22ECD776E2077FF39F5656E50D450770E68437895100E0A019DD74D7AE0303828E5C941C34A3CB9C7022DF5CFC9ABCCF38D22316AF39EA0869B13D53894B5A5066D9E7DA7BDEDA88AF01A3E1E9248AB4F0313C4CF34D29EE5D6E74F6A25B5B1BF13FDD7AB712392E7A8FD679A90E328925387F56866D2B1A63A91004E0766FED92FB1F21F82C65FF1C9DFC7E08E0386BE8B1D3084B1753E3D686BE0F8A038C13E39B21DD9C344C6B6350E2049DBDE889CE5E74E6977FBA8FDF6BF4D5891218B5829B55FDEA2D3CF67EA34F2CA6AABBF622D72925E24472A28888E2F7F933FC58D315CC43AFD112FF900855E39EF16BE21D4CC508840C80A48EA2E3A25DE6F5E2A25FD9BFED066E4FA37E5950DB89AF6AC61FFC7C9E1B9A1253C5971893C15C6BC6E5EEF371B3B511F788E023373007CD68755A92837150483730969F3F43EC3811980FBA92F8CB08CB254F16B72F1473192E0C5C9AFF454D042DEFA55D9B1596C51D0CC56B3E6846FFAD3404D1ACE8F8FD591282B59DB82B433BC9BA4825ECAD8DF82EE97F6D6DC4773B7BD113749D8E651EBE3AB4C788C7C99EE575EBC0A954D0E2C1EA9CC4AE9D1757CD11BE55DEA75A6835AA6F117C00921A0011AC567DE75DCF12D383B3025E0586FD54FAF49AB38E09C11D1F0AFF5634DDD24270008174EE91343C30D274B296ABB068E7EEAAA088905CBE348E6C1A9C33565AAC57DD3512B705B1C9AD31A1592487EA25E6896520FE8081E8A4B317ADFCE0A1FEAFFDF6F37D933B624D94D3DEED928E5F672F5AB1AC66797A7ECE95FFE9D871ACCE5BC62CDA0E9E4DECA45F9679BC89B2CE7D56E9273A7FBC0CE2464AB715B3822B6F84D076F5FC80A7E3DC4032F49A17DC7BBD4C16BF9C289DB5AE6A89F9A0B3179DD9DA888F1D07B80AE8F313B7021F774CB8F1B6EAB3909F057CF3432108408DA093C4853BFFC067F8B15F3DCAECC55F729C2441586200CE75DBEEADDD064639B59C104B13C576F6A297005CE44AFB4CF7CFD4BF0CD1F1D3C688165BBA4436FCE7CFF4FFCFAFD5FBAA48D2D2999905F1E7267538A38E3EBB976CE6F864EEB1E6EDC97B6EA302605824ABB98E10E799C79B24AC1FEA5754A24486869B657F53797C81241D4087274572D21BDD3A68468FCF53F445042927FAE5FD59D7691111629C5744D476E29B345F0038A60D80B641543678993774FC7B662A24F75DFEAFA53C9E1B8C4DF96DA020042027182CBF7F8EB0984A88A3D2ED4B3A845EE653BED8CB19C4AE4313897B0F778DB42AC72F441FB1C4E47084D0650089F8D14A3B63317095C28C39AFFB0971C23982523FD110FB90FE20F7B777D9EDE0EF6A3EC4F24296FEE4FA8A9AE561EE950B80552EABEB41BD859579D50FD039C1F3D25B5D4430C94C83DC23B9EB573D8F15066454C8830EF00D9FCFBB417D38DCE2759E6FBB812E970C503E1407D81D27F9B83443AA347922442A5077E122E74E006EF7D6BAC028C78FFFFB1C408FBBD02FCAA02D0234F1EA984E9F252E92136E00C7EE779E3837526CEBF3032951442B60E9A264C1F0056E2D295D1AF87468E8384F0E0B71FB1CC7FE2E30E01C4B057E39196A9C3B56C7FB5A5DDD0E9EF404D5FB6DE6C4791CF07A08D72A43BEF4B83F31C755E8F276CD8A8B25CAF982A6B6C1DAD19362EC79818BE42C31BE3C2E31A4AF4DFDB2EACEBB00FE7B96AEB0DCC17603AFF158F37203A5BD7FED9BAE8BF8E6B4B19173A1732535A46B9AF746C35A53645DACF13C770290479870E7AAF850128393B8FBA8EDC4779C0812C080A3E10C100A3B78E7094D1CCFAF496EAD8F7027B805A349E79DBDE88CFB55480C2FC5B69223CCCE7B742DA4EC79C1F9A4EB2F2AC7D919260018B58AD5E0D3BD1BA3EC11AE228574EAEC454FF0343EA56E6D774FCFB85D7E4FA62511A78FC8B52C793DEDB92DCE87161CD657AB5CE44E462E8C001F2A77565C2CDE8707CDA821231E6C6DC42D76BFAAF9DA9B07C8B50F718C015D6D61DEF54C43BB81476655968BA12BD572AEB1000AEF13479071D96EF2E7B57CDB0D5C62C7B398132F31B5909E56EEA4EFDDD2259DD6F8273FA7804EB4A671B7E76E05BCDD5BBBB75F3D3A6B117DD3B4E2E4AE5F986E40090F2CD16B9677E41C405F14FE177B96FE6528615744AE1F812C9DF93569C969881E0AD32637797E1BC0656E956AA5CFDBEACD9AAC2DBD434D3C1A78DC05F073F516DE12FA80891186D5F6ACED749CC3240248168E69BD35886042968C59CA1D076D67E1AC71541D31B5EA138FCF632CB71BB85E6FE145FE7EC5BC7FB3B3175D2C45C17E30C269C8F847899C75CCD27D1703C9C1194744BE841468FDCFBF9149C1E7618A4F2D3D074C3A0E68AC710B6081EFD75D04903CA079CEB0E6369966EE042030CAD593D7B4FB9380BB1DC923BF6587E67E272742B08FC14EAC4AFF21EFC47207648CA3CE38C64179C359407E016E91E4FEE638DCC7DAAB0F82831762316A37709B74464276EADA049AA52DED8163E73FC7890DA9AF255D78F0B26579E310D61641608993277D4F59893F0EA39E9D7A0B531DF7B25F9577D2ABB7B0221CECCF6D3CFB38B845F9D642902741140A46385D83D30506F03480F7793A4E10D2F14133EA6D6DC4DF26F73B21DF1E808FEA2DD4A6F15E380798540278D9D65CD14E71F124E71C40773594573BB47190B62995FD395702508A0D2D9F7FD300E33E754BCBDF6CD0DE5BD677C6FD2F12ACC5C1122F871281F38613875CC040172AD911A6114A45E24A38A2EBE98366F43EF743A7A5F571E6C66987B69B25910A77E5614CDA99FA5023E8D20807792D63F3D4F24330EF310104732987E204938FC519D4AD4B1B29672074467B5F45FACE7C0825FCB4F64CD236E9A715189DAB43D45A1CD135E47B4FFE03B319D73E55107E7FD27C69DCF16F20AFF6B51BB8546FE12DA2655C996F03F872681973D301DCEEADDDE6FA643E27CF9655F038E5D60601DE79DCDF92F8F380E200A74501013245FFB8D3D98B56C424D2B3D25B51610C4BF15CE243E7898366F45B3FD2450F4E9F8B7E847603B735B1A5D427A13433D297A1BA758041B82F174A6948FF4F9B68DA8D11438C4FACB429652765384222313490F170A9BF34B1AF5636EFC3F670348F9EA2BF73CC7C8781F21365DE97F96685B6E850B9CA75EDF94B2317E784AD8DF8693AEEEC45156DDC4F1B9C5822E24F1B07D6775614B0B11CBC56C9B64E427430C3892E9FB3B99B2576FD1A9DF3EF93C60080AAD3C3EC523D43EB38E97BE17E284917D457A69CC7D2F2D708EF8366B4EAC4CCD8DA887B7C8CB5278CDA536FE12DE0A4EF5DDE5FE675E76DE0F5A4FF428880019DE8CB12F1210BCAB06FD9A1897A358E6DC8BBE1BA64748DBF0BB739782A4DCC5CB4C81F3E908EA9145F86EA92CD9B33485C14083D2F6D07CFC1EA9C889103CB53B91D964858949527E7311145A5899DC7856853120144C211554D8B8B3CEBF120EBE04B6FA93C4C136DA15FA971AE8BCCF1B3401B21AEB3EEDA741FC0C33CED24ED23BD3D29C277E7D7B84EDF9597E27FF90FBF8847394385F4EBF877A3CD7DF21B9EF6786622E0A13129C6F07D000F8FB36995EDE1BAC3849C45C123A2670DDAFC383702D0D2FBB394FDF35CD44B02301B7C84585682CB8943BF846145DC3E8063CB0847D33BD4C6C92C5407B2A2DDC06B5B1BF1DF0250152E01DE05F0BC8F70E2222C7EDDE53B37CB456D42D330AE38C54750CA0584D28B73D3B0220BE8591E3E8AC35AB8C6294B96993691B3BA5D386846EFCF9A9071DC8B87816171BCAC9F14850183F1F3ED66A5FF74AB32350994C5ED93E9E6F50D858274870F9AD12A89CED3C489724C5AE932D623488F53FBF688F806B2F9D0F46D82B3C2F5E31F905F4FEBFB1A57242DFB9CD4656459D31A5FDA26584B27E7E4B98980B9E8975FD3C48C7981C4BFECBC18ECCF824323A8A4F36EFEEF03B909A0498411E3A9C49FBCEE0EEF73B16F91883F00A8B7F086DB15B79CFECB56BD85CAD646FCBC919E87201A71F161B1F367A537438B0F5F0464D99388D2E46449796D6DC44FB3636C6DC449D40E4A3B8EA8CC0747605D758BAF59572E4214A2E520110F17D58470D3E89B6937D09F07F1E7F03070E28E4713C78BFEA1708F773A7B51E52B1BFDA9C9822DE26F6B233EE663AAE8C41F0090AEA4DBF89C777DDA0292F1795313F7292A0A99BFC7DA4E7C87B9AD223FADDE759336AC4CCCF81C8D11DF9C21F250EB3B01F177C1F5E357882347FD22C783540908ED3B96EE5EBD854A672FBAA5E547794D2ACE26B487D557BC22F542710039E4223FAE61810F8C9DDD45A0B5698951841A646CF7D6BAD2C72347C88E328B5A40D121274DE94A44DB2986884566490012272C8448E11853FC7A1D4E99997191864478BE7C2D11F218F5E84BE26F5265EE76031FD75BF8BC2C47131D4947B2520C2F390DB3DA088C4B54B0BE7C1A834840B7007C18E222641C686E3E80F1393DB304AD595CFD80FA4F7E07727E48239E42C78AF0D41024B1A1FCB5BAF13459B882397030BB7052189E9FAF9EE37E535A7BFFE8A13E3EF7592557AEAC2B6B4865C43716DC711740E2366AA61C408A21EB8E13AE912FF287E61A661C48E28F2BB096D0C1B9B13CFC9ABCAFB9EAB1883F6E84E32E1D6B5104282F6E7C92C6752CA2F36720997C8E354E8976CCCF35628F63460B7EF2ADF0080A56D97267CDF2097A3F2E9D6AC9163A79E6C50574AE229273F9FEC6D9C913F167BD73096EE97CD08C56F92276D08C12371CB324FE1C3778C8C1AFE6EC56E3A6B86FFF7D0CE6E28B79137FF45EB80E1AD54F1AF2B0FF0FF2ACC3385038C697686EA431C0A3F1F0843E82D6220843C6AE2BAFCA2536CE597F90CF5C8B23454EB835E26F8A4EC37B9A419556CE049B3B9560FCDC672797DCFDFB32CD9865D5344EA5E7DD2616D8ED06FA3325002996AFE54BCE720BC3AF4D5A8792F3170E295AB5C4ACC22AF75E0A21F65D6058F4AB4D26A19145ACC83145000BD353A5369238240BD20885692FFCF5616B4A2F41EABB97564F37295D97D769E1E6717EADB243C5AE19F00754368F1EE123CC53FA25B1D44DE306708E0F4F63702FF26EB717567DA95E1E0E610B18550161FF0FACCDB9155182DDBF4304932BBFCAEBC5CB95C47B3D8381D2B4501FF53137346F28751E698B2440E438F589083964542CC502F841BB81E76873A8111E56D96E0E1C3126A3638BC81D176E4C543B7BD18A9C7B65BFF2FF2CE5537A3937C958C0AC5CD39F6028D298035A3AB9219BBB08D858BC1396734EE2DF3B001EC709F7AF8CFA91024BCCEAF3D598C102B887814E500F830820439EE2A5F858730A4E28BA2898FB3BA4B16778870790BE330F11EF4C135C1C65D5691C71937BBE07B6430554E7C26A19D38056078FD8FE7EE8A4EE88B587EACCC047E495CC7F5C14CCB1B511F73A7BD10A17CB4FD6DAEC0859207DEA0BC0683426307F738C48A438B4433E5B695EA77EE04626404240DFEDEC454F5884F6ACC4E659C1DFABF0F306E0644C5ADF9E24C2356221ADDD9AB1A415754223F8B5BAB16FCA8A92A1629C7764A97DA5F5CD04DCBF77EA2DBCC0CA4FC4CED3284F6B8BBCEF5B2F66CE01E4E08BBAC659CAD99F1B27FEFA25F1970E9FE185E4DE86385FA6DDBB9BC057D93100607377FD3996BC4AE5F922C21439EE2F438F4F3C07CD6822E5774DBC43D7F3DA31FBCA2548B183B6C0A42D345CB4ECF25B710BDE0526F21C120969A2E569A0B6133F107538DEDA88135F959CA071BFE01D7DBD85B3C45595BB73E25CF1BEA505846212BB3A55DB0D0CCD65D37CFF327FB711A0B05F563B86C642C07B4B08029AAB1D11B2EAFEAB74CD9D9FE7C41FA99790AA85E3349DB7C6611188BFF6C007E888227F672F3A43EA16526F8D38D29A3A86E466599C39A52F5EE3E7C258F20E5DE3CEA0E5E685F7A7F27D0C6D9C38F1A71958C96B63CE6F5F72EB4E95D7DBE2BC4F3A1EEA2DBC40F574EF8DE276F7B48D9EC6311CA34CD38B844680B37172BB101C40C076FF9263E8B7244F37102E74F6A25B79E4BDAC488BD2C2EFF167AC77C6DCBF90427655EEF4653E92E0B3DCC014950BC876A08908228DB395156962C43CA171FF781DAC1D7F48BD4227C1592ED8A1EE6E80FCEA658D0FEA4BCE39118B5712A6AA3D8550616D160798131BC7953E56FB959131E05B987CE5B0B99A389C09671818151D0318318EA0BA695CA63C17FCBCC0EBE108964B10F385041F0FD2C9B5F61EACB1A2A17612B948ED73E2467AB8E143F51475BA5D6FE12939278610422CAFCCE3DB6D0CEEB36F24972829EEF9211FA7941F71B42D4E6D9EE3CF374ECB6B2AAA0000200049444154789DE4FD591B815C17E77D7EAC2DF89394C774B0009C0CE492F84B87C581D5DE490807D0297B9F715CBF2A60BB13D0883F5E96762DA0493345BB817B8CF85B3D684655ABBD9CB324E1E378F1DDF62C883FB7730730BC43F789187CF5D244575A5BA87F3C9CC4E7DA0DBC93B54D3E380302AFF3D6BC3892DAE44D910394EB894B1AD17F67D9716EC45FBB0132DC4B1C0CFFE3E7FA0F80C11858ED0F9A5E0B8CEC10C0C9B9EB7E1C556778C0B982D7E8DAD6467CFCD287E8D273943FD79FD338D44581200E2E61303F56D3B8EEFFE44707B77D62C076039F28EFE16178E05C750D594E7363145E678DD32421E681275D1967787D4389BF50D458D40FC6F91B22FE346EA9FC8594A5117F74AEE9C5A6715FB342E6ADCD49D63B9A090770BBB7766FBF7A74D62DD4EFEE578F5E70D7530B9F94BB533B09625D1A806484429077009C9BC4158B2482E89D6CF7D65E03F0EBBC3C5E07797D51E0FC9E3DF1BB17FBFD979EED67D27B01C277D679D5D70271263A4A3C55AD3E16F741C24A9FE6EC76DAB0B87F797390B445DE4750F3EBDC2DCEACFA288D23C58FB38C8394325FABB7F0863B7EA4DEC20F81C1B775D08CCE5399BE7A6A04E0BCB97F1AE7CB708D729F735F059758BD47B0DA9DD60734FEAFBE57C17FF64CBFF79BAD8135B5C6FDE365C97CB573C6ED1C71D1E3938C64E100F275FF47BAC01FFEDDD1B5DFEA8FBCBE27399785F47B5E65CA6B569933E10012F1E7B84A2F4867CF3C26B0D40304268BFB0BA65752221B78FFBB77708E73E7A48B98098BFB5B168197360EB67B6B8574E9E344C04FB41BE8AFF62B4833FED0AE4B8E8AB6B3CBAFC676D907CDE8B28B6BA9127F72372D9FD7F2943B57ED399A40ADFCF2466D27BE6371B1F82216CAB9F0419B98F9E2CEAF716E0B5D978601D3026FAB35FE4867526B8BE4B2642D9F117FF788F803808366745E238ED388A05970CC4320B9365CA752E06147F4546A3BF11D7265E2888A2151AEC575B5CAD40AAB9D849AABACF62BF8C3BF1BAD6C6DC4F856B3E21D03D63BD0BE2100386846FF222436B492FF885F47597FC761EC75F6A2CABF5E39B9EE1BCBBE3664456D27BE19A3DF97F9A5951998F705EB9E1CEB69E37D2604A0F3FFF77D859BF391BB3F4210D2757E3E0612114AC9FD1B0FD20D8CA5971742ACF389452967C517F583972F55077C0EA7E785DA2082C47F4C6DD6FC4F718849E03E90CED518475C91058A28F658DB9D1B65DFD7DA2B27F33442AADD00D7117DB43D707C3A3550E405772C237B24045B5EE25F992F5D932E60643A3200A03A701729798C857603895116D58B8C5024715A6FA162718639A408336B9D24B1A3D459DD2CF1EFA308849F1C53ED06FAB59DF8A6F4F1281E237DBC2700E0772FF61307E5DC68CADA5465441503FFAC495E9DBDA8F2731B27596944B6B601F0F577BD85A7F85A90C6FD0BE1CE71F7356464487E7F3B7BD119C995D6CA7075BF37C958E9EC451729DA8D66059C4688B2F65C604638DDDA4E7C53AAB0F9B8F2696D98950878A810CB85088047017C9AA7F14749F88561BBB7F6DC7EF5E83BEE3821F22C830C97EE93FDEAD16359CA513848894779C7C9AB5A8625396C08668AF640FFE631E9C6C38584F3EE6281A109FC0338DD192B5D2E1536D06E0C625BD2C4A3B925F1D58B4F72F2583EE3F4DEAA5C64328B45BBDD40D7BD977FB9B5119F0386276E595FAD6EA175D59E936934D733BCDFB81B90ACE5678155572BFE2FA5F3BDE33CEB9856A636EEC4F397EA2DBC95577DD260717D1DF7AFCA2C47A17D03F4EE2D572C69632B6DBC90AB1DE67AA6EBDE75325F49B5034BEC18B2E1F511A9F27D868E1B3230813062B1BE578B5B99F57B6A0BE39A9A883EC2CBB0CAF4B487A4473DEE3D43A98397CB28EFCD4A043C22DE05546ED1A7793BF6654AC3253C20E2CF1D8FBC2B498439C22C13F1070C73FFA447F9FDEAD18A8FD8935CC8821A7F7418EBFDB17663D48D4308F1E7F2A28F76C8496D9EDCA7803A749DB8E97D12A11886111F28D7A80D6F8B3C4716A5AD8DF86960B06BCFC33A3A2BB636E2EF3A0E414D236A2C311ACF23F47DB0854D555D20F11E718DB5499DEAF87B8DFED4C5E392CBEC08E5A1FAFA16694B04384EBDD3081ABAA6BD1B83189D19F147F530EAB2CAA39648E29E3F9F56467BD4BDD2D07CD16EE09E452828C445E24059FBEEB50D5D16C2298DD326C755DA7861BE24579EF9C1F07AA3E5618D99713653691C6A6B8362B589B94E4BD6481FF1C7CBD0AE6BF766C601F47091EEED578FCE8A74DE38B221288D3F2687C1A505909D0B277631800B2CBEB9BBBEAAB979E1E52C9AF367E0C491AB764F7000BDDC3D0D93709FC681C57DCA58BF4B00BE5577CADB6DA1C84DAE990487E978964E8EFF972FF7FBBFFCD37DEEF622D569F7A465BAF6F60054659C5F8D03E244850D111FB8C7DD694C5A270DDC99BEC59DB5B87D923BA5FD03F8406E742487C643C4795D6C58DCB12220EDDB92F5E68EE5E1A42721EF41CB4B03775DC29F0186B992B2AC344EABD2EE2E9B0B2C2264C8317C48BE9AF36A397E2C0E595EF3A936BE35C7DDCA3760CE29D2617A96507CBE764C6DABBDDD5BFBD8FD8F107F428FEB6185300CE290A420C9A3E4008E076904A239600EE1C2D5440827F771AE6EEEAEAF6220F657D5043442AFC8A1DF80A1C9CCE7E8F4BBECF849206CE726B9079C2B33CD854D2C50D7B2127F0EDF02F019AB7395F204808366F43E5F081CC76166C45F6D274E88BFDA4E4C8E5C937728DF412847C242BB812E7B772B5B1BF1359AD4AD78A5AE4E0DCE21740B4B123584E54F6324B3CE645B77A9F307603AD53ECEA8841C13DA39DC7710C845FA208D08D1AECF9BF893F592DFB1F3E967724B39BED1AE006E8E917382C5EDD1C6AA72AD0AE098C616BFFF8D7665887BCD362F99C5B49CF8AB0F24009A2BAC2A80EF857C6335114290AFF916B7D237762720FEBADA78E3EE60E43DDF3B23705F8C590259A4B5636A04E07EF5E8F3EE7F48842715FAF9759E6E92B2990E008092033809341DBCACBA789DBDE825E7033019C40070E3CA21F6AB473FACEDC43743FC0E7202B4A844A0E3D2DCE1FEF224C1A4B9AEB026393651F5B4343E11421E90132580CBB2FCD03AD5071130CCC5985F93C4EEB4E0168EFE41334AC49AB4530FE1088CB35010012C08964BDCD79A45086D6DC42DD627495C627A4F82BBD0ADB750CB5ABF3A0B67D56EA04F0ECD3B7BD119C99DD2B894F21DCB77686D607C9C2CD1CF4F6AC49D7C7EDE049F84AC2B1D33B1EFAA8FA3E6B8E42B9DBDA8F2B3EF56384750FDE642DA6FA459957356BD85CA17EE57B8252D8DDFEAB8FDDC66A26ACD1D8CC34FB2F4721C259B1BE66396548BCC79491B677C2C4E32E7D4857B1A1FC7D14734734B5FF70D8E7036F3C05C42C1718ED294C27A25A25FB200CA21CF53074B74EF13D95AE08E3999436EFABFA8B996A1F416277092B64D0BEEA37EFC8F1E1A54DFC72D0B996818C76945BBAE4C66F7C6AEBCA7FC7603FDCF2AFD11E30F6DE1A77391CF8ABC27275CCBC54C8ECD19026D145D9B9205482ED07970FC3834E2D65980AEB28DC331170FD1F141336AF067E482C0D27F22C74C28F818AAB750E9EC452F515D79583EB939B0385C92EB22C789BB3E326E7DC4A0EF7D58DC14CB7D869450E409DE2ED7CE8460A36B32DC217F5E9CEFBBFA728260E41DFBFAC4F73DB51B788EF4FD480543CB736B23BE16B2390A00050418EA7F4D0CAED5833637B59DF82A6DE4DCF9C898E4F5B438A61A81EED2649E53E558A77F72F5B3B511B7585923F449672FBAE5DAF44046B9C913532500D3167322048561C1D8DC1DED03778E780BE726645120F5007D04A105679AFF383BEF0338E6EF5FB10C37A363141D9DBD68E5BF78A69FEAFA8520FD7F59BB53375974E8BA4CEBCE8363D28682CABA78B332325F682295006E2617FD5C23F1CFB48D3FC462DC7522DEEAD6C6A8CF3DED58CB671208CEDE90AA00B9AC10F597DC40E20E74690CB1052DB38116ABD759E0C427226DA0A5435B6B13C217546D2C58DC61BAE75BB4358E232F57BCBB2ECF8BBBCF9821532089BA411C33DEC62C8B3B7751F40F7EAF32F28C248C35029CA717FDFC49BD85EFB41B49083D8A3A734C5C4A4798AD1E34A3CB5A7EE3A2B317BDC4DFA34F0796D5B7CB9F27B168672FAA1C34A3475D9A8E24C0083E0EA0BC9F654E6D3BF749327FE65287D45A1A4042B35459BAABEEFA90CE3C939EE5BA5999692C6046D8F5A4DFB73C383ACC0288CBCB0BC9292A228441CE27007E424BE78BCDEB03DF9975F6A221639F10772F458EFBCBF17F6FF6FBBFF8CC893141E844692D98BEB4D31673B507FA60CF87D4859F7BF21B1153596D9E46DB28328BB836C2D9B4446A5A9FB7035D89580BB2D3AB4C44EBD6C2A71140567DF31C1F940F730DE215DB6A842B6F87964EE669B52BAD7DBEFA90F23CB5C38A4A346DB0FEECE22426FA90C1916C97F3FF76D11DABEB1AE718F37C7CE3A03DEABA64C4088447C5916351FE8FDB1F741C626026AF3162E918C3EBFFD5CE5EF492555FCA4F5CFBA83E86DA4408ACE8421C64D045E9699C5A56E19362662260C1055C71FFB936882B47CE83F8FBD54AE5ABB32C2F6F706B6C18C41FDDCFAAB349EF6373771D9BBBEBF4DC4A6D27BEE03300599450707C12FB373EABE0A019818C09E487DB79B8AF72EF4208A169137CAE1E495CD77A0B2F58BB68965E25FE2C8E832F8DBBF7FD9C0897210388F71BFDF8A0199D770E55935DBF9B90BF46E56B8BA8C58172F7835C89F07C1807F41842AF52A657DAA52EB6D2D828A40FDB2C0E29E32E7788F3C7893FD24DB4C6A3EB93FB5A5D2567CADA34F03162D55F1B3F69F972E2CF9D0FE951BA6B53E70A52DD5C7D56A84F39C7576B3723FE1E380390647EE1F912D2DE3DEBE7B3FC1A5743E0E9482C6C71CA26FD5EE9798D38F2CD170E44380FA94410F127EBE9DB6C10F197177793D7FBA019C1C5AE56D338FF8E2B343F01387663636A2EBFA64E00FAF4C7F256E4171FB01556676AF8957EFF9BB32E731AD07433F971A8E89740CAEDB59DB8BF5F3DAADCB872784CEF7E7377FD7D9F7FC89C7543A706B6D0242C7A69F945A8DD4F14B8471672ED5C8AC4B4FF69C02A5BD6D59AA07D6DF311307526BE9CA47DF5131DA10700F074AB1291C35D25F937787969136E5E9C359E1FB55F6BB34C5BDB89AFCA3A70E315ABDFDA0D7CC2CFEB2ECC9A3BAED576E23BD46F5C315FCB5B1B0F21E2326D5C71C2D222C059F95D7E5DBE33464C5EA73C38F1C7708D1DF7908FF78911F0FEA23A93C187F876BA69E3AAB3179DF95ABD9F10B059376569D7481D83DFE73ADB79117C124ED74D5DB3354E386F1F11563E868F3666B5CD09DD9B06C14563D5D26F241C34A3AA6BD319D2059ED63C3F5511B05BB44D3F6796886FBBB7F6DA7EF5E80DED190DE4438CFB482A45BFE34313B58EEB8B8FD8F042ECD2C3C0A3F919CB4D90150DA488903B4A5AC8FFE1CD4AFBCFF42AF5903C7C1C2687C42716DD9F05379023844399226E0A8A56C0F31CA79DEE1DDCEDB838CC7CC72DC5585A7900DEAD3B4BD869F6B3B3164F2CC27DA2520FF7918FB91E9C48919713D20659B61457691CBAB4BCDBC2D75B283753232C2711353A1DE42F41708868638029F98B35C48E89CF479FC8D7429A7F5B6D6C04BCFB211506ED7B94BA8A93BC8F7603D7EB2DBCE82B8FC39A336833B0B511578943A9F9FFB3F234EA96FBF7CEF3243F9E565A6A83FBA6AF1D34A3CBE3F67308A6CA01749CA4A7E858FE5B6E45F6AB476F6CF7D682FD5731E5DE84F82B7DFF8D07A98BC739B53CA24B2847CE117F773677D751DB89FB4E045CDDDC5DAF4AE31F7A266FB740D342DB1903484E845344C69FE955EA1A174CE384699C3691B62AEF8967EEB573B6000EDD755A1C2B591FD696C4A58D336068710E18CBE35296498F738648CF4F7232B86F33F92E189E9F26679570D08CCE73AE9F8F30F57171981B912A1477416EAC486B54E2880CBD232EF293CE80B32E421AF147F9C83A4A0E8DE406A671A37DE8EC451789D8E2CF3995A1A9050B3038E055C7651B72301EDA9E8366F457E43321CFA610436F511A9E6E6B233EE6841F976848CE6548DD59792FF2738DF3C7AF69ED745CF0EED6463CC4A5E6F5E16348FB8EAC7CB3B425043C4FF2E3099C187EF17EE66A16527F51D63B0FE446006EF7D69E63C76605B545DF88F610A4884996BF5CE7AF08C61FBF5AA9987DE0BB376F68A1D7E8D811835D992E00E76F5C390490F8FEABC0236E29BAB8975067968B00B0B511DFE5E79A28AEDD40BFB6133FF8FD47FA9069B532B4C55C1EBB09E22C80563E2D1BCD9F5BD8874EA8F516CEB699188EDD4BBCFB3B7147438A46DCF399C2746D6DC43D6EB1EAEADDE78B17D7C191448D46184E6341900BAD56BE326E8616594E9471628D14C825B15417A259D6BEB374CEDBCDAD92E50294C6B1F3419613CA3DD6CA0D45DB5983D2BB773A565DC74DBB3B4E9E0165F23ED9E2638D447CBE6FC8C20F1EEABF038C8638F311CE328D555FB709BBCBBD17701735BC3C7E5C1FD3DD109048EF461C1B1B1178EE535D81611738622E5C119B1CAF87826971F82564D9342F91DEA5DC90D23BE1EF2E6F4EE0CCAC801DE130B4E8E7C9D91122C61629CD1609BF5AA9F47FA5DF2F24370BD043BF4D6A89EBFCFF9D0780CDDD75DCB87298188100A322DFA28B7B25B828028CB0C99287F68C9CD435D10E3B1EB2E4CB1B8E4B94B8B3F085ABF24D50CA0EDE0C3BA5E5D10EB0B6B52CED2C4E924CC3EB392DE28FDA2E1739ED3D5BCFCB6B744C22245FFEBEB125C37DB59D18B72D42F759F5C8C8B1D57C583EAC114459DF857C8EF57BB2D1709C38B2C2CD8D69D06EE076BD85A7B46FA2DD180EF736CE18E375B5DAC9EA92C9525A8E0BDE4779131F541E8540A46B569C697E8DC6B73517F173ABDDD6B559C0F71DFADE8D52FFDB751142310B66A10338A2C89FA77E17273008F3E6FE2D2A34572CC03091E6F1E9D805F03D8B734B0BF3E6EEBA69D8B148849F044D64B4E886101C04171BF87B00CEC967296FF94C1AB134615B68D137CBDDDA88EF1E34A3F3C624D60BE50AF005518B356A81DCB9487F596E3178BEEE7C9AF17A53793E422F8490CD0B698B77DA73F4AC1C67B4A0FAE2A1F263A98FE642929DD19ED5CE43EA1B42CC5AED0A29C397B7D23FD730B0BCEE1D34A3AA1B775B5B1BF1DF912E82C628F7B97A0BDFD1EAA3A5CFF2EEAFFFA5FE1FFFF871E547B636E28420E37968E56425A66B3B71F7EA7B95EA5FBC59192296A73CDF24BA91FC7A0871678D4DEB197E3DCF36E405DF3B9D469D6741007E6FBF7AF479DF629F35B49884E534B1C4F8B0C2F4C96BBE77B6DD5B7BEEC695C3FF0B27EFE6DAE6EEFA65FE5C9AFF3F71FF36E99416093479BFDFE8C7112AB98CBDB41DE1AC089434025623567D1C40DFAE378DFB058CBAF3E0E0C4237108D208F18CF57FADCEAC66B34272DAA8CEB22E741C920F7F96FBE9935C26A39F55CBD7B48D474053A99E0977228433A5B57392319E36B618419818A58D5B962877C8F8454B9365DC49908B100CE6D59E0CA316FA2D79EADFD7882F7E7F9C7C7D65490EA3D16FF7A1482214AE7561387DB20E80DD97691BD66960EA462060B1FC34FF6E32245C16B810305D38279069A6E0F384A6F757245DC0EDDEDA3D2D728B660042F7D2DED97EF5E83B3C063080CB4C0770680C5804A528AF70C41FC7573606E27DCBCF1387A657433FE06457CC27063E19A44C9413A1CDF4CDD2267B1FC721A01C5A8047F2E1E7ED61FDB7AA26AE932E7788F81345FE92AC6396FE9B84F8034E74442D67B7F47EE99D5B7DC0C70A1F07E47B929527EB9F706FDDFD1E4BAB86FDD2CA0A05174DC96743F29A74E1B3BE917663A01B4A512E9C2ED96A1EDF527BA08E3112B691FEE99DD07B1AB74CC6B1EDF17E9284E538DFA3CB7FA4FEFC3C0FA284ACB03937538E7BEA2F173AED21DE2E22FAA4D4407E3FBEB96596D0FACD37AF8AEFBF2FFE6FE751A7A97100AD38B22162E12CE0AE5F30200273D9C59D46585CDA00F1AF29C6AFEDC45DE7DC3259B4B508228BE6FA454308C70C182CB69A92B3C6A909E55CE509ADDC3CEAA13DBFB511E35BCD0AAAEE710FE76FE859B7407DAFDEC2E7DDFDEE4133AACA7ED388004FDF068BAEB38213BBD265C5B89C209EAF6BCB7300DEDDDA885B9DBDE8A2EC6FA66B75DCD98BCEF03A69516BB47A148193E2431AD7D2F71EA651175E368D515EAF71B86994AFDC08F9A403A1E564E4F67F529F20E42070B23EA4CD35DA9C697DDBDAB549BEB169206DAD18F7FD65C5CC7400A710F6ED2A06BE9DCE93D233117F3C044C915104A390EDDEDA57F7AB47DF64E7A6B8975F0BCC3B79D744A8B32820431B0059DEA2107F72B71A12524C4B6F115C699CBE29138223865B3EA4D5A5CD94FCD3C41D14FAAAB6133FF8DF5B95D55F680C924B4B7F29EA9579F27C27118B4D0AEEFF4BBED3AC8480B558CA36FBC6571AE6BD4066455B51860FD888014C0C3E0D42B03D70BCFD13806A709384FD1A235FAF989FD28C23FE65F523223961ACE44988D09A203978B28FF8C64ECB479B778A2A06D69046741BCF909EF63B75E7B3741CE446009295AFCF8880A7CF6B8127CE409145BFF326F24210E87AE597B238E8A67C356EEFBCFCFCBDF228FA6F7E9ADF2450DB89AF92B3CE9FFBC5B8FFCBB7275F70E54E3E74326B0B4BCD496171EC68C2B6265441B80E397DE5696801F4EDFEB918D3117C43B17C2571A7115763363F579042BD4FB17D9C85DBF70E284FE708F902E73EF1455DE324F1FA2C1A7C9C6A3A97EF611262CC570FB6A1B9C0FCD58E707DA98E2179CA6B1AF1340EE1477D4496BFDC054CDA379F05FC1BB6362FBEE7D336509A146592FACE03B3DAAC4E850398464CE44DFC118A4A041619CEE1F64F8211EFEE7A5F726EE95E8AE147E2328471FFAE6EEEAE5F0E31FC5804EE9F264ED076A0E3E66FE53D2EC7282BB44953732BE2AB7B5AFE74AC714D69D179E607C02FDF1EE50E58FDAC11CDBE3E4CAB675EE09BD434F15C5EC49F4FEC4965F1B44513914D02EB7BC922721BB3DCD7EA2DBCE17BC714DD41133D67D9C0596DD3DE21BBAFE62FEBCBD755B7E94AD42BB4F4A16011BB12432ECB1D4E9A842064BCFA36D045046BF347F5166AD6779C675BF274047D4923FC34A381491DFDBA1D2D3677D7873E2272525C221CFBD5A3DA7EF5684523BA34A310EDBEC8EFACFB4F884612C75BE343890232B5F7F8CAA3838F88FE43D11EE85701D0958CFFC98F0EE273F200ED00BE67E5976628E2C4A5E624566FE5A388AD414E3AAE3D1F02C00F57EC6E1B87EB29170022523A7B51E5F77EECA49FDACEA1B46C33F5032FDB27F29D66BF69A0458E3CFC53FDF83FAF5F16C8366A1B049E96C772A53994F7CB2475290A9C2838781C92E3E349366C84BAC74888FAF4A0195D064E3603620C7889BF76037D7A6FE4AC598E7596E7962CDBCA9F9EAFEDC477DA8D13C7E26CCC56B736E2966F7C8580714093E82B647CA48DE39073ADFD5AFBE4B576CE5193F2007B4F892B3539A7E55DE64C74002504A7E9DE7EF5E8EC766FADBB5F3D0ADAFDD476E2079BBBEBAB2EBAC431068E2A879EDDEEADBDB35F3D1A5B367E5AA18969C731D8B162FCD27D831B787DBF7A34222ECC8A571E45E7CD4FA1FA232411F024A26021DA191149D2F1B813651AA6BD40A7714B645D0C318ED771B0C651B40C23B87EAF555F5E97A2ECFAB95B96D06726AD7368BB43387F45E8C37120DBC4EF59A2E09C38801FD79D51525A5D48FF90AF5B22ED2500FF6B5D185968DC5CDEAE49B974BEF98B8C8BB2E649707AFB97E15CD870DD7D8BBB15F23D2BE376AA8EF1F386364666F5DDE5EA0646731FC2F001301A03D8117F7D8DF8B308C8CDDD75EEF3EF8CA6BB51127F9341126EE38866E57850C2CA49227162E20F002CE2CFDDABF07F203B3790C4294EFFEF3CEDBA7D3BD5B40F3A94BB372DA252AB8B55072D76A7C2711B7185C1FB883BCC266E06711C6A3BF1035E768865BF5C24E649B838F75437E99C87D602746E5B1E9CC92C8B7E08E76F11893F82F63DD2757ECEF5DC26FDAE38F127CB57F23E269D4C6DD1AFB7F09646FCC971122049F0B649720E39279E139BC020A6B26C171FE716C8DD0B9CF36D0CFBEC3D030C8B792DAE9735BF2AE37661883F092ECD98F63C0FE44C00F2859D5F730BFF939685A76624C261F9A5DBDC5D4F233A4B8C892CE27A99C6E7DBB188A1DFC6E104D65B58F9ED66E5AF1231C445912CD90774A07DCCE4874DDBE16A225F2B9F49D16EE011EB1E5B10129F71BE1066CA24DD698BE0ECE2BE26AACCE4CAC9B748CC095F00D000860D2CA4A81AC897CBC6C648B7DDC0ED592D2245824624F9085B6765AAA6CB03FCDBE6C41500B25CEFA695AB113A5A8C5E592E2BBF93563F562F421223996228B71BE86F6DC4D7C406F0C7F9432C16B7F4DD79878E29CF34622F6D43E2EBB7B6889D5D6468EDC863431882DC45C024D275C7666831965EF5FF661106B59DB8BBB9BB3EE29A62DE44C4A2C3E7B2C788099CBC679E8716E185A0E4B11006202452B0C4399372E5DCF3435126A41876D622821431F0477061EB0859454F96AECEAC45207983A2127DAB59C133AD8AFACE34A277E615C5E28A784390A6C6506F81E2C6AB2A4479D581CA72C4931AB523E4793A4FDBEC8CF33E99CBA52EF583AC3BA5257F7C8A753EAF4BE26F122242972FE6B235A7BAE3A178E498A2CFCE7943AACFB86B13B97BB130352BE02C8480F69C453CDEB87298F86DE271654BE4031FC72F8B8FBE595982CF121A01F8470FF5F1B9CF2AD8DA889F3E6846EF5BCF2A22526F782A2BFDAC176CC61DB80BE0BCCF6FA1278F2187B16241195A14B310BA2E4D0F40B528840C5F08655F599B87995772C961F5B584E6E72EEF7A00A3EF980C83F2DA34E5514F2288A50EAEA573C808C06B00BE8201114D3ABB7D6094300C25FCB4BAC9775A7E37F920771D402DBC9795CE4AC3394F8A38B1BAB9BB0E7228AC891F4B517076086EDCA3168126AD74B5FEA77456F8B84524FE007D27FEB9CF064D5188BF8FF889A5BFD2435FD5C3D2D2CF5AD4C9CB3C6846E7E5A2C5EBECAB8FD465AA0FF4FE8EDD22A23A9A0E1181B8342B45590CE462C745BE52AF679A22FD1203F8361192A01122CBDCEBC17F008E7D226A4D7CA9113D9C0B67E83B06B549EAF46A1C6AE9AA89C2AE3A0F0F5549DC69E7CE0844D651FD1E7CEA0B45F9DE9701B91080DBBDB577E8387471E706012E8F117123271688B0D8DC5DC78D2B877016C0DED8B125C2A0705B3FA57B1AC1B65F3D5AD1C4B7EEDAFD10BDCC4525D2B51D299F8899EE8D698842D8DA88931068A44CCD2744AEC763111079238DB05326E55FB2D2A694F121D78DCB9A471150DB892FB8FF07FCBAE654D912E72D5A9B170569DF89206856A72102F66C62560541289F1BA98B228A1D8A7F6DE891A5B6C971FDCE68B189E55CE0366E237DAA70F68E5DDE5D22145DBA91E85C2EAFFBB25C09234900002000494441549D59F4FD4A8C8F3C2381687A62234E8481513D33ED9E4C47F959E59784DFF8487B073C9D2F849BCC2FED9D1455E72F14962E97B1A027AA0B0ADEADB7F08226FED50884694C866DE7C2A2DDC0A57A0B6FF17B3C8C192F5F9BA8DB812E187CFA3E56DE4504E9FC01C33A4E96E80A2817B36940882CEFC3E98B2984D3DD8366745E46B800D2DD0D65AD0F952FAF71D733BE32353D609E07611C3736DC1933E5F1F71F8FF13FFD233DB6B0D61657FFA1082759A0493524C77CD1E68345436E22601F0160709182C2C385180848D73293B6E5B4417B4F3E3D4DFE9CF5CE3442315417B448901C1C3A764ADD667A055560E04B8B2EB809AD0760939D8F94E51317E50957D65B520CA3F9FE12754C9CAAFA883F9F58C73D3BA2FF93B50DB3867343C5B91C23EFC76A775A7F940807E722C3C59BD6364F44FC39EE1971AA48672D2FE2AF2BB97FBC1E5CCFCE57A6ACBF50C948C4B0E3107F1858E626BA7AF5162AD76AE8C9BA7AB88B34DEC722FE781EFC5C129D25A68BA9F801D4DCC1A44581B0FCCD497F7124FA25DCB872784DE699679B4E0B24112DDF9DE5D0597BD657C6746A9F3FDACE7582269E249728522F868BF5E89A9CE43827CDA55F0150B5C4BB16772CCFB63AF4DC2FD5E044E14806F9DD923A715B1BF1882B0B4D045E3490B89E22BF843C23C7911C2BE582970F348EAB047DB707CD6895A7ADEDC40F343DB5ACB044AF9A0E9FB609B0D406281A07E3588E35662CDFB93C2EB72581F08DD37603B7B3D4836F1CAD32F8B79225EF1261C8DD0F2060BBF7A09FCF0084A797C4E08D2B873DD201246CEEAE5F36F258183F40F3C2766FED9EE59E4783E60AC6FDF725E790FA5FDB0C4C135AA8B7AC8E9E81131D3E4354D9E37EF1E89ED4D393CF4B6C6DC4BD7603FD18FD8418B026DC697301EB2DD468E1220E865C0C345D477E5F1EFBD06EC00C91A61C7F3276C372466D27BEEA5C663C90DC3EA9C7C9A1E953F1FBE502971D9CE0D088063A5708AF63B7F93826913DE3688DE8A94D58C791314DFFE4CBEFD387067A58B59DF866EB62BFCB370B227D636B230617DBA681F454D9799F6F5C2CCBDCB4B668A8B7F054685E2EFD592D4FDFB7506E94F245DE1CC0EB802E02E4FF92EBC7EFB3BC469EDBDC5DAF3AE2AF27CB50884F191AAE70B1FFE68DFDEAD1D9503D3DADAFF745DC5FF18E87FA7F56DC3F19E96392906F80ED070BCCF58846F8D17579CC45C0E4FEE4E9562502FCDCAF7188AC0950D5CAE00B8EA6A7E3D093CF85C2E5F3B672FD3125F9BCF015F7BF2ADD6690A8DC22EEB485AD5CD0C6072738441FDFE7E9F818756E8756DD58AE1E34A3DC45C0A28EE6BB0706DFD4CFDCA844CE354CA371B3A272E1B8E8D772C564A009E8864A4E57358971AE11CDBE8D0B9FF3DA633A5E961B4D3EA7941BA5E9636202505800BF28EE8D70862CA2CF721722090737E156B77B6BFDDA4EFCE0C695C3967C4EE6EDAE2F6C789859C0C709F4B9EBD1B8BD32DD3C45BF93107F043E4951140C1EE3D59A840DA2ED43B61899CF68E2645E9FC95AE4876FD2E59C4FADFD96F84BE6C723A888505C5F2E9AC8C785767B000CC4649AE88D6F027CE3C2B74928311918C164CEF5B4E97271A757683C3BAED8C4E2DFB4BA71708E3F117534B65838C49EE4C0A76D109D28BBEB5CDB9023E6C4B08B73FDEA2D7C87D787FEDB2C7A886F8CB267C6B2A26E0F8CC6D479CE7D4B9FC8F695C80F131380FB9E98BB9A418114076B84834C7FE3CAE1B5FDEA51E5C695C3639E6673777D7573773DD1A9D2CA2E118EACC45B51FA3854C49B4514AC4C383D12F1F138997287CF2733EDDA4133BA4C040E39A1BDD5E8DFE7E97C22E0694E84ED4108B121FD34591F2D9241A8D236278E5C34811E5FFC789E9C8862BFB988823B7BD14BC41DE25C3FE9EE45BE7BA9F3C8F32CEA82D66EE0FABCEB302E7C6A12B2BF99EAC177E91C8358B5B94253E1E0E7823B090CD44B00E72A666B23E6F18213230DD259E4F9325F86AB9DBD6885F4FCDC987D29250A87D479AEC939C7D20F9C642C73625D532BA9B7F098452096981C53890422E1B3E0D58C3EF839592CD1CEDBE900B600343677D77B52D458623284E8EA31A27D28EC1FBF6FE9814EA7D6D3079BE4121713802A86791BC097AD7C787AC7854835F2D016B3694C886DE6C225CBA42E27EED0BA5144042D3F9ECF3C38824ED7EF25769EE84C49D7175A5D7DE2B4A22E66B2CD8B06F91E7C69653AFA16A75927794DD691D7C1117F004E7405E95B61114CD4681B8E10A48DDAD300DE0770ECDCBE24E1DEACBA5AF503D20DC4AC36FB10FAAE4AE48F5C750009A40B48C8C24552D27E8881C97A17001980343A7B51A524FEA607DF3B6396D9672DCEAD26D29F5E6DA70FB60B7D58EAFE89742FAA1938086E5A305120098A69709038F11722F6C97A4FC1318982A58359DEC669B5D707C731E96A0AF39DBDE816E77C689C10CEB5D088C1A2A0CD0C2988F82B2A773214D606CAD25F9B26775D2BD352EB10C4DF31B97AE1E9344295BB2172A8B2EBB7003C4D1C6C8DF8D3BE339F0A0A7FC627ADF0C12AC7A77EB2E8E3B288980A012875014320C28BDD2382AFB3173D417A7FEE5C0EF61239411AD3F8FC2E521A794D71E1B350C6379A32339FACB8F8974F7859B9552C14DAC8C44B697C0BD3B43880ECD8EB06666B233E1EB70ED41EAE749F660D2C1682DC2DFC49C78F74A79C956FB258CA39C75A1C438889222D64756748E10B8556A4FAFA60A95E6863997F7B64292B2DFBF30417E16A756E37F089549100A05AFCBAEFAFD7D9FBFFDB3B9B5047B22CBF1F855EBFCC5A75625CE5A255F4227351B56C226B94331ABA6B350586140D55D060F0C2CB9E5C69D3B33098A1308CA17BA355BA37DE190C8D33F1A00243F5C254356826559D412FBCC806676237AD76B96A3C64AF32DFF353C80BDDA3777474CE8D90149242D2FF070F49F1756FC48B88FBBFE7E3DEA4F1657BD985A7DBC8D8587D9EA5DDB35A97B1CC87F3B82A784EBFE1E3CAF3CEDAF46D796DAC7702A88EAD08C07590D6BC5F347FF706BB7C39EE0AA26FBB88A177AE9C8CDFC2797DADF1010F30F9A6C92F2E2BBE855D2F448B2F45D9932D23024526E2526F98B7297AE9551D1397AA611962E7C10DD49AE5CCAF9B1C8B2D1D2D2684788D0B11FD8F75CB66F4F018743D30EED320FC9AAD15C759F3E237F5FA3A59015BBDFC39D12CB6B3D5CBCD218CEA545F8D120F4B4938D67722A27FF7DF1BF3FF871048DE4C3D9590C6E7AD7E336CB3600D53EDDE6FC590351322A23F1935A4D05BE9FF94CD66FFD102AC30A18DEBA6D72BE17D96C61343DE34EEAF09896948B52BBACEF7E1A1B29318C04D112FE209CD5ED04B331380ED52767AB77DB3E9B02F4CA6A634E397D084A6D4A4C6922BA64CFC11AF97313AD6344EEBC6DE5481283B3675DD429DF8FB2A65C8ED5BBDFC2224852C583AACE37BD780E3F2641C9B8CD513535F2DC5407170BC127C93A2F961ADBAD44DE095415A998AE239EB7A7E96654A0B08A2F930304DA285E7F13911DDE6E7B9CA29E1BCBAC6D607ABE43CEC40BB68ABBCFE96FB371672A1D779EF80B296C258877755AF0A589DDA0BC04DE61A047182B5EF2C7C8F26EA10AD27FE7E34F9EEFD5F347FF769F196F5C06A3488AEC7FF1301D893C13069CA9794DC3EF6120DAEA666103BBF25A277BD97DD2E5F7ED96C00E8B3320D01B36ADDB2363D4B9D01632DF7372FF7AE4F18BAE36F88E817E37E7287051E278F5139ABCE25CD3227E773F986639B42C013A58768A9F03A239EEBBDC0AAB31782C5BE59245C38E9C8FA5FA94EC06585D3C28DD330A8BC58F635058B5F0C4BC46E7A6F591D5BEFBA452CF0D1FA8965F379C5AD67C62AA7C8D208AAA5F60210EC0E6BBAB7A2399B0F3DBB9788286BD38FD311FD3C7C37AD1E2159E15C066A13AD9FA02033F8C4319FA5237ACFB2606CF345284559AC4108F55E10BE5594278F4D41187B8D8A38C6B4DBC9DF0F56BFE744F40E4F6E2F049C9B1D6958FC881CAB5FA8C76B76915BE23426522D115017D8FA55261BBB8E38C263AD6C601689BB08372AF3CEE876F2CB713FB9619D4F0542D0B4DAF177AF3CEF3E8F590563CF8C2EAFA84C502DB5890104BBE54793EFFE442FB306DEE6E572FD2AD3C71D022CFEC2F7851711BF8CFE76D8F8965EC6BFF5BED6CB4A2E4B47B33100A50009C779371381D3F225E97D56018B4E7D2EBACE44B358B1301DD58575ACB2E5E972D259BCD39927B0F9336BCFC63F235A0A6E3F97569CAC4DF3FB5B64EF9ED1CCDA7719CEE50FBC3EFCCDC59FBECEA91A5CD8BB07E4B512BF6B29FE34FA7FAE1BEA2AEFB9AA28AA33AFE379A7E5F6723F39C5DA36C9DA74D5EAE557D620F0BA4E2CFEF4FA75C590F7FFB396EB659660D4028DFFE46F79EF38CFC92FADF5107FBB0102F044F945F3773FF3D6C9C1BA3DABE0AEEAB92BB2363DD32F2BD97824D4E0819B97B2058BAC0DFAA529C51367BF8A6DE62E4BFD6295C7AAFAA5288FCBE7EF899C713F696C9204E2A1CBD419D7DC88B32B3E24895D0D86C96DDE87B359D311FDCC1931A0C9EEBD7444ADC77FD730C58DFE9F79165FFDFFB11ABA3A33EE277788ECF322B22D9C75C413313289909F35AB3325EF934D3A3725688EFBC959D13CBE9EDB37766F656DFA492666F050EB4CAB9BBC06FADD622DD3F5B03E8B5CCA6AFD5FC8F5459D29502D108060096FFC3E4BF8FD68F2DDBDCCCE5035E988DEF35E76DC3804CBDD1FC6FDE42CF6522EEA51EB8407EBC5B70FABCB2A2FDBAA5ECCDAE2C9DF83C89E589612B6A03AC343FD2F22BAF4046C880F7CC2CBEF3D99CDC36C8978AFB194EBAD4EC3A1345A5918F6472733C9CF6D7538AAA084F57D3218266DA2EB7000793FC9FFA91C06A7CA041031BCD045AB975F70A746DFD7DA622671EEBBA5E1B5D211FDACC8DAECFD1F2D2BAA578F98C8D3DBC9E35BFB1BD6727E0EBF3AA48ED4A1821840E072CC163F0FEBA5A346E4BF64EB57AC475DC41FCFA6F4EDABEBCBEA1D6B570DAF2E2B761EDBAE13D74507E4C72CACEB5C2B2D722CF7A1D7D8591611AB1E75B69C656DBADFEDE48F88E85CC75D12F97160FB240BF1BAF2BA160912225A98498368F95C5ABDFC392711D1CC4AB734E3CB2A84D8CA7F180C93FFDCEDE43F25A285D93BC236D31086F01DAE933887A519878ACACC44924E44C4FD9888FE7DD1FDEB590C8DE315C6016A8AFE5775B8CF4E0508400014C12AD5EC76F2171402E4636E5EAFA1B44443E8FD4F789C4B6B9807EBD8A26E5B6B8CC54B7F9E2C21EBC48DE80E04E03CAB9368669DF132AEB5E82ABA3E9ED08D89DF32C2FE10DCA416DA1A2563300FE19C628235A7E934A1EB71F23C714FB4304C105B8A373EE720262744744ED753B14DB5102D125D5E9D8BC8DAF47D22FAC23A96C673393BC7353B4ADE39C9639679FEC0EE80000420107B1113F996A255D1A28A45E0BE5E8CABF6E2C3F25724A6C5ABBA1ED63A2EDB5AE6FDEFBC46C83ABFA2B263DB1C2A3C6C4E19F1B1BF5A16E3FDDF65A7459CDB844407236CF78216C7025C6B5EE4562FBF78F4778DF33F7DD268C80E9EEE3CC53A7D4CCC926C09F42271E8756C56B55CC7CAF49E95D87BE5103A1AC70A62000108E81796157F5664A193CBF4A73E463AA2C660984CF877D68E275F6C8B32C287AF859805E58DAA5FD89608D5E72FAF95B52C6611CC0AA690B3FE0FF258B1EB94B5E9ABD5CF78FFFCF3AF16E2E0A4FB5136EE3FD8F53D5984F5ACE8F562CC4E9DD0B030D44FB7938F4232CCFB9C58B4AAF8133184E71FFFD9AC4A9C74C2D3B6C9BA857A2C5827ADFB4CDE8365ACD07ABF5899FA592ABAA656399698E33FEB5995CFA775CE75B8B74E89DA0DEA09C02EC8C420A562D9C2CBC74BD2885909E5712C6142743DDE1DF5684A1D3267BF887D5676118C3AEB7AF06FAEA376596FA32EBA81D1CBCA5829AD7DF4B55CF53CBCED0FD572D1EAE58FE86DFA9FFFF5EDFC1D127180BC5E898F5AE17516D211355ABDFCF96098DCE67B95076E1F3BF68E713FB9C7B3D16897B0B57D4822FA9E58D4944308C979ADC3F1CF5ABDFCC978749D4C66092DEF9D12B36CAFEB32F6D695159B7A7B6B5DD97796ACEFA13E4B870A2C80E024D1E24FD3EDE49797B311423C21F75A1C6B49A4782F56A2D9587A44743918260B22536F1F3B7E9588BABDF65CC144D7C3B2743BF9446C17B5AA6D52275D0F591F656598C87AF27E59C8948C09696DA9B02C7E5E035BC65A5257B2367D36EE271F8FFBC99DC130391FF79306FF7F75832CAF719DB0EED120DCEE84EF0B224CEFA744DA8D201E799939CC514816B917D69F0791D80C96C3F94C2361C8A24BDE8FB391CBDC63BCDCBB4FF53508DB4C62A2CED8BE309CC23A7F4DACACB248E177A8CFD3A10201084E16AF01EF76F2D160989C9F4F97DF8162FB9BA221B922A25B65DC64FCA21BF7931BC29DBAF492978D6F4C0CAD4BD6A6CFF953BCC46F7A8D8CCCA2FC4F4F1A5F8AF3D98A17A18CDB55D6415E2BB1EF1BD6BE5663AAAD7BFA7FE17D1EAAC5221DD187E23B4F93F60D2F33DC814DB9FD0EAB5A48AB97DF153F7FD3EAE5D374341B2AC81217D6FFB8D5CB9F84EF8F894866EADE0D9F176148171E7372A266F279218F1D86259A67AF7BF71377A0641D2DF769CC5A1DF63953BF4D2BBABEF7F533B3AA05506359C72D712BCB8FED0FB60B0420385974E3C0BFB9B74E440B033F3BAEBFDF8697EFFFF52C809E98E306CA1A78D6725186633CABE8F4DF0D9F3FE0F222DB7E212D1BFFE2DE34DD754FBD4C795EE3A87F5B0D9E67EDB31AE363439CD79BD6F874FC59378B27FF7FC6FDE429D76B304CDACE2C3B4BFBCA4F22FA7D38D6C7BC6FB0F63D15CF27CF177D41C1EA276699B963650E5BA28BEB24859B27DA3C0AAC814B9D5BCF52A73B31DBF036C48E05C1B75F20000110E897661870F84CAFE3DF6998468D8485446F6B890AB1EE277A9C3B631BB9FF7C1AB50D79193E5F5B2B551D7EC0EEC1D0C8FD7ED72FEE9865417E6A572F6F5F644189091BBE16C7DA580557254F8F27978F62F76E1DB0844E10B197FA5ED0225FEE3BEE271F676D9AAAE9E07E133ED9DDCBE77E1EAED3256F6F75123C0166B9582DE1E57552F476FA7AF07ADDB1B1EA73EC9D1B1007C3C080ADF3E0167DFEF0257DE0AC9B3E7C598F46C51310DE77FEADF7E7EFFAF8DEBA589956CFBDAA46D8AB47ACBE751000FA1A58D77DD57359A5B13E6658D07889497BAB182DFE8FBA9DFC3111FD30C4D312D1E2FFBCDBC91F0F86C9477AB9C36B22BA198E799F16E3FF26DC0194317E5C1FEBDA58BFCBD4A38C05DB3A57FDDBEB04EDFBFF07EA072C8060EB48F1F7E0D6E20B8DC5DF835B34D5EB7605F78EBB9DFC452CE646BE58BDDEB57631EA638806CAAC872E472ED7C7DA9498A5519F17D7977FB77AF9A3F0DB9C7B749B14B994A435C572C159E71DDB765BE75127840BD55CB7EFEBD0EAE5CFB90E2124E323525305CA29FE781817FD1C3AE77193DDBF6AF98444F28B3508BA165A459634EBFED4F5B4B62FDA362614C3F6DD2CC41BC2DA07180840B053B4E063D1F7F025353C4BE0835BCBF35E6E8A7E6187C40F0EF06657D2C4729D948C2972CB24BA9E168A97C72C0831CB41D6A6FBA54E388EE90696B030E03A8B06363AF7E83689B97535F2FFA3AF59090BD149D0EAE517E9E83A798288A8DBC95FA87BB38AFBCD451E3F6BD3153F7FE37E724788D466C8A05FC8D41DF7937B9640F32CC4725BCEE2A560FD0B491C67FCDBB3EA31B1E7BF4834EA75B1655EC7D22B5F9CFFA7698837DCB79807F5010210EC04CFF2A7D75B56C0872FED6CCE0D5918D662304CDA3C6C43B7935F8646679E59C72FEC584F7F9517AB9E94DEFAB484A72148A3C3D9C410C7BA19B18E2C605988F6C52A9610B95E5E33CFD25B653D0F816001BBA1EF6FD929D2D76E1B743BF9FF269A59F3D2119D753BF965B793CF5DD321296B617E6EAEBF3C17F9BD486C85736FC8240E1684BCACE89E28135AC0BFBDE73D52CE4276B65CE13DB7969511000D6200059F341AD3BF9E1A637F808D79708B9E3D7C394B6090717F3A0670D7318132668803C18996636AF4F6ABF4EA2DEB9E179F26D6CDA7ABDA860B6E158B573ABA1E1FAD8A395241FD0921117A1AB5D900E681AAEF493DFD5AD15CD9DE33CAF597DB58717172A6102DFE88965DBEB198D29815593FDFEB5E9F55F0E2130190D4A73B5F03A4F8FBA4D18032AE90872FE93D76F94AF1273FC3768D6DC7025A2FF2C130F9881B3DBD0DFFF6E2F23231E0B0DC476E2BF7E772645999185039F4DACFACE354730516CA29CC460CD6D0ADD401EC9F4C0C2D648529F0FDCAF764B7933F2E12156A6C3EAFDCB98B97681656D0EAE5573C1D1B6F13CA6EB47AF995150F67892FAF7E62CA360AE7427AD818EF185E47D012A6BA9E96105BF559B2DE49D66F5556617807385D20001D2006AB85859F167F448B7181F2F7B6D02FF26E271FF16F11EB7629B7D52F72F5325F72A15ABD6FDD5028F7D2DCB2B24D9155E4F2B42C94C2257E74EEA4EC40E7F0AD92540C2D14FBFF0AB7F0477239270485EFCFC338794FD4EEA6F84A43AC2D8FB537EE276721BEAF199EC5264FAD361826CD562FBF509DAFA5B972759844B793BFE0EF9C35CCB18E41E45E4A0B20BF033CF76DCCDA58643194ACFA2C156DEFB894B7113E038E84937701B3DB17EEDFDD6059FBE4A7B5FD3605A17C49FFF16C4ADFBEB28BF2AC70B1781FEDA2D265BD3121FAD3278D46B020DE2CAAEBA6E22B6BD32BD92078EE684F808AB8C54B6F9E5470B8C80E0BCF8D4B34FBBFFFEDB031FD6167DAD031A0D27DDAEAE5CF89E81DB1FA9C6831E1891183A04F693606E1B94C342ACAB8F53A2D9EC54DDFD3DD4E3E916290970791DA94AEEF881BF90B0A03A9EBE31491B5699C569040A59F690056E1E42D802CFA2C8B1F2C7FD5A0459F14745632C82E8683C9DAF42A6BD3957C69B3F8E3993F88EC589F32EB62CBB9AC8FFF6CCA0DD5FC056E5912ADB2D6211DD11B969B28D6504A38501EE2EF3891F798FC1F0F860925D4982749743BF984AD773C1D5AD8EEF6B89FDC08FB9E8BEDE765C8653CAE9ECEE695AE67C78AF6DA5A1E84D955AB97DF954296A786E36DE4B4860C973518264D2168BDCC7B5EFECF3C8B60D1735A85F80BC781F8036B73F216408DB604B2088475B01A9C2CDF86151BB80DCB5F78317F938EE82D1D0C4E64079A8BFDE436AF5850A97DE6C91BBC9F655593598CDD4E7E391826E75E8C51D5E7CF0D2505B77351003B02CA4F077DDFC5848C25A484556FC98A27B36AE5B1D98A187EBFB69EAB555CABB2BC3259EBAA8E7789682833A22316C0C23A00506720001DA410D42210EEE2F5B0DCBDFBC802F692392465854F26B2238B441FC3828FCB51C722B9DCAAEBBA0D4EB0782ECC3D5A74FE96AB8CCF3915892AE038901D038D751FC6EEC9562FBF1A0C9326C7D3CA4E4E4C50C96317B97A5579CFC7FDE48EB6DC599D3BC36AB770DEDEB311E910A293040E0E08C0801479322E90D7CBDF107FEBB3CFE40F865FF6ABF4ECCBF4FCBD783F6F995E5ED4206E70BE5FA5237ADBAAAB5586751E620068DCFB478ED7E9B0C44DE8245C4A8B19E30923CBBA17EB8814D5B7D5CBEF8EFBC9D3F0FD1185E9DCACCCF558590575FE3A1DD15BD67582E80387CAC9C7004A3CD72FC45F35C84C603DDCCB0EAC7E721AA405F1F7657BB917241B0ADD8058713FBC8EB72FD320709C936E6CAB6E50D211BD1D6B60E5F9C8EDB48BAEAAFA80FA91B5E9C7FC5DDF7BFA59D0CF83167F7C3F599DABD83DAE6352F53EBC9FAEFBB89F3C6DF5F227C1F2F71105F1C7FB5ACFABF51C4BAB77F8A4562FE763BCE5951FF10E543E83110055020BA0C2B3FAF1EFFDD4EAF88859FD1EDCA25755CFFE91B5E97E3AA24FC38BFDF160987CC42FFCDFDF9CD23BAF1B8583BB1689B2A2C06F891E8456ECFB0D11BD29B7ADC2CAE0C57615592B754C175B7BD6AD07387C6216426F1FCB9A2E7F5BDB88E32EC4ABF236215EEF17E37E72275657AF3E9E653024813575A7A7ACC52FAB28C317806D030BA0822D7EDAEAA7E301C1EAC4B281D5BA6D64B6FD17A2F9F85F1F115D67F9B1F88B8924B1EC997570BD5D9158B382E7C33E6F5A56B955C55FD6A6CFC2E72B519F5FEAF372F695E2EF42AE93E28FCB00C743D6A6CF9DE54B99AD961024F233E5B505507E5A824C3C4B67C2AA28C7129C8B3F7E9639EB576C33895934F572FECE630FF231E5FA126217E20F1C0410800696F0039B1373F3EE60F0E779F2032F9322CC6A901CD7D17BF2B7105A575623A91B43FE2DB380D57EAF65636959454A9EEF87E1F30D714E1FEAED8A621A59F059E3B259C703874D3AA20F9CE54BA28E6841044E789D1537E8758CBCE3F2B1E567D846261EC931078968D641190C9389A8DB99F11C2D0C48ADAC7F8F07C36421A18B9F8155BC01001C021080066CFD93E3016ACB1F2C8187015BEC2CF124C7FB53FB98D60EC76AC042EB4C6FCF9F3226CA12889C2519B86935B0F2B3F0A497EBE836569E6BAEDBC9DF97EE5F8E575CB56C703C78F770A0A9C59CB61096B1BCC9E37BA231CC36F28485190F2FC3338D48D1E7D555FE90DBB27740C6BF5AF504E018800014E801A0A5F52F88C2CF316BC861918EE8BD2C0CF8AC1B83713F39D33314786E1ECB1A6894655A3A74A3198681591055BA5CE502AE2498DC12B5DE368361F2EBF0B9707E55D4031C1696E54B776CE4B6FA5ED616381DDE10B39A5B04B76F9BE85AFCFDFDBDE974DC4F16E6CFD6F5D2C7B63A3FA143F6589F6BA90B05C081812490154136F0E1A162DA9E0F86C9ED32FBAD23783C8B9DD598C8A155628918EBD6C5AB9BFE2EEBC5CB5ABDFCEE7F1C35BEFC97ED690319C040E3DDDFD676BCBE8CD0F3E25D3335E599B0FA5DE841D4F571628920BA8EE1D88F88E87B44749B08431F81E30502101C25560395B567433C8CFBC99995016808B72FBC982855D67C80652EBB4C1D5579F3F98063C26C153CCB8DF5DBAA13D13CB87E7ECD60053C4DACFF7DD1BDC4E87BCA3AB6DCD6587F3F1DD1A7FC9BC312AC2CDDF07542CE60D6B1FAE9F28310FC61887FC5A0E76BF0E0167DF6F0256285EB0A04A0015CBC87CF3A1600C11744F48355C54ED6A631117D2716EB1444E87C26103988AEA8CF6732C1621D11A8CA7F4D21B6D0B3C2788D79B0524EA47B0D9C2E31CB76D1FDA93B59EB941FE2FC9A6C35F73A4B31CB23E359D95BBDFC0911FD5322BA2DE605BEC0F047D5B08BD99E40392000C19C637C30BD973F8FC3B76983A4CBB21A955562888A123ECAD43324BEFC8774443F53C2D29C0145EFDFEDE4EF0F86C9AFBB9DFCC56098DCAEF21A81E3C1B30A5665C126221AB5A7FFD81E35FE49188A8507785E9AB64D97C7CB4B24A2BC66D772D6A66769C8F297AE653D8731581F6B3A50B03F2000C15152568459D6822A858E1713288781B1EA188B235CA56CBD5F1971A9D77903E3025096759EAB4C0DA8EC08CEE8B48E9E389478F5F25CCD603520F6EA0B04A0C1278DC6D77F3D9DBE55BC25A81B318163E13518599BF2903111000018CB49444154BE9F8EE8579BD6A54CF97ADB4D1340D6B1C21802F59266569626111A41B03FF4B3C0D639FEED75B2E47A793CCB22A89F8D30CBC89088CE8970FFAFC2835B74F5F0E575CC64D15CEF1088FB03C3C0189CA2F8E387547F1E1AF2451EBE4FF43AFDB217BFE500B25B177FBC9DDE361670BF8AA8F4EAA4CBB48E3D1826E71CF7A7672D01605BC42CD33C372F11FD463FE75EC7CF7B5E8A2C923FCF1A5F527039AF7B2EA74810730BF1C2DEAC4F45C2106C1FBCD981199771680FA5256EC267B3DBC91F8B048C982B6867890E7AFC414D9920F6A27D254E76A56B19E47283F87BBD4AF900AC4B240C8106C384C6FDA43118266DAB03238FA105A2651137DE15D7E57DD14888480ED00E4AA0859E6550400C607D800BF884D10FE1213E943AC92135A67C63948B732799ADAB64237AEE28C3A5FB753AA2B78CE59F13D19F5370DB1665F8EA7A59B182625ED5173CEF2A00BB2213C32331B1F83E2B2BD97B064BBA821107B8019E954F0BC25DD70BCC8005F04491563F5E76A00FE23744F397F899E552B51A82C130697ABDFF552D6E1EABB8812DD1E7B96AD31199210AE9883E484774669DAF167A9E455097C75617883FB00DB282596EBA9DFC0FE2FBA59A36718EBCE7ADE429ABA313B300863100896826FE444708AC8076FF125DB73DD63AB05B600104510EC52AB88ACB548EC3C7FB6CAB3E4EF9EFF3546B12CFFDB56A76722C289EC220B931CB5FB7938F06C3A4BD4ED9005449AB974F79DAC4F039190C9385216062D67E6F0818CBDA6D94BD30DC0CAC80EB63B52387D2B61C33B0008228757D401DCBD8D23CBA163283704BE2EF151FDFFA64F127CBB712538C841659C6D4B29E789990E2BBE9F6969693C13069B3A5A5D5CB396EF22A9B0DB901C0D6F09EEB713F69B0E59E97C96747FEF1FE65C55FA43AF788E6C26F12D90E14A0BD4DDE32B05B20000111F959BF357E405F13D9963FCB0DCC8846626B2FF474446F581606AB4E65EA6CB9AAC279BC616DEFD469C1BA68C54885EF2CF2CEB9E165CBC72E9364C0E921EFCD562F7FC4F7DFDFDF9B469F0DFDDD73077B99F55E2770DC4F9E125DC70132618818B0226C4C90C9217535309C0A10808088FC07B16E0FA8104337D7714D8AFD4BCF15BAE2F15FA9725C379567A50BEBAEC2FA895C5F74BEDAD26109C7825368866D2E65C307F10776C960987CC4CFD0B99895D3B2DA7B9D276D0DF41243D6A8DEC335F601018EFDABB171E1648000040785E5EA21B25FE8D6CB5D0AA96C36655AD5F55BB2CAC986A74C8313CE8F05D75CA896492AC96699D0E6B017F2F872B9D8FEFF88CDCE31FE1FD8263AD1C97AAEBB9D7C61C8242DF6B41B5897C1C2CF8A07B4EA237FB77AF973690167C6FDE4DE5A277C023CB8553E4CA46EC68553046F78507BAC2C5DCFB523B7E5F83512563475AC77B758ED5BBACEBA7E44B3064ED7AB8C45C38333A1755956E6232F17D7F3ED6E271F656D9A8EFB49430CBC5B98AD09C0BA14C4EBCEE7ECF6B68FED5FE4258859E1C7FDE44EAB975F8467A0894CE062AC1940407D4116303808BC98B532880CC2C7E37EF2F1766AB848A6E628F5B64B47D468F5F2AB713F3993961075AC42316809E2B2714FBA116CF5F2E744745B37BC00AC43D6A6FBE9883E75D699F76BC8465F988566957B316BD3B37444EF599D9D589294A6D5CB2F08D3C1558E9E2E0EEC075800C1DE89254084F5CFC267D40A65B98F88AEA732DB85F8E3248A548CC757048F49A8AD74D675F15C57DAC52C1B3A2FF1C3BBEEE37E728787DE209A3582AD5EFE6485CB00C01C29FEC47DB7E02A7432752744D75672B96D8932DFE3E31475A83CEBBC04E26F33B46B18E2AF1E400082BDA07BE04E462A0B1476D5DEA4159022665796ACF47A2692576259910BEA0BB9AD132F3851F18BB2D19A88EFB17216CAF0C464AB975FC875E37E7203714FA00AC47DB5305B8DBCA75BBDFC79787E9A44D71DB8552DFF1ACFC21E8BCF1DF7931B9B94096640F0D513B880C1CE10BDFC9F10D14FCB88B202D7EF845443D2EAE5178361721E84DF82CB371353C5ED02DDE0F0EF6E277F311826B7A58B4BBBA7BC6B138B7DF45C5C31F43EDD4E3E0AABDA44F359102ED01082AA2872C386FB703218264D9EB2B128962FECF7ED74447FB4CA93BF57ED0CAAD8BFF7797818000E1D08405009599B3E4F47F4815A36A5D9787D378B848DDAA7D48C1E16DD4E3E21A226BB6C5ABD7CBA6FF78D1682AD5EFE7C304C6E135DC727C6B01ACB98D0D3AEB4B2A2B0DBC95F84C0F7F976836132D9A56806A781774FEA65E179A62AE6ED8EC5D27AEFA6562FBF3BEE274F3127303846E0020695908EE883AC4D63B5AC91864191CB8A3F764DCAEF7C2C755CF3F7B89F9C4997D1BE5FD85A8885DFEFF07A4FFC69D798BE0EB14FCFD5152B83689EF5386FE8C2EC0B107F6023B2EB312DE7C87BCFBA87C3F02F730BBF3ADE6725CB8DC6F695B4040E4527D29C8718804305021054463AA2965E5694D96A252378090C7A7FCB05CA43BFFCF2CFF763DACEDA745FD7C9B0749883505B629763FCD4F5B9E27596B02EFA6DD479DAEDE42FB8A193D6D3A2F305A0043CB8B839F38DB60686ACF8065BFDB4F52F1DD187650BB63A4FFA3BFF7612A26E84308829856C60008E050840B0353CAB5F19D76E592B16C3DBF1B861FFEA4FA67B19C22455C35DB0B5425B2965728AD138EAC1549BAAF13AE37D793F2D9AD5BA2B2F53987F73E6AF18F76FEFD6537098C84E10D1B2B88A3DDB6108A28997A1BE0ABA23E5249899DB8BFADC951DA3302C0C38324E75CC42C40082521459F2B4ABD20BF0E675ABC4AFE9EF1622896169E0D87D60C5ECF16F0E70D7FB588920FA5A4512624AB97FADFF8BFCBF21D6095489F54E883DD7553DB7D92C8BF8A6F50C5938E2EF112791D52196186C9707B7E8F3872F17E3D88F1D5800412974DC1DD1F2902DCECBFBB5DE36468180F9432CFE2F30915347ED0BEB7A31DAA5D5EDE4EF132DC72CA986EB1BB9CE8AA1F2AE719135458CF7C7DB20D6095482756F5AEF0D1D2AD1EAE5D3AC3D1B9268CD72DF288AA3D5DF0DDE69F5F2056B7CB050822382AD7FA726FE8820008181E182B4B6594AD27044C64D2FBECF4B64E0ED8CFD5A9640E486222C6B12110F65523B2C8BC76098FC9ABF1B22FB2A2C7BD372F9F26F793C6B99BCE6B29C562FBF92AE5F22A2C13041AC13D818F90CEBFBCEDB9EB37E8988AAECC859CF9D7E0F69C6FDE49EECAC052BE09DCA2A05768AE5E67D708BA6A73C2731042058C2CAFCF482B72DD16759A9E472BD1D6F53C615A4E3DCC23EBF245A705FD662D062D5B8FC55513CA4B89EDF10CDAF41D34B84D16558960DCBAA28FFC6FDE42CC400364402C86FABB902E09471E25BA7FA3E55B1A867E23E7FBCE9F893B1F7534CFC31AD5E7EA593A3C0F1F0F02535A4303CB55840C40082D258D63BCFB568C5FDC86358C7B5BECB7D7579723BB616ECFB259DB5699CAA6CE898D0D5C4D6175DA3AC60FE61EB7FD6EDE47BBF66E03859279E5558009B44D53CCF5E0C60999859A2C56C783C2B87075BF9B4B863CBDF295B0161010451446FF94ABE308B62FA2CD153246C4AD461C1EDCCCB42A3F1A2F4496D112DFEC232E9261F2B37D7A5277035916BF84DF86CC68EA15D7241345F16C50802B00E9655DF125CE15E1C753BF925CD06713FDBD4E216F32614B9A22D20FC0E172DEE1EBEA44691E03B154B20042028CB3C6B55C7FE79DFF5012CF1E67DD7622F967012326A6F57749E95A3EAFB1DA2EBF826E9E2B2AEA35CAE8F297EBE69C5F749ACD8BFD0A89DAFD320025084BC2763E11F44F378BB1B44D716B72A122E64B803D162673456BF50FEA3562FBFCB7582083C5CB4A0E3DF0F6ED14FACF5A76211C428FF808888B2367D3F1DD1AFF4722F41432EF35CB891B2E64334A8E585EE612B868888681CFA3241D8D4E2BEF604AE1C02862D9803BA9E1338B6AF777CB9CCBBFE3C051DCFAF4A04CB06D81E4571BC7299BC6F79E0E54DEE4DAF03A5DDC10549201FEB2C6070984877AFFC4D443FE5DFA7E80A86051010119125FE22DB9A162A25D6AEF43EE2E792F8F3AC83DA7DACC520D14CF485CF5A99EDB5452FB8BA1EEBEDB460B56295ACEF5E999E60E4F987B93C1E6AA3ECF90010236BD357C6B2A58E4C5118C9A6CFB17CF7688B9F2C57BEAB2222F00C9DA4C3E2C12D7F140BCF1D7C8AE28FA86602F09346C37DF063EBC0EEF02C54C6CB7C61A063EFE5AFB3523D2B9FE5AAE976F249B014CCAD59FBB6FE79E28D970F86C947D63EC675FD4BEB986562048DF8AAC7225672DEC00E860985B82BB001C29D74D2EFA874446F67629A425E6E59D9F4F3DCEDE48FA5CB7743EBDF99AE43ACC39A3AF35DB77AF993F03925A289B50DA81F0F5FDAFFCF07B7682AFF78D96E6B572F6A9705FC49A331FDEBE9B451B40CEC16FD123784C86B5223EF5BFBC97DF536D67EB160EE60F99B0BCD7DF7D48BEACFFCDBF7F2FFF76F9E25DFE2DF31AB5D115EA0BD976D29B3A5CBB8EB81CDA95A0CD6A14CF257AB973F22A21F4AEB745519C05CD6AA49684100DEA559620AFED707889701CC445CC32741ED04A006E2AF1E70DC1E513C29C18AB7B17EC7DC9C7A7B7D9CD058FCCDB89F3CADF3D465599B5EA5237A43FC36851AAF138DD4341D515256141A96D1F77970E960F56B066B1F115D5BFE361D63ED1428127A5EC30181E83FFF5A9489C4A40B9908B26916B057B67E0795E9042109E4B090CF9FF7DDFA7D6AD4C205ECB97759FCC1FDBB7F5231B552514F5ABA222DB7AECCBEB38EA3F7D7E586F9399F84CD6B3BEB07895950F439CBE51CC318046383A8DCF8648C6EEC58FC059A62398DFB49231D5103E26F3DB4EB48C610C96D4EB551912E609D6C213FAD8E1DCF405381F8BBD2EF225927671F2F1EF142C6242229E43090CF9FD5393B558B9FA656164029F460F5DB0F599B3E4F47F13911B3367D968EE843B5AC68B0D55BE988FE5864D58AF5CEAD17781D7AE631976BCC252C076116CBFF8A4266DA8A4C280C02CDC7EB76721A0C93F9FF80B37FE1FAAD8653167A1E417C2DC5E059581640223AE767A2CA8C7ECB151C0B41D1C879B2D1793A0CACE7D31AEEE5949FE35A5800192BF62FF61B544F91F80BFC05919DCD271336D43E2F2D51273365E5B1AC17B16828E6C1D93C6444F933AC066959D0C2CE6A60AC63701C9EDC3E1DD1CFD6A90F37BAAD5E3ED5D7A3D5CBA7E9881A3CFCCC263187A78AB4FC9D7AE0780C995061BD07F4F32ED78FFBC98DF03C5F55957861855DE8F5B1E7415A00439219C4DF81202DF30F6ED12B167AF2EF94C51F51CD0420916DF963E10777F0EE10AEDBCFF43AEDDAD1EE162F1B55EEEBB980CB881339D7EFBE2C80458D9BE7F2E26DBB9D7C212983B7B5CE7D1537F06098D060387BACD9FA67257CC002B83AB201D1CBE5275844760A2DC1C5DF5BBDFCEABF75A6539A852D546269F3CAB49E5DEB996051CABF839512D49007B7E899B7EEE14B7AC3127AA72CFE886AE002D6491E65923E9018523DDA0D620551CBED3DA1A65FA2ABBA7CF5B29850092FE3665D867EF1DC4BDE7EECA2D56C60A19B909AB1658D6300816721B082C989E052222AB6AA31D6FD29ACFA179B08C0D87B2C9688A2EAF28488BE4744E744F54C340371641670F8BC7AF892CE10033863EF16402DFEF47ACB0D0C4B60F58817E0C4137F5E3C9ED57BD6AE4DFDA9F711BF7F5B360122F4CEF72EFE560D2CE7B1F758FCE96BB1817B76EEE285F8AB064BE4C946455AFD20FE6658D636EB5D1171BB5E51105DEB209340ACB2CA5AC3D9D300E177B8F0B328DCC14DFE7DEACF29510D2C801E52E8C9CF7DD7EB54F12C5B31AB97D7D3B69223767F46D561652A1395B3E46D128FC716449DEC218FADEB07362316582E638ED0B8CC28937C41341BDA294CBD269F854ADCC0DE33A19759C8B14621040F0BFD2CA273B6CCDE2D809A4F1A8D295BF762C3C3C002582D5670B45EAE5FDC5E2C8FFE6DC5C4050BE1E7C7204CCAC6D659EB56157F1C33C8F17E4476C3C4D71CC91EEBF1E0D662ECABD5985843C1C0B2B088F5CED0EB88E6F3EE5E88DF955C43CB9B61D5C57A565ABDFC89F630B47AF9DD2AEA05B68F7E16F15C2E535B0B20116605D927AB58AE2CCB9363ED9B0F8C7C4C56A998CB3C6BD37D221AE87DBC6B56A6BC222BEA315DDB7D13B3E85903CCC2CA704D248E78928A6C61F5BC5C753B796516B7A27794F5DD3A0E8681392EF09CCEA8950084E0DB3F5E9034AFB7DCBCFBA9697D88049A5F590D1DD12C0E9007BEAD12FC3F76071A9172781D1B236E78DE41AC3ABBDF0AD38874A07EDCEDE45F12D1430A49203CDC14DCC0E098A8950004FBA7E8E558B4BD5E074132C3CAB2E6755E02482CD3DACB7254652E0850B07D4E5D147A9D9EA2C48F74440D230E70B2499257D6A61FA723FAB9AE87E7ADF08E03E1078E95DAC50082FD9185699CC2F7A5E9DC78B9FC24F2AD4E107F338A2C20599BA6D600CE729BD87123C787F8DB124593CB9F2A9EC5DBEB28CA583C167F55B97ED311FD3C9BCD613E2F47C7FF7931CCAD5EFE5C0E02BD8FC1E601D836B000822562D62558F556C3B2F811D9717C7A5F6BBF6E271F0D86499BD76FB3EE60111E43AC6819985164FDF3DE31622CC02B9A8DF35995202C8C99CDDA34ED76F2F7C7FDE4293280C1B1030B2020A2D52C7B459627B0C084C89FF24E5A5AF58ED6FF82C726732C18EE48F860732CA107F1B78C25FCF4B2D8BB85C5D6B89F9C6D22BC7466AFF66438A316BC0EE2EF8266E26F02F1078E1558004194B23181599B9EA5237A6FD7F53B3462D9D2BC8CB78B65FB86ED2744F48FE988DEDAFD9900102716F7CA948DBD6BF5F2E7E37E72679DF2F9BB55AED7E1E59948E43CC0AB940DC021000B2088121BBB4B6D07F1A7C89C7994753C926EA82C0BAB251443BCD59B3B3A1D0056C2BAC73D4B78F8FE35D17CF0E5394184FDC33AE57319D63B2CE6C108E2EF2A7C87F80347092C80006C112B2B3236E65F2C9B7AD50C6D00F64D4C6495B977832BF6BCC281A19F11D1BBE2795A18933094398F3DDC744E6200EA0C2C80006C11DDB894B1A612D9AEA9B2D65800EA402CF357AEE7EF9658DC82F87A5795DD94E5F37231EEDF0D39430900C7040298C14A64B3E9DB3ED8773D0E8D98C5AF4CFC1F0087861C424ADEE79630B4EEF32A8684298A3BB484E7B89F9CA9B29B9BD40180BA021730007BA028301EE20F1C1B2B0C03739788FEB51A149A88CAC7E35983A09719005A0EFDB26A99001C1A700103B0472CF71886D701C786145B3A94C1B0C03D0DE2EF420C09D3584588C56623B19E31ED121E0C93C9AA65027068400002B007F40C2B3A2E0AD63F708CAC725FC7E2FF8295B0106B28186F781819FF978EE80CB17FE0D8810004604F688B44D120B9001C3A32D9C2125F9EF5DB70053F2D539E1767189B19449481EC5F70D4200610803DE20C96BB34340500C744D140E78C989183C4E7E5AAE24C3E57BAEC562F7F4E44EF50186EA6AAF98801A83B108000EC815892873157E952403B00874418E4F94D2BD4A18C354EB2EED87CBA4C5EDEEDE493C13069763B391121E9039C0E700103B0638A1A39233104E20F1C24627EEA37C3EF25D7AF1664599BC6F2181C8BD7EAE5D3E00A6E8A758F0ACA5F284FCF4A229FB5C130A1713F69646DFA7CBDB305E0B080000460C7AC12E3878C6070C8A4237A2F6BD395F81D9D922D88B25658FE15D1722C5E18A7EF79F879BF441D96626D651CA2B4FE85ED3E08E52F4DE508C031011730000080CAC9DAF4753AA2B7C2F768B6BB35F30D2F0F717A1744F41B226ACB3242CCDED5B89F2C59C9B3364DBB9DFCF160987C248FADAD8EDD4E4E836142DD4E0EF72F38292000010000EC142B0CA2CC0C38321B58CED51B965F12514766080B91C7717E93C13099BB9021FAC0290317300000809DA163EC649C5E517C6C106B1322BACCDA749F443C607015FF3A1CE7AAD5CB2FBA9D7C12DCBBCD6E271F494BA1147F08B500A70804200000805DF28360E9BB920B2D8BA023CCEE8DFBC98D74449FD26242C8943FBB9DFC29119DD3F5CC1E44446D2930C332883F70B2C0050C000060EB646D7A4544BF4A47F461649BA5F982797999E4291681219B772AE3FB8888BF5F0E86C9B93C3E00A7080420000080BD628C7DB9345D5B59B196B5E9AADBC927E37E72C31A6F10D32D0230032E600000007B21361D9C97192CB6BF12DFBF12DB9EB1F8D316444B68567D4E001C0A1080000000768E350834517CDC3EB5DD99F8FE76AB97DFF5CAD0E55933906CE31C01A8331080000000768E9E9583E83AF1C3128144F497B1E3C9E15F785FBD8DCE3686F003A70C6200010000EC0D6FAA364B9C954D0A09FB4ED2119D59C7432C2000B000020000D8034290FD81C89C03DB9C364E5AF1AC7841B17D535B1365D97A2E60004E0D08400000003B4708B356CCB2A7E3F5E4A7B6EC656D7A55C6AD2BE20AEF73B9D59D1900870104200000805AE059E4BC0C5E43B87DAB4CB6AF70FF7E1A2B1780630631800000000E066F3CBFAC4DDF4E47F4472BB6CFCB3406E0948105100000406DB1C60A64D4302E2F3D4B1F6F5BC28208C0C90001080000A036C4049F47898CE085EF65AC84001C3B7001030000A835B1A9E1BCE16262D3C0C9FD01385520000100001C14DE3880456308168D1F08C0290117300000805A21E7F935D62D89383D8308630D1DC3DB575F6B000E0B5800010000D49A58CC5E6CAE5F7D1CCF8D0CC0290201080000E028C8DA743F1DD1A756AC1F441F008BC0050C0000E02088B96EC3BA01D1F2902FBC2CB2EFABCA2A09C081000B200000808324C40A36AD98406BEE5FEF3700A708042000008083C773F11AB182E37444ADDDD710807A0101080000E0E4C8DA74958EE86CDFF500605F2006100000C0D1101B424602F1074E9DFF0FCDC7488BEF17F12E0000000049454E44AE426082"

happypng_bin$ = SPACE$(LEN(happypng$) \ 2)
FOR count& = 1 TO LEN(happypng_bin$)
ASC(happypng_bin$, count&) = VAL("&H" + MID$(happypng$, (count& - 1) * 2 + 1, 2))
NEXT count&
OPEN "splash_happy.png" FOR BINARY AS #1
PUT #1, , happypng_bin$
CLOSE #1

splash& = _LOADIMAGE("splash_happy.png", 32)
SCREEN splash&
_DELAY 5
SCREEN _NEWIMAGE(640, 480, 32)
KILL "splash_happy.png"
_FREEIMAGE splash&
PRINT "CONTINUE YOUR PROGRAM HERE"
------------ end code -----------


From Garry
http://creativeminds.webege.com/SMF/index.php

Posted on Jan 1, 2013, 5:35 PM

Respond to this message   

Return to Index


My GrandDaughter

by (Login GarryRicketson)
R

This is my GrandDaughter, in QB64,
--------- code ---------
'************************
'* SPLASH SCREEN VIEWER *
'************************

DIM Andrea5jpg$
DIM byte~%%
DIM count&
DIM splash&
DIM Andrea5jpg_bin$

Andrea5jpg$ = "FFD8FFE000104A46494600010100000100010000FFDB004300080606070605080707070909080A0C140D0C0B0B0C1912130F141D1A1F1E1D1A1C1C20242E2720222C231C1C2837292C30313434341F27393D38323C2E333432FFDB0043010909090C0B0C180D0D1832211C213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232FFC000110801E0028003012200021101031101FFC4001F0000010501010101010100000000000000000102030405060708090A0BFFC400B5100002010303020403050504040000017D01020300041105122131410613516107227114328191A1082342B1C11552D1F02433627282090A161718191A25262728292A3435363738393A434445464748494A535455565758595A636465666768696A737475767778797A838485868788898A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F0100030101010101010101010000000000000102030405060708090A0BFFC400B51100020102040403040705040400010277000102031104052131061241510761711322328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728292A35363738393A434445464748494A535455565758595A636465666768696A737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00AD69762388A96AAD24E4923775A26B284479599B7FA5635DBDCC270BC8F5ACE3B9C6CBA6E1629392326ADC537CC0835CCBBBCF3A82DC8ADD81B620C9E69BA6D6B71BB58EB05CF9B6183D856379BB64CE7F0A45BF58ADCA93C11597F6B592E4007A9A85069DD92AD7B1D75A4FBD2A75B9284826B1ECE7083AF152BDD297C8E6B394537A0EC5F170AF281FCEAE4ED188339AC58A60D26718AB924892458CD3518DEEC15D1716556B3EB52D816284F6ACF8C7FA3F0DC55DB19B6A95A6D2B68357EA490BA9BA3CF35B368E3CD03A5732CFE5DE17CF1F5AD6B7BACB820F5A4F6D02269EA122EF033513106302AB5DB179054B9C462A12D0A64D0B01D2AD13F2D66876033532CA7654EA048E4F205430C3BA5E455942BB734E8C00F9A05CBADC6CD097C0C54315ABACA083C55E918EC381CD5285A5137238A34674D36EDB9AF0F00034F63822ABAB102A50E1B19A97AA222AEEE36F0858437A5711E2C97CFB65543D0E4D7637D2AFD9C826B86D557CE040344346392B9C4C88CDD7B544E7691CD5DBC5D8E4552615D0E4DB29080739CD4833B71EB4CC02B81D69E80E3DA936DF90AC3962DA38C03F4AB0A3083B9A8D40634F0A738C54A7D2D61AF302E7774E2A48DB91818A4DBBBB54AA99C0145DF407A8E91588F97BD16D6811B73F2C6A78D38C6326BA1D2B474B95592553B693B25A32BA1991E9724B0997A28F5AA91281360F6AEFEFADADE0D359238C28DB8E05708854DC722A60E4DF912D92DCDB47346460035CF5E6872AE5C72BFEED75E5506D38AB0D123C58C0AD149277259E5E600927CC08C7B55F471E5633915D26A1A1C7282510063DC5631D2258739236FEBFCA9A973EE0B4338C5BC1C7435526D3F209039FA56D25B14382B5616D0B73B78AA52D6C071AFA648493B4FD052C7632ABF2A715DC41A579872471570684AC33B45129B05A9C5ADAB9C601A9A3B790360D76434550385A77F6322907149CDDB70D8E563B372DC9356DB4969D4715BCD62B19C85AD2B386368C6540351195F606DA3876D1E485B251B1EB835A5673DC40A10120576325846EBCA8AA0DA4216E062876B6A174F7304DD5D87DC0391EC09AD0B6D6990A87522B5534C55382A08A56D1227F9B6735178F615916A0B986EA2DDD3EB492794A323155E2B0688FCB903D29AF03927AD1777B582C482504F15299FE4C71500B66500D02266639A76645C96298EEC8AB2676078AA09BA263B86054A5C1C1155C8C4E5D0B4D76C8A493C547FDB0BB0E335198C4CBB49E2AA4D6F1C3C0E056B4E17F88CE574F42BC938BBB8279C54882284F071511648D86C4E28960F370C090056B64B4E866DF72492E1073BBF5AA24C972490E40A95AD5666C16231E86A48E3446D99A2CB7DC69DF7085191402C4D5A5008A6855C6053CFCAB9C5672F798EFD087665B934F2360E6ABBCB87A0C9BBA9E95826AF62F91A5742ECDEFD78F4A9046027150473C60F2E33F5A97ED08460106B6719773394BA0DC076FA53845BFB52C6A19B8AB001418C509BB6C24D153CA7593AF156932383D69B232AF2D5035DA01919A3DE931A2C93C633504ADB7E955D6E4B6700E290CA597A54EB7122541BC8352EEDA3A7355E3122B7238AB04F07BD34AC8762A4D6818111AE07A9ACE9B4A9275C211F5278FE55D010B9393F80A6F9648E70ABFAD526FB9A3EE726344955CB226F61E9FFD7AB7044913859D0E7D2BA354C29DA30B4AB1AB0C6DC0F5F5A2ED137673DA8D9413A0D848C76ACFB5D35D6E32181CF4E6BB092C2290E76803B9C75A88697197C8CA2FB1A86DAD531DAC677D8AEA35E1777D18545E54E8DCC6DF91ADDFB0BFF0C84014E16F2260F04D139BB69A8F4EA6106910F2A79A9165201DC48ADB6121E1E25603D46698D6F68FF3496C3F018FD01A4B4056E852827DB1E33FAD5882E42B1353A41A732F78FEAD8FE752C7A5DA483F777473EF83FE152F9A4F529B33DA62F3E7B55E82E00994678A79D0A55198E447FD2A03A65E44D9F2C9FA73FCA9E8848D67995DC60F4A73DCA94001E6B24A5C4432EAC3EA2A15B87DC460D2DF51B7D8DD32E1179E6ACEF0631CF35851DC96C6E3D2ACFDAFE5C669343D4D649803826ACC72027AD73DF6AF9C735763BC0B8C9A3619B7BC74A5C8CF4ACF5B9538C1A985C0CF26A74B86C5E539149BCAF51C55759B8273556EB51D89B71CD265A7620D4AEC962ABD2B9F99FE7F9AADCF76189C8AA133AB0CD0A16F9837733752B18A442E3835CEC9015381938AED711CB10DF1922B3AE2C22624A8DA3D2B5568E9604CE5CB6DED522CA302AF4F6A9B8AE31EF595736D2C6D9439147334596D5B9E0D59424A8ACD89252A0E6B4A15CA8F5A560B0F0A49E0D5BB7B76918050734EB3B43248A369E4E2BB9D17488A060C600EC79E57350FB814F43D16371E64D1671D88AEC6DC5AA401440800EDB453628E7C9020603B7CA69C2D2EDD1B2BB4F6C9ACDBE80DDC8B528E092C24C22E769C715E5880FDB9971D0E2BD4AEB4ABB92D1879C8A71DC9FF000AF34913C8D46447232188CD38BD6C80BEC80814F82228492D914A855C7518FAD4C197A122A926989E82EC0DDAAB5CD82482AD6E51D08A8DE6DC3AF4AA5A3B92CCD974A5603DA9459003681CD5C12B13CF4A6957EA0D5AE67D42E431DABA274C55D81484E45451CC7EEB1AB08E00F6A55016A0C3DAABCBF28E2A779971C9AA92BA9EAD58CD3B5D9AC10D724C2588ACE86F1E296ACCD768836839AAC21F3D0BAF5AD284AEAE6357E2B237ADA769101356861BAD6469B3E17CB6ED5A5E62A375AB6D37A092D09246DA3205241779C82298F2023DAA169638CE78AA496EC2E5B794F5C5579642780B510BE8D87514D4BA473D6A1BE9626E588D89FBC29AC0AB7D68DDDC1A78F987CDD69A7602091378DA69863DAB81D055A71C714C09B81AA6D3246DBE4F1DE8B88124E5BAD3A25F2C939A8AE198B714276190ADB2B707A0A59222A00078A23F309E7A524AB2FAF1549B4B564B45716E4BE777148F6EDBF23A7B527EF03FDEE2AC676A8EF4F9D9291120607DAA6643B49ED42955193C54325EA004020E2A629BD596914E54FDE1A6953B4F348F7685F3DEA9DC5CCC46D40307EB58A4D3D8D672B44A936E0E406356B4FC16F99FF5AAB046CEE778E7DEACDB44125EB5E873C79795EE79CA9CBE266EC0029CD4F2355557013834D329DDED5CCECB45A1D04CD1EF5E4F15098117A818A64D76224CB74ACE9F5259010AC41A4B992D04EC8D2631A6718A85255693AFEB5942E09272C4D02729C8CE6A1BD7DE15FB1BAD2802A31216CF3C7D6A8A4ED2A0E0D485D907439AD3CB6046AF43F28C9F534C7624FA9A7337CB93C0F6A072320607BF5ACEC9EE69AB1EA48C64E7DA97241E79F6148393F28C7B9A91464F1F8934DDD2D016A3C3631BB9F6A95086233F80A8BE53DBA7735246013C703D4D11F3024C1DD8CE6A40B9191F9D22EDA937638C7145D0C6632307A523461BB0DBE95212BDC734CFC6935D869113DAC4C7EE8A3EC4BB700915328C0EBC53813EB427DC646B0C918F92461F8D2A5CDE46D82FBB1EA2A40589EB4A46EE6A6F7D51561FFDAD76AB830AB8FC454666826CB4B6AA09F4519FCEA456C1E69D843D850930B153C9B020E77A1F61FF00D6340B2B793EE5D01EC463FA8AB86247E368FCA81671B76C50A561945B4C6C164955BDAA93D9DF9946D43B7D987F8D6C49A6065C2922989A7CF0E3CB998E3D4D4A7DC1C4AC7CFB74CC8AC3EB55175676B8F2F0703BD6B325E1601D9587B0FF00EB540F6BFBC2EC8BF9524ECEC1617FB4484C03504B73E6726AB4CA49381815559E4CE029A765AB1EA5991F7718150370B82290BB01920D46270DC77A6ACF4B956668419F2861011F4A648473BA3FD2AEDB44E6052B8A4921933CA8355A31348C896DADA41965E6B1353B558A22C9C8AEA648C8CE63CFE154E7B68DD0EF8CE29C5761EC7236EC4C78C62B734CB269467CB673E8A09AAC2D564B8F2E3040CE00AED34BD16E2DE15F9973EB9FFEB5152096ACA8BD2E6968FA62C11A4AF100DE84735D279E23DB8518AC316974485372C07A026946981DFE77624562D86FB9B0DAB2C721CC8A17EB558EBA06EC3EE1DB155A3D3ADC29601C91EA6A65B18026E16E0FB119A42B22ADC6B4FE51524F35C4EA9017B92E8A79E4D7A3180228D902E0FF00B35CC6AB162ECE139EF4BADC664E97A7CD75C0257EB5B1FD81301F3364FB56C6976462B749368C900D6AC6B9049154E4D6C51C45D6992DBAE79359DB263C08DBF235DC6A2AA571C564F96A87A0A1325A462DB58C93360E453248258A52982457407087200A8F6AB4809009A6DDC0E7CD9CBBF760D38891060E6BA4F2D719DA2AA4B6EAE7951436C2C7237B2DC938456FAD51792EC81BF2547B576ED63130E547E54D7D36D59398C03EDC51CDAEA6AA692B58E462432AE76FE7562299A225429FCABA14D2E145C28A51A5465B207354A4B6E8632577739E8E6904B9098AD1F39E45191CD691D2541CA8A51603381537EC4A899C5DC2F4CD65DCCF3E4820815D0BE9F203C1A85B48370C15CE29F3762651BEC6043E749C2213EF8A94ADC45D10D7A0E9FE16B68ED94805891D4FFF005AAFAF852D187CFBB1E99A529212A5747016E6528188A9C1933CD7783C27678C13263B61B18A7278474F1D4CA7EB2552995C9A6A707893F0A77CC3A577DFF08A69C39DB20FFB6A691BC37A5C685B631C7AC84D57327B8B92C700C1EA331484E4D773FD89A695276363FDF3559F4DB05E541007FB54B9E2FA0729C6BABA1E4E3EB49F79705C67EB5A7AC59A4B28F29B681E959D1E9C14F3213F8D541AEA43562131E0F2C3F3A40C738045596D372DC4A7149FD95927F7A411DF1D6AA4D257119B7AEEA847AD60BF9BB890C6BAB6D299FEF4BCFF003A58FC3E8CC096E7D3B5671959DEC74D3A918AB34731086DC0119CD5E7B16F2F783D2BA73A045B3705008F4AA12E9529CA8900155CF196E6756D27747287CE329DBC62A68E39BEF1CD7451F87F03717073ED5A7068702A0DDCD37517D939DD377BA39886299B1C9C55BFB33273924D7551E93028C6D0454C9630A71B462A7DA5F74354FCCE3DB4D375C36EFC2ABC9E1CDCF81BFF000FFF005577EB6B07B64548B1C23A81494FA0DC51C247A2045FF544E3D6992E96594911E00AEE6458874518AA92F94AA700668E71A8A389532C7944B72C0771FE18A8F37321388483D8015BF705558B6DC13DF155D982F21727D8552A97E8165D01B0ADD3269C0E4F3D7D2933950148C7AD001FE1FC4D5B4913AEC3DB007BFA0A1371EBF90A3683F74F3DC9A45041C0393EB59E8C7B138607E523F015222E0E0FE42A143D71F9D4C871CE7F1A2FE41AB44EB81C1193520CFA7E3512303ED536EE3145D5F518A0007DBD698EABDAA4EDCF5A88F5A6A482E20E949827914A7EEF14A9C54C936EE521C9C641A781E86900DC78A795C0F4A52292D069009E6A41B47434CC74CD2E295DAEA1A0F5386AB2A4540171CD4B18CD2DC76D4941C9A79C63346D00645006451629223603AD675CCADBB03A55BB99362902B1DEE086E69DB412B362904B722A68A05639DA3F2A805D81D573F854D16A50AFDE18A96AC6918ABEE591650C830D1A83EB8AC9D4ACA3B53B90607B569AEAD6B9C16FD2AAEA57904D0FCA43534CA953B6B721B59D8C430C4558F39F1C36699A70824830462AC496D09FBAC4551915C492F7C1A8E59250872808FA54CD6D81912FEB5048B3AA1C4808F7356DDB7616B94B4B8526D5409063A9AF448A289634041AE1B45DABAAAB48BBBAF03E95E842E94469B6DC9FC2B29EAEE525A0A163F307C873F4A9159158E22E7E94C37326FC2C03EB4D125CB337C807E1536683724591B6922303F0A1A498A8C20150E2E990824034BE54C5466403F1A02C49234F818207AD72BAA6F378718CFF00F5ABA8784E41337EB5CB6A49FE9C70FDE8B81D75842BF63427FBA291F0A4815069ED22DB229390062A46DC64E943199BA80E2B24F5AD9D4B18158E47CD8A5101EDD06688D3E6CD1229C0F4A58B8602A9DD88B0572B551860D5D6E16A9B8C1E69218D63ED437DDCD1D714F603653B5C08D5475A95105460E07152C79EE292D5EC04814639A85D76B645580B5132F345BB0817E6193488079A291BE51C5247CB8E69C572E823B4B241F664FA55AC5548519AD8043834C2972380D52C0D1C6075A2B33FD2B7E0B1C54862B8033BE9AB011DE5C4DCAA703DAA18217940F35F03D3353082693EF1A24B39B0086345C05B9B7510158B19AC7FECE9A6EF803DEB616CA66192E685B768890589A6238ED46DB64DB43722AA184835D05D69DE7DC962D8A61D287AD2E61BA6D987E5F34BB30718ADCFECC5E39A79D323001CD3E64F717B391CF98F0722AC429F356AFF006747BBDA9CBA7AA1C834F9D07B3914E45223ACE643B89AE85AD3200CD42F631A0271531690DC198EBC002ACA0E94388F7E14735228F6AB21AB17221194C1A8DA22CC714B16D07E6A9772E72295BB10D91C76830493CD27D9C1CE0D4E1C05A8B7ED3C525A815258C235519D54648AD294EE049154644DED8A3946B531E701DB9031511507A0ADA3A687E83142E9607B55464BA8D41DCE7BE55396FC051938C9E07A0A42D93C0CB52818C64EE6ADDAB6A8C9B0DC76F3C0F4A50ADC6781E942B056F56A94104E4609A5749021CA7030DF80A9029CF23F0A60193EA7D6A40C48E3F3A96EE3245FBC3B9A9875F7F5A85464FA0F5A941E79146FA8C93923FAD318629C0E3AD0481459AD589BB8C0D96C5380C7D29B919C014EC927150B7DCA43D4F3C53F7173C9A84020F1D2A5514D6A8AD471183C52A9CD34F078A72F1F78D435D82E8957A7352C62A251CF35326338AA7745225E71C1A0B614D3B1C5437126D4A9B9467DCBB337159B3000F357256DD9C5674E4E6AAE91362290F1C74AACE7279E94E932055762718ED436BA0D012077A92363B08C135548CD58815C1C0A2CF719B3A5380A5592B499E2C7DD22B374B6915B05735A8CC48E62FD29BDF41B2B3184F5C8A82558590E1C8AB0FB7BC5FA55794C78398F03E947A88ADA41F2F5742BF360E306BD217CE31A6107BD79A69CE06AD198FE5F9BBD7A5A239897F7B8FC695476B02D879497CC1C8029442F962D20C7D69191438266FD6981615663E6126B218BE52F96774BF8E69AD1C3B0664E3EB49BEDFCB3C9229A648020F949146A343A45B6C8CB1CF6AE5353119D41867AFF0085752F2C7B8622CF1D715CAEA52A8D41C95E7750924EE86B53AAB264FB3260F1B454E1416241ACAB2BA536CA00C60715616E3DE8DCD7D9916A6A0115952B2B11B5715B173179E99CF35922331C98614B4D9912A6E2324C8502962EA053AE186463AD47093E664D5A69E84169C7CA6A931C9C55E7E56A8B0E68F401E171DE9CCBF2D227CC306A574C28A181001C5491FDEC51B32334E857E6A169A889994015589C9AB646073559B1BA9A7D4646F9DB4900DD3014F71F2F5A2D173709F5A2E23B8B45C40A2A52BCD36D86215A9714AC0465466970294F5A518A5601BB452E2968A6842E2AB4FC738AB23A556B86EA29C9033264C3484D21EB8A571F3934C24D62D26754761CC07AD33B734A338A46148A133E949EF4B8C534934AE21D9E2A1B83B613CD4BCE2AA5D1222347992CC91CCE4D5B8F96AAA8096CD5C4E0735BC55D1C93DC9421C528E0E29F1BF18C518CB669DCCC5EAB51B707A53BE86992734EE045338DB8AA8A7E7E956665C5568C7EF2A59515A97908D9485B9A6E78C51DAB3D6F63A6C7100E461385F5A72024F1C0EE69DB7E605B00761529231C8007A0AEC69338F71BB0374E07AFAD3C15098E829B9C8C9FC053C20032C413D8545DF5042A9C2F1C0F4A9813819FCAA1032704E4D4AA4038073EA693B7507E4499C7B9F4A903607F5A8438E7D2A642A40FE54EC807AFCDD4F14FC535460D49DB354982222B834E4029E7040E290617AD672DCAB0743CD381E73DA933B874A0600A4ADB8C79208C8A5519E48E94D538A783BA9340921F9CD4B1F06A35C54B1B0CE29ABD8A44E181AAB744918AB270AB9AA53C858903A509B43BF628C9C1EB54661EFCD5C97EF540CA1BA8A95BDC6B73365240E6AB92319AD0B8840427154E28F7B6DEF5774FA059108EB9238A9E36F9F2302B423D1DE419045598F4260A59DB18A49D87CA45A487331C30ADC65980ED58BA7C5B2EC80F8FC6B71A36FF009E83F3AAD5099525F347F08AAF299197FD58ABAC8FCFCE2AACCB28076B8CD177D048C9B504EAD12B0D996C57A3C5E4F909B9C935E6D1BBAEA71F98D9F9874F4AF4A8046608F1193C7A54D4D4A439CC1E60E096A6074CB62327F0AB407CE008BF1C53D43E4FEEC7E559219441CC67107E94E224DAB887F4AB804A633F280691964217E6029DD015D84A4F08315C96A4186A0E0A8CEE35D9BA3EECF98315C7EA9B86A0E430C6EA49D8A8EE5EB4CE06EAB6C9C7154219B681C55E57DEB45D3D8EA8A1F1C980466AA4E4193352A9C1354E57CC942688A8F4193E01E288172F4E94AB8181CD25BFDFC5368E72C32900D5500127D6AEBFDD354CAF391557EC2638601153B72A054210F19A7B1DA68BDC091A201320D361077505F2053E13CD0ACC07B7439AA8D8CD5B7CED35531834240364C05A7D82937298F5A26E82A4B0C7DA53EB401DAC23112FD2A4A6447F76B4FA7710D3D6968EF454A00A314518A60281556E0039AB75527FBA4D393D00CB6FBE46298477A73F2E48A46071586A752D84C1A6B734EED4D6A56013B53474A5C518EF4F715C4FA9AA9787086AD1AA57A405C1AA44CB628479DD56E3E7AD5641CF1CD58438AD123965B9613834B9E69AA4629460D3E5204CE3A50CA3D68618A8DC9A2FD18114F81F4A86200C99A9256C0C1A6C1C9E94A496C8D21B9642E690AE0F34E1C74349C9EB586A99B9C4630707E66FE5520041E0EE3EBE951861DB8F5352AED2BF29C0FE75DE9D9D8E27E82ED18383CFA9A66E3BB1D877A77DEFF657F9D22A8CE0FE550D5DDC5A20DD93C7007EB52AB0241238F4A8F1CF239F4A900C9F97AF7345931928601B91927B54EB8AACB8DDCFE752871D3B50DA5A31D8977FD71530CEDCD57DD9ED53A9CAE01A6DDC0039CD1BB3C1A6E40A5CF7ED53E831EADD4529C629990178EB4ABC8C9A95D87614669C1B0304D370734BDC668B30B13C678A76E0A734C560054134E338079A9B94B42CCD7195C0355724E79A407753C28C53572922AB7279A88E49A9DD7E6C1E95111CF069C741AB5C6CF1E61359D02E6603A569CE36C26B3A103CDCD4B526EE533A6B30022D5D906623CF18AA16ADFBB156CBFEE8E4F6A7A6C2673F114FB73750735AC44647DE35971321BF395E335B59876FDCFD2AA3B09951B61E379AAB36DC101CD683AC3D769AAB30882E421355A21182A02EA4854962181E6BD42096510261147D45798BB0FED18CA263E603A57A545148604FDF007EB535124914B62D99A6DE304014DF366DC7320C7D6A3F27E6199BF0CD462140CC4C84D657024695FCB20CA3F3A85DC60666FD69B24502C44976C7A9AC5D4F55B2B68C00E4B76028571E88D8967B653B9E75071DD80AE3752BDB737AD89C1F98FDD39FE5591A86A535D4879DABE8335491950E48C9AA54DC8148EAD7548F68D993EE454CBAD220C135CC0BC51F2D27DA91B8C1CD0A932FDAC8E9DB5C888C03CFD2A28F52566CE456346AAD1F0BCD4915B9ED9A1C55C8751CB737D6F636239AB3010CF953915CC490DC20CA64D4965A84F6EFFBC071EF46880EB491B0E6AA03824D360BF8AE23C03CD3F6A9E54D2B831E8E4F5A7BD401BE6C549B86F00F4A6D210A580A9213EB4C6008F96A48C714276403E5384AAC0735624FB950018618E9400930E2A7D357FD254541719C8C558D2F26E57346E23B38F88D7E94EA646498C538534C614B480E4D2D200028C528A298099E2AA5C9F909AB66A95D9C29A977033B39CE28ED4A300D2124F4AC9B674F418693AD3FEB4DC7346FA85C611E9498C0E6A4C0C714D39A04D91B0E38ACEBEC9E0D6A118ACDBBC16E69AB3265B15A203A5590062A18C0EB8A9D57D6B5395B1E29DB6845A9586168D882371800542E33531069841C555EC05674E39E944433D2891BB53E11C7159CF6D0D698E0BCD3C0A52A31EF48A48ACD2EE6E70F1A8CE5B851D053B3CE7F2029A303EF1CB52E40E9F7BB9AECD77383D0562C7DCFA7A52A06C678CFAD2039E41C0EE69C1F031D17F9D2948121EA5587F334646DC2F03F9D301EF8E3B0A99173C9EBFCAA6ED9445920F352822919476FCE80A303F953BAB889BA8E3A5489C53148C629EB8FC29BD7518FC01CD04EE14CC9CD39548E73C54B4CA49120E28FA5008A5183C516B0D081BE6C0A7D3428069C4E173493D47618EF818AADBBE7A49A7CB605461B2C2851DEE389757A75A379A4452454C9096EA28BB1FA14999B3CF4A8C9C9EB57E5B5F4AACD6EF9C629356DC1113CABE5106A8211E667B569496E1633BAB2F8F348154ACF629DCDEB4983002B43686435CFD8F986618CE2BA38D3317BD46CC6F63051992FC8DBC66B644A48FF0055FA563CA920D470BEB5B6B1CFB074ABBA6AD62485E67FF9E554E7925DA7118ABED0CDEA2AA4D149839702926C3439E7690DF26F5006E15E9D6D1C26DA32598F00D7995CA94BD425F27238AF4AB59B16B1811678029547A2296DA16F6C2241C1CD34C9026E3B0F1D6A392ED95BFD5003D6B91D7BC56202F02955246091D6B34AFA09BB16F5AF125B242D0C111DDD89231FA570B34EF3B125893514B7E9365D9F39F5354CEA312640C56D08AEBB8ADD4B404879C53559B279E6A99D4C336D0D8153C33A672587E755CAF70B96E146924E95B76BA66EC36DAC9B5B98D5B248AE86C7508F00123F3A577B032CC5A5803A54C9A7953C8ABF6D731483A8ABE8B1BAF045435A85CCA8ECD48E454726942507E4AD80814F02A546C718CD166F50B9C8CBA54F684BA67156ED26675DADC1F7AE9195241B580C567DD698AA3CC8B83ED532571DCAA839C914E7196A75BB46CDB243B5AAE9B6849FF5831EB9A7A8D22A00CA2A78F01324D4FF00674DBF7E9AD6CBB80DF4AE04323065A857EF55EFB1AF4DE28166BFDE14D35D4467CE496AB7A4F37238A65C5B843F781AB3A547FBFA69A0B1D526360C53853538514B4AE01DE969A339A75001450293340013C552BA3F255D3D2A8DDE025260B72870D484E38A50334A5462B33A06F5A422948C73484FE545BB80741467D450BD29A464D2600DD2B2AEC665AD47E060D655C9FDE629C77227B045C1C5580B9155A3F5AB90E1856B6D0E57B8F8D06DEBCD4E501033D2ABE76355891FF73C75A7A92453220195350EDCAF5A466E31DE9064D0EE80A730F9B153420EDE6A29412F53C5D3AD435D4DA98E039F6A4240A5393DE9ACA3BD459A36383DE58E17F1269FB4EDE385EFEF51A95EA785A9339193923B015D6DBD91C56D07C79239E1076A793C67193D80A8B3EF96A78257033CF734E4958561CA0839079EF5329C83E94C0571D38FE74EDC38207E14980A3FC8A07CA73D693DF3CF7A728FCA9356F8469122E0E0F4A970334C41F37BD388A9B3EA3170075A785E38A6F24548A462AA29F501BC74A56E0F14BF2839A41D73517D47B8A78A82E66DAB8A9A461B7359733B3C87278A3D4AD5081F2D8352AF518AAFBB9E9CD4D1924E68B34C69DCBF0924815AD1C7B50565C1F794D6CC472B4B5B9444573DAA191455B6AA373204CFAD36D2D02E665F4E402A0715971FCD272455FB9E549359CB82E79C5546C1D4D3B2995250A71F5AE8E22193835C7A1C1FBD5AF6176FB82E7359B8D9DD1ABD509709FF00131043E2B6501DA332FEB58974505EA963D6B4C343B0618D3BB466C99C2F797F5AA5726203EF1352B4B10E8A4D412B2B2E447FA555EFA05B439CB92A6FD76E73915E9F6C25FB3478C0E057985DEEFB729098191DABD06E664B7B30C6E02803BB6294AF6B31F431BC65AFC9A3D9991640188C28E3935E3D73ABCB74CD24CE5989CF35A1E31D586A5AAC81642F145F229CE73EA7F3AE55FEEF06B5A30B6AD129179B507E81B03EB5526BF62D80DFAD56C647DEE6A2604F4ADAC985D1796ED838E4D5F8EF1F8E4E2B1A324F6A98CA40C5292E9628DF4D44AE3E6ABB0EACEA7EF9C7D6B935B866E3A55CB7918F534D404CF40B0D78C68097CFE35BF63E224661B9B1F8D797C171B78C9FCEAFDBDE6D71F37EB594A31DAE4A3D723D5965600118ABC9396E4579CE9FAA05DB97FD6BAAB3D5E3D839AC9C6C06D34AC1B34925F0C6D3541F5042B90C3F3AA335E03D0D4B43DC7DEDC2C728914D745A5B5BDE5AA37058D70D7D720C2D9353784F5A22F05B97E09E39A37D00F485B184F6A5FECF88F6352C2FB9454E78005435663291D3E3C71914CFECF4EBB8D5E3DE93B51A81CF5EDBF94FC126AC694B8928D44665E4D3F4A3FBCC53433A05CE29C2981BB5381E281077A3B520E683C77A0070345309342925B9A00739F96A85DF4157A5FBB59D76DD314A40B72B671494839A43C73593B1D238E00A6D190694E292D4561A302826931CD041EC38AB4900C94902B26425A639AD394902B3181329AA57339BD0910F38C55888851C1A81071522FE55AEA73327EAC335625C08C0AAE3B54B2A9D80935222B363752903612298F8041CD0CC48C0A7D00AAE7E7A954719A8181F32A6519193594AE6D4D0FCE391484E79349904E28273C52BDF435385239071F37614E43818FE2EF512313C039F5352AEC6E3B7EA6BB36D8E15A802327071EE69CA4E39FCA93CB19079C761520033D327F954B6D8C137631DFD29EA08A6018CF5FAD2E72293F3044BCB0E2A645238A8A3EB9CE0D4E0E39038A25A14850B8E69E8431E690734A00CD4DF9456158F65A51D39A38E71462994C00F5A6EEDBC53F703C5453C8AABC52DC7B6C57B99F68DAB545989A7BB658934CE0D3BBEC17B8E538C6454CBC9E2A0FC78A9A32037BD1D468D3B6E48AD7881007358D6CD923B56AAB05506959DF56592C876827359739DCDCF4A9AE272FC0E2A948481C9E68B924326D2A411599B7131F4AD36E54D67B2E24E684FB85C5584EFF635B5A75910DBDBA566478F95B3D2BA6B62AD082B59B577765DCC9BE2A2E80DB9AD481633182233F95665D97FB68C2E456E4264F246140AB10C20E3E58FF4AAF3894A9C281578F98472C0552B9CE0E65C7E34F5BDC0E4B506905FA6EC601E715A1E29D417FB22455CEF6E17F3E7F43597A9B05BC187DC6A0D6647B848E3C74CE7F4AA7D2E52D51C0C90BBC8735049115522BA19ACCC6C70B5524B3DC0935D10928ABA1A8F739F68CE32053446C4735B0F6248C01C5406D1C1231C53553F981C4A6A981D3F4A68DD93C55C16EC298D195E7BD5A926C9688140EE2ADC6A02706A38FEEE0AF26A440541CD35625930385EBCD4A8DB79CD56078A7ED246054349EAC2C5F86E9B780AC78ADAB7D464503E7FD6B99886C3EF57A3980039ACDC55F61D8EA5354664FBDCD3975327AB573CB723A50D721578359F2311B37979BA1277566E99A87D93528E4CF01B9AA33DD8316375674133B5CA2A0676670A02824924E3A55C62D203E94D1AE85D59A38EB815ABD40F5AE47C193B49A6E5D4AB67A30C11DBFA57580938AE696FA0C5E79A46E052FAD31C9A9D40C5D40EE96AC694BF3554BD24CC6AE69279A2D6DC0DBA5ED4DCD2E38A5600E71C504D0180E2909E69806734A0F34942D1A804ADF2D665C365AB4671F2D664E407F5A521C77213413818A5C834D350EC740BDA9323346714848ED4EC03F8DB40C6DEB5186E290E473DA95C44539C0CD67025E426B4272367359F1FCB21F4AB8A66550954E0D3C1CF6A6AF27A548B5AEBB18344919C9A5766E412691549191413EB48922C06EA6918845CD39C0078A8657E30054B6C774421B3264D4EA78C66AAA925FA54E3A544D1B43614E7B527E34A38A4C7148D2E7069D724617E9D6A61D77371E82A227E6E393E9E94E53C6075EF9AEBB59EA70EE4DB8F63CFAD11B1CF1F9FAD3540C601E29C063DBD054E83D7A1296E39140C7AF3498278CF3DE95001DB8A96EE34C90608E2A71902A25C0E9D6A70C31ED4D5C2E3D17BD38B734CCD397E614EC985C729F6A5C0EF4DCE32690938CE693D07B08C40AA57126EE00A9A698AAE0D5132127AD28D9BD46302F3CF4A6B03BB8E9526E07EB4D39C6455C937A587B8D538356114E41C5575196AB699E05434A2597E0EA38AB8CEDB4552858A8E956C39229586458249DD513A62A66393CD42CFCE2992D95A43806A948486CF5AB739AAC464517E85211251D0D6CDA6A11C3080CD58AB1F3C53820CF24D2B20DCD19A6F36E8346DC56CC2D218C664007D6B9B8D10BAFCD8AE92DA28442BB9C9A2C3E838E3F8A427F1AAB398B69C64D5F22103E5526AB5C300876C407E14D81C5EA457EDA084603D48A6A0FB44F83DBBD3B57691AE704018A5B2E173D4D525EE97044775A71237633598D69ED5D448E0A0ACDB8897391DE882EE5986F6AA0679CD566B6CE78ADA3163A0A6790339C5697E883739E92D0E3814C1660F51CD7446019C114C36ABE82A94AC4D91CF9B201B3B691AD4EDE149FC2B7C5B8CE08A6B5B63A0AABBB858C35B30AB9DBCD35ADD82E6B68C43A1A85E25C1028E6B08C88D083F38A9302ACBA63802A374C0CD377DC86AC3772A8C1155669CA9200C0A7CCD84CE7915992CCCDF4A7057D4561CF7058F5E2960999655742CA54EE56524104720822A9672FC55BB206599500C924003D69344DB53E81F03ABFF0064A1667660705998924F52493F5AECD474AE6FC2D1795A5A003B9AE8771E2B867A48A2427E5A69FBB49BB8A4661834934061DE1CCC6AF690077ACEBA6FDF9FAD69E93CAE698FA1AE706984F14A69AC715366217B504D00F7A463CD0005F02963F9854780E2A5401529DC08E7E98CD664E4892B464249ACD9CE6439A96CA86E333C5148738A6EE3DE9266E38D34E00A5249A631245362109CF14E2485EB4DE8BC5233714B44220B87CAE2A9C63353DC1F96A084EDEB571BF43399326474A9141351ABF38A9D5805C0AB3164F1A9C62A19B21B1DAA788E067355A7625A96C4031565C77AAAE486C54A1B07150CE46EA7B8588D33B8FA54CA79CD408F83528240ACDEACDE3B0E6714D27D690E08A6F7EBC50D97A1C405C9C83CF76A791B979FBBEA2A346E081C0F43DE9E370233C1EC2BAB54CE3D2E3D54E3D7D29E33BB079F7A4042F438348AD83C834A49B1EC4C38181D2A44247279FE9512FCCDE86A404838ED52B45B88907726A404E05443AF27152203DBA53E6E83260723A714E040A419C62932318C547518BB8678A6C8C00C934D66C1AA93B92D8CFEB43770229E42CC6A12C314E6C9CE78A8828E73549263B21E327A548AD8E09A45200A6B104F14EED68521E30ADC739AB0BC5545241E6ACA927149BD4A45F88E56AC21C0C1AA9003B6AC03F2F340C73904F155DBAD48C6A2931D2909904C322ABF39C55961EF5048066A7D06860186EB52281DFAD45F29A764D1B0C9BF76194907F0AE8ADA58842A02126B9E473B9404CF35D35A6FF2570800C53F4014C921E123C556B8F38A1DC40AB72EE039702B3AEE48C2E0B924D20390D5414B927CCC93DA92CDF11E4D58D4AD37B175AA76AAC3E522AF9B4D0D205D793F2A85DB774A57CFAF1511381C5256DD9A340CA40CE69B824F1520391CD15ADFA8840A3BD23A67A53D4923A529539AABF36E896C88C581834C65ED8AB3C11EF50C80D3BD9EA892A491063835559086F6AB8C73D6AB3039E39149EAEE166CA8D8CD4131CF02ADB2FA0E6A075C726AD3760B7733A64C03C564CE70F5B5391CE7A563CC0B31A9826DE9A10CAC630549CF35A9A0AABEA96A78E2419ACC030715A9E1E8DBFB561C671E60AD657047D1DA2A88EC235C76CD6A83CD65E92C3EC89F4AD1DDCF15E7C96A224DDC53246E0D3327D69AF900F3500634E7F787EB5B1A5604758F37321ADAD357108354D6833433CF148C4E3A520619A376454B10A0D349CB52E69B9E69200E9CD48A72B5116ED4E070B4D011C8E437359B31CB9357653926A849CB1143B150DC3B53382DCD264818CD1C9EB53A9B0ECF3C5319B008340214F5A61E6A5BD6CC4C0B7181485B8A5DBF2E698722A92B30656B86A8A323BD25D361C0A6A7DDE2B548C26D9616A419CD429BB1D2A556F5A1D88B92EF38C0A6F53CD216E38A61DC0E69A24560BBBAD569C007D6A5CE5B9A8A4C12706A5AB80C403AD484E3AD4718201A7673D6B368DE22E477A46C1E94807BD212053487BB3895CE73C13DAA60700AFDEF56EF50A040786C1FAD29CE735D8F7393A12A0CFD3D29C49DF800134C46391EB528FBDD38F5A861AA1E1475CD4B8007A9F4A888240F5A91171D4E7DEA6F6E83B0E539EBD2A55257A74A6601A9B231CF4A69A6B50240777D29090A69CA542F151BC898E7AD0FC808A7902AFBD67B1279CD4B3CC1CE0540588E0528AEE52D43731140E7EF0A693CF34BBF8E6A96DB0EC38851DF14D19A43F31CD05F27029EFAA2AC8527E6156A227209AAA02922AC2B01802A6CD6A5234A320AD4A080306ABC19D99A79049E6A1B57D42C48C5319A89D948E94D3C66A07908CD55D5B5420739A89FDE90C873416F5E6A1DAE34862A8E7D69FCE2941414F5741D6968B42B7042F9182056FC0F218941931C7AD73EC54E30D8ADCB358BC8059C9356B441625919075626A94CCADD23CE2AF1D9FC11E7DEA06490B7200146A24616A2C71C0C7B566C3205525B835BBA9DB103762B027555438A69D8DFA68324B85DDD78A779AB8EB58B2CC55C8CF4A549D891F35691B262E636438A5DC4D67A5CF6356125DDC0AA517B482E5B53C50CC49C5405CAF7A56718C934356DC96D12703BD35CF18A84DCA8EA6A26B904E73C50FC818F618CD576EB4E6B952BC545E7AB0E7AD53BA42D46B839E2ABCCA7153B38238A824CB0E6A5C9263B19B2F420D67BA618FF00856A4EBD722B3E4E01357BAB22248A2C073C735BDE148FCCBE5E395C64FD6B0A4386C8AEAFC1B19376C7008DB93F9D5CDFBA2563DAB4D9088157A6062B452520D615A4B885707B55BF39B6F5AE07B81A7E612D8A6CB210A4E2B3C4CE39DD419DFA1E94728103B93260D6ED936D807358129C367BD6A5B4E044066877680D4DD934BBC0AA42661CE69FE616151602DEFCD031D6AB07DBD69CB2AE3AD098890B53C3616AB3C831C531E462320E28F501F238049ACF76CB1229F24849E29F1443665A9151762B77A5FC69D2E01C0A881029686B7B81A6838FA52939A0F23DA8B05C37F14D66047BD04605308F94D1BB114EE31BA9A8C474A6CE7E6A10E0715A231916E39015C77A7355507073DAA5F300C533326C1E0D0E463AD42673D29DBD7BF5A5D4069602A16E724512365B15097ED4276D0099063AD2F4CF7A6A83B7AD049159F2EBA1B2173C53180233412077A6924F14ECF74C13B1C62A608EA40FCEA539C8DB827D0F6A6A91DC61A954E1B0DCFF00B55D6EEE5B9CC87A9C7FF5EA40C7823F2A675EA323B629E38381CFBD2E4D6E2245383D71520231D307B5440827A67DAA40C3E9EB9A895A3B9498F5CAF26A45CB75A66EC76A7291D734BA0C78C05CD549E701B68A9E77558F21B9F4ACD2E092C4669EBD05BEE2B30CE69A3E63ED49F78F22948EC2AD59EE348715F534D1E94B91DFB530B0278A5CCB61A4389C1A3E553F5A43D01341E80D2B0D0F2C074C549138E38A833F5A9A11DEAEFA148D8B6C6CC55831FCBC0AAB68723A55F50C6B293BEE329B444026AAC880035A3229C55095181A480A27863499C1A9640738C54446DA357D00030271433607BD3430CD238C9CD2BF61DAC4C922EC04839AE82C644FB38C464D73A9BB6F0B9ADCB0FB43C200014555CAB1759E520E0051502E4BFCCF93563C838FDE3FE54D486307233F8D2D589105EA86808C738AE4EF616E70315D74EDCE2B22EE256CF1531D5D8D6279F6A0AE9211CD663DC3C473BF8AEAB56B40D9DABCFD2B96BBB195C700D764236644D3E85FB2BE12819AD9898E3E5AE6ECA096301429AE8ED11962F9873572DAE90D27D498EE3D6A190B0EF5397E403D6AB5C3000D64C1E852965DA79A8D67CF19A82E1B39359AD7522B1C1E2B68D3BEC44A691BE8548C669C064D60C37B20E1B9AD4B4B92DD4512835A949A65CC153D69DC63A549180DC9A5643D7A62B09DBA94B4666CE99CD635CFEED8D6FDC0CA9C566FD84CEDDEAA095EE89923124DCCCA54576BE17B98ED30190E5B8CD52834748D72D57ED2DC24AAAA38CD393E80A173D3F4F712420AD5FC678C551D1202968B9EE2B5C22D723D1D84D2B95C28EF46454DE58269A62CF7A5CDDC4D15665DFD2963574C61BF5A95A200F5A69E08A577D042F9F3A9C1E451FDA4F1F0CB4EDF8E715149B1C72BCD3B5C094EAC38CAF14F1A9478E6B35E30690C07A834EC846A7F68A7734FFB744C305AB15A36CD218D80A565719AEB2AB3FCAD915A48E0A0AE6A06656EF5A315E328DA4647AD16622E5CECC7BD5424669AD7018F34C32AD472B348B24E79229BB8E29A250052875229E83B8BBCE39A696C52330A8A46F978A3D02E559086724D11B03C74A899B2E41A9110B74A6AE6522CA95039A5555EE29A2D9881F3529B7947426AD19B14A2934E2B1E3151B4130A63433F5A9D131A6399540AACDB33C5122CDD3AD42A181F9E895BB0245AC938C53B231D2A307029C1877A8B235B8D6033499E78A56714CCD24B5D02E71E33D14E7D73D6A4DA010471EC6A159154E08FC477A9CB938C807FA5766EEECE51E1B3D060FAD212DDFA76C526E1D3B7A5283838EFEF4A52D2C90C72061F3139FA5481BA77A62123B71521C1E40C1F6A81244A4E5718A40428393C5351C6DE460D57B89370C0A4A57E83B09338638078A85704E0F4A600475E690E7208AA69ADC6912640381FCA90939CE699BB8F7A6B3E71EA29A51456FB126EE694F5E299B895A55E7AD526F61A1C5E94648A4E09A5273C566DB00DD53C41B23150E0022ADC78E314A32D0B2FDA31CE2AFEF39C0ACEB7201AB6395E2A6C98C7C99F5AA533738A95836DEF54A40D9EB4EF6158692735194DDD69C7246714C6623AD1268A434A2D27980718A7609E86985429E6A2F61EE4AAF95E38ADDB29A28E01BA5FCAB9EDCBB7E63815A564D1B27CAA5AAF60D4D66BD8CF11A96F72294CA4A6718A802B9C109814D99C1F9475A96D8244724A7354A725B26AF795F2126A94A9CD28B46D131AE132C462A81B20DCE2B724894E6A150AA47A574C6572B731FEC617F871F8529CA0DB5AF3F96300552960072C0D1CCC48CF6639A8E43BC7239A94821B18A423E6C62A93EA8525732E584BE4564CFA7C8A095E4D74CD0F3D29C6D948E456D09BD919BA699CADB59CD90581CFD2B6EDAD9801C55E1689D854F1C4AA3A7352E6EFA828A4471295001152B81B4D3CFB8A6120F6A8E65628A2E9926960FDD8CE2AC328350C802AF34B9ACF41B4AC4AAE65E2B6746D2DEE670C721477C566E916ED7172140EA6BD234DB28ED61000C1A552A59581CECAC8B56E8618828EC2A5DEE1A9C304D3B6D73366371A1DB3CD2EE2075A5C0A6B0E2856B0362707AD18A6E39A936F14262233F7A9AD8CF4A9C28149B413C8A2E040141EA294ED1C62A529814D2871549D808B683F5A4207A54BB78A6B28F4A5EA04611734EC0A36E4D382F153B6C21842F7A50AB48CBCD34920E28DC639905308EC0D29634D268BA006C8F7A85DC81529E698C074A76B6A265293839ABB6AC80609E6A36514CF2C2F43434EC235444240086AB08B81838AC7596645F958E2837371DCF342B93634E50C0E474A6F983BD6635E4FDEA33792FF0077269DB4158BEFB589C0AA328DAF934D3732FA75A63333FDEEB4ACCA44A1D76F5A6B3822A020E38A67CC3A9A5A27606D93B4982314CDF9EF50331FC69A9230E0F34D46EEE2B9CC201BB00F27B1AB00051C9AAE0856C751DC8AB04A950579F635BDAE65B884E4E4FDEED8A7062783F9D44393F2F07BE6A4CE0608C1A5CAC1226527EB53ABF1803F035591C81C807DC549BB0B9EA287AEC56A874AC153238354D9B7134493339C0E95064669AF30572504F4CD23640C6E07E94C6C6382734C19CF349ABB1BBB15188634A5B2D9C537A1E948641D3A51256D4A489F70028575E86A10C0F535200A69A0EA48580E940E70475A682A074A55639A4D95E84BC95A9620411CF3508626A68472493496BA82342D864E6ADE4A9F6AAB6FD07AD5E58CB8C1AC9AB3286348A47BD5595D318EF571AD38E2A94D6ACA7BD525715C849522ABB91BB814F60CBC5441B072454CB41A649F2A8A6ED0D4DF30668127B52B2E852771E620A992B9ADAD2D36C3BB681586F3B1000C0AD4B13BA31BA4E3D05536D21F434AE24D9192181AA1685A672EF52CA371DAB9C54F0C38000153BB05A0D964DA08C565CCFC9E6B5275C0358370C039C9C55A89AC2CC8DDC9CD57C820F343BB678E95131E2B5512DBB0E2E08E6A3965555C66AB4AE41E0F15524672DD78A6E2F742276EB9079A683CF3500918B719A9864F06A95FE44327501FAD3CA81D052449B7AD4C471C537E43B916541E94DDDCD295209CD464900D669ADEC3B5C713CD21C15E95186207CD4A5811C537B89AB1149BB185A625B4B29C3D4E3AD6D691A735CCAAC54EDEFC50F413669F86B4BF2879A47D335D681802A0B6B61044154600AB00F15839366521EA297140EB41353E6486291B814BCF5A43CD0980D519E9520E951A9C1A9474AAD004E734A79A2940CD240348346297BD267268EA00466A322A4CFB5230269D84407AD2FE34E38C534F4CE28BDC630D300E6A5A681CF153E4862311B6994F61934D38A6BDE10D2B8A6106A53CD31C71C51D74422021B34EC1C52E2909A2C912C5CF18A4C739A4C353CE42D37B68098C2013D298C993D2A6C0033DEA36345EC84C888E4D355371A982834F08A39A9B2905CAFB0034C700AD59382738A61009A56680A6D1E4D46C8C0D5F6518A632A9154AFD4471C06C7CF4A7B73CF7F51480863D437B52EDCF46C7B1AEB7B11D0555247038A7A8C77C9EF9A6FDDE0F069E381D3359B60870C038C63DAA19662015EDEB523938F5AA52312DC64534D5EC1A8A1D7BFE7484803351700F34AD8A6EC86AE3DB9C1078A713C7150862DC0152A8DA3E6A9458C2C4E0F4A4200E48CD39D73CA8A40A4AF3C53764086E083C77A994903A53000A6A418E9EB58A6D8FC855EB4F0DED51ED20D3D7AD5A88C9D1948E9CD4D0E03557C8EC2A684827349F61A2FC0C55B35A2B2F19ACC8CE2AC82696AC0B9F682074AA935D75E39A6B3126A26149B4B702BCB20EA7AD55772586055DDABBB914D3103DA9A6BA8EC5139CF140DE31573C914863C76A57687D4A6E00C12715B9A6EC5841084E7BD634CB9E00C9ADDD252468C02A40FA516D3561CEB62E20F9F1B6AD8DABC77A7ADBB90309FA548B64DB8338381ED473450D1467859949C572F7EA16639AEE2E10C8B855E2B96D62CD802C14F1D69A923483D4C16939A88C80F4FE751CCE54907B5519EE8282456D1B5AE5C8B6F2127A542726B2A5D4CAF4AAFF00DAACEDC9C0AD126C2C6D1C83951532313F78735949A88238356E2B92E33C5134D69717A9A41B24015386CD5357240352EEC2F5A4AE96E3D07CA72383CD5560D9A79738F6A84C877545B9B46C2C2B918C1A7C1E5961BAAACAD93D6923760C3D29462AE4CA4923A9834FB57B7DE7EF7B1ABBA5DC1B67C0C6056559DCFEEB04D5DB7C6ECD0D3BD9995CECED6F629146EC66A560A4E57A573714A5718AD3B5BDE02B1AC251D6E2B9A38A7638A6A306190694839A36001C5231A7038A631C9A5610A0629E38E951A1E79A941CD1710751463DE971499ED4F718A70290E051476A041DA98C4F5CD3BA531B14BD40613ED49BBB538E298DC1A6C680FBD341C134A7919A5DB4AEFA0EC47BB2714869C579A43D68109BB14C2C09C669C40DD50B03E6714D3B210A462902E79340E9C9A556C8F6A5BEC2171914DEBC52927B50719A696A4B0C537000C9A5DC075A631DD46C343777CD9ED4FEA335081D69C1B8C628EA492718E94806452E72290B6074A57571BD488F420D3490052B707EB4D238E945EEC1239050993C107B9ED5205DDD0E47B50AABFC2723D0D3C6D5F506BA2EBA993D0163EF9CFD69C3F2341E7FA5364385C03F9D46DB02DC8259B9C633EE2ABEE05B34AD80D9279A6B0DC72050A36D4A4B51095279A76D0569B80714E000343BBDC76B0E8FE518029E724734D604638A5C7BD35A0D919241A69721BAD39860935160B3555DF51D921E188E829E4924119A8D41C134F2DD0014456A34EE39998D4AADC0E2A119A9D54D27B8344A878FBB56620A5B238A8109039A9E307AD46A98D685B41839AB4AB95AA01CEEABF0E0A7349B650D75C530F3DAAD8883629B243B695D88A0463348AC476A9DE23E9503295A97AEA1701966C28C9357D343BB9465B62123203375FCB359CD71F67FBBCC94EB67904BE6976DC79CE4E69BB25762D64EC8B91E90D0CBFBE1D3B1ADEB348D0000015942EDDC0DEC4E3B9E4D5DB1943CA013815CD29B6ECB436853513A8D3ED5653923815A9F65B59015DAA4FB573D71A92DBC6228987B906A38752603EF1FCEAA3350DD5C6D36695E59A5A9F94641AE7F51B759519768E78AD4378651C9CD519245F3306B58CEEF621A68F39D634C7B6909E706B01E01CE6BD7B50D363BAB624A83C7A579CEA9A79B5988EDDABA6327B2348546F4672F3DAA1EA2A9B5929E41C56D4D137A55592238ADA32BE9B1A732B58CE4B6643906AE43BC30E71F8D3D6260334E550A771A6E49E88575D0D285FE401AA40D8E86A9C72035234B81516BEC24C98BE4F5A8A57DB51EF6620A826ACC36AD3105850959D90A535121850CA726A77830C31C55C584463818A6AC7BE4F6AB504B5395C9C9966D22CA819AD6880502A9DBC5B455A5C835125743DCB2AE73C1E2A5F3C45CB362A8BCE90AE58D5292E3CF6C03C7D6B1E477B1AC20D9D25A6AB9942AB715BAB32B007775AE0EDEDA44390E79AD5B691E0396909FA9CD4CA0FA16E0AC7521BDE93393CD665ADF2B9DACD57C30EA2B36AC66D5898018A7038A629EF4ECD2B5891F9A375340A50314F510B9A4CF34DC734BD28631C48C530F4E683C9A69A68069EB48578EB4A690E693B8EC2630296941CF18A09C0E68018739A0F3480E69D919A9B08615A8F1CF3D6A56241A61EB9A7A2111EDE6838030294E69B8CF5A77258BC63934C61CF1D294E052039146C02632D4D3C1E69F51B1C9C557416A378A0714A452118C545F51B264FBB415CD3549E2A6FBCB56C57B15B69CE69BB7E6CD4E50EE39E94A028152BC81B38CDA76E7033EA293771D7F3A407DC83EF4A222E3738F97B62B7714D99EFB8BC1C7506AA4CE776339153CAE11701B3F5AA4482F9CD24C490FD99E739FAD34E73B718F7A6AB1DF8EB4F63820E7F3A766B548A5A08ABCD2E02B7AD0013CF4A4C8268D777A87A1272DC67148DF2F19A6E18F4A419EF54A4BA176171D734CC60D48B1B50D1E6A6E876100214E29460F5A8B7321C1E94F0D9E829AB812019A7AE462A30474EF56218F70A9F3B0C95727191530CAF41C526DC0EBC52E49E01A4D3DC3A92EE0318AB11CC5462AA1069C1BE5C134AF62AC684775CF5E2AD070E339AC5CF3D6AD40ED8EB52F442B1724E9599396CF06B437161509B72ED9C71493BAD50D2B991F317E4E4D5F8012B51C91AA4B81CD58897038AC6AB35846C49D2A559194654D300278C53D1141E4F158285D96D927DA0F7353A5D123AD539829E41A80391C66ADC397612699B915E738DD5233EE60735831CC43735A56D2348C2AE9EE4B3A48087B7C1F4AE47C4BA61910C88391E95D4DB36100A6DCC4B2A90466BB918AD1DCF2392D9B69E0F159D292A71B6BD1351D21416602B93BFB58C3152066AE2EDB9BA69EC60190918071481C29C1E6A696C646CF96327B0CD4D6BA6B9FF5CBCFA75AD636DC994AC55562CC302B421B379403822B46DADA08D80DBCD68A246A3802AB45A984AA4BA1420B1545191CD4F8118C28153484E302A300F719A4DADCCF57B90B938E952DB404F34D6077018E2AEC6151060F3517B9A4603CAE16A27B808303AD457377B14D53B79CDC49D2A2D766F0A7DC4BD49E51B86715269F6EF9CB03F8D69AAA84E40A432228C2F5F6A22DDF536BDB445852156ABBDC107BD3E30E796A59530BC2D0E7676128F716098EE0724574B62FE6443279AE5A39106322B6B4FBE841DAC40351369C499C7B1BC8053B6F7A8A370467B549BAB9EDA980A41C71461B14648A32687E603739FAD2D1C7A50695C03B535A8CE0500E69E81623DD834BCE3348C0839A32C714202458D98640A945A4D2AFC833F4A894480633814AB25C5B9CA48C3E868B6A2631ADA542432107DC629AC0E3906AFC7ADCF18C488AE3DC62A51A869971C4D69B0FF79303F951615CC7622A22706AF5DA5B87CDBB12B54DB05A90C3231C534827A52E3078148370A7CDDC90DBC5230C74A97B531BA50DA42232B914D2B834EDC4505B8C91493BEC09098A0201CD05A82DC628B05FA08383C8A91092702A1CE4D2ABEDE945C2D62D10318A4DAB4CDCC573DE93326DC914C4CE2C8217AE693E44524654F7A463DD97E98A86594018C835D16EA6772291B71E99A8F0073D3EB46727D29E0E472B914E5249D8127622E8DD39A7B0CF2694AE5B8E29DE5313DE94B57B9488C31538069E14E3918A91610AD963CD4846F0074A877B8ED621390383489C93D49A98C63A75A72200693BB562D2EE22866E31C523264F3C5588D0E79A4900CD55D2E81D4A3227CD9C66999DA7DAA794E7A715063229ABB18A0E4822AFC3C0155A040464D5B53C800605297702475268452A0E6A6DC36D467E6E454B4D02123CB67352F97C75A646BCD5B5872BC1A9E855EC55C60D4F0119C66A682D0337CC6AE1D3A341B81A1276B0F56471AE0532694AAED534F9A411A6D5AA2492739A76B1AC202084962C4D5884002A48A3DC98350BB794D8AC2A47AA65B5A9638009CD40E7DE93CD53484AF73583D51246588EA6A32FCF5E69659157A554964006ECD2511F42DC6D93C9AD7B160A0126B8D9F51F2B853CD0BAD5CAAFC92115D94617D44D5FA9E931DE22AF06AADD6BD05B83B88FC4815E7CFABDC4DC1639FF006723FAD57796476CB126BB1527D592A9AEA745AB78A03021071EB9AE625BF370FBCF434E783CE5E6A016854E00E29C7476348A8A45BB69232DD6B4E3641CE2B1040EA72055D467DB9C74AB7A9138296A6A8488F20734C3F2B633C5514BA615219C3756A1A7632F6762C9607A52E702A9FDA15470DCD412DF9159ABBD06A2681751D4D43717AB18EB5992DDB3600A88079E503B55C616F88B5157345236BA6C92769ABD0C51DA2FBD431110C400FBD562081A46DF21E3D2938DF736B24854F3676E3216AE476C1796A7C6AB18E0535E5C13497621BBEC4C08ED4E27D7A5575727A53C9C0A4E28047B6493EEF06A482CCAB039A88487B5588A62300D63CBD98B99A37F4FDD20118E4D6CA69F315CEDAC1D2662B3065AEBE29D9E3DD9AC9AB331919CDA7CC9C95AAEC0838C735766D5079DE583F5ABB15B5B4E9B8E326959937313914B9CF6AD2BAD3D5065187D2A88B6989E1734790C876D34A81568D9CD8FBB511B6949C629EC1A15CE3D6A1FB6C10E77119A92E629215624715C86A976CAE7692294527B033AA1A8C4DDC0A985C23F4615E749A94A38DC6B42DB5765FBCC7F3AD1C51173B850AFE94E16CAC7A561E9D7ED338C1AE80DC854031CD4DAC0B52ACB1ED3815094CF35248E5CD3338EB536B942631DE98C79E29C47349D284912381CAD444E4D4806EA694E69AB031A40A6633C54BB05349145BB86E47D0E2971DB14E3CD380CF419A16FA011631C52118A97CA627EE9A0C6DD02926A6DAEC24C742A4F24F1563E515997174D6FC720D4B6B7EAE70E39AA4AE896718E4AF20FE06ABB7EF3A8C7D2A7918B363191503673C1C56D1D5EAC9490E58D5475CD26D51CF6A69271DB3ED4A064F5E29A5ADCAE55BA264DA4F4069C46D351AE13914E59413D7351A5C487795BB926902907029F9279A6F2A72714F45AB2B71F800E714EDA8C7834C0C0F5A554C9CE68767A8D12025063B50C0119A4DD83B734E6C2AF6A894ADB05B529CE00E9554649ABD2A96E6AB2AE5FA53E66B51A45889485AB0A09C1EC2A3890F7A9F254614511577718E1C8A0819E3A526F27DA9ACFCE293DC1682A1F9B157A062A40AA51A679AD7D32D1AE24CB7DD15374DD8A4C956072B919AAD35DBC2C51B35BF23C36A847048AE7AF9A3B8258119AB8AB6A8DE976213287E735096C355662F0B64734A260C39EB56E2DEA6E958D1866DAA4B1AA17378A5CF22A19EE4A46706B16E2E8F273C9ACDC5376225A1B11DEA64F35379E5F9AE72DE4F9F24D6EC255A315855A6A1D09BDC579AA85CDC36C357A48FE526B3EE7005286BAA148CA698BBFCD522918E2A1902ABF1DEA68B1C0240AEF835CB74572DCB3147BF9E956045EA2A28CAC7CE6A71701BA0AA5AEE2E5B02A106AC08475EF51ACE9D7A54BE7AF6A2374F563D6DB00847A521451C628F3C1C8CE29BBF23355715990B4433C544C8D8F7AB64293D69CAA845691977172B6662C0E58E7AD3248F6B60F5AD490A2026B2DE40F3524D5F50E5D07322ED1C54F6C8139EF4D23200C558B600B73D050DDDDC515A176DE00E43BD5B2EB1F03A542AC3185A432C69C39ACE4DBD8BF52C99F29F28AAC166918F045491DC45D88A8E7D4238BF880FC692E6B869D0953CC8F82B4E3381D6A283508E4EAC33560341213D09A25A3D4195DAE573C714F495988C5452D9067DEA4FD2A5B286479D630BD4814BD510D23A5D095DA5E7EED745797496F0E10E0E2AAE9F6AB6769BCE338AC8BDBD33CC403C0AE66F5D0C5BBB268A4F3272E4D6BDBDE15C286C573F1C810726A7170BD4355476259D42C33390E5F23EB53A4816508715CCC77D2C63E4908FA1A7C57B334A0B3127D4D2E50B1D4C91153B94F15133AF3803355229E67039C834E28CA7716C0A924CED5A4611904715C65D431CE58329AEBB54B94652BD4D73129E48C0A6A4D741A39F9F4F087E434D5B476C75AD6962A5F2B6A6EC7E95B29DB721C7CCBBA347E530CD7404EE358DA5B0C671CD6E00BB32C4544BDE2E29244278E94C619352168877A9A1B75B81FBB393E959B8B0BA2AF7E7A52639AB52D94D1FDE8DBF2A8369EE2A6D7DC066EC0C8A01279A0F14F48A4906154FE02A93421DF211EF4A2DBCCE541A7AD9B20DD270293ED9E412170452B6A26C745A6C8C727815A70E9F1A2F4C9AA569A9798F8622B4D2E11B9C815766886D91BC41460A8A8E4D91C65B68E3DAA67923CE4B7EB59D7D71BA3289DEA5B1239BD42E51EE18902A9962791C55FBBB24619EF54FCBC700F3496A52DCE74CA0AF0306A277C8C814DCE3BE698DCB7A0F6AEAD2FA1228639EE0D38B13C0A367A1CD2053BB1CD124D0C556E71CD3D54839C7149C83D39A52C6A5A4B518F694FAD2094F5EB4DED498C62A5F9EA34B4D09E37DDCF7A7E727AE2ABAB052003527999346FA0EFA1206C1A7EF078351039352B050A3D6A5A717A8FA6A239C8C0A6C683E94E5C1A19B9C0A2D7DC6BC895700F5A76EC0ED50AE714EE7B9A72492BA116576E326A391013C114DC9C0A9ADADA5BA982A034934D859172CED3CF000AE8ADA048200A063D4D49A7699E44632BCD683C51A27CE40A1F2A651CC6AA36C4C54F35C75C5CDCC2FB831DA3B62BB9D55A02855704D73735AAB7519A51B44DE12B18C9AA3CA7E65C54CB728E0F634B7368064AAFE959A5C46C41AA728F42F9AE58B89B729E6B1EE5FB935A0CC25185E954EE20C29C8AB8B7177681EA84B672C4106BA2B423CB1EB5C8C4E524C035D1D9480C6083595769EA289A521F97DAB36E8020902ADC932EDC679AA734995E0D73457606CC968B739E79A78858B0001A79FBD9C55A8DF680715DB14EDA95ED1A5A0AB6A5507352ADBE00C1A6BCDD3D297CC23A1ABE75B1939CD921B7C2F26952307BD45E6975EB4CDE7B1AD232BEE4F3CBB96C4219873528B5FCAB3848EA724D4C97AEA7D452925BA1F34B7B9796C1988DA401EF529B40839355D750DC320E295AE8B8EB427D589CE613DA8643CE6B9F9C9827C62B73ED381D6B3EEC2C877628B9519CBA907DA814E0D5F81B310DBDFBD62CA7B22E2B42D1DFCB0391552924B5364D1A8B2AC29F3B735977BA8203953934F96179392D50FD89179619FAD65ED3955C896A523A8CA49DB9A8279AEA4E4938AD26B78C7445CFAE29A624239A2352EC2CAC6509AE117E573F5CD5CB4D6A6B761E6127EB52490263E515426B7393C553AAF6B05CEAECB5B8AE4E09C37D2B62DAE846DBD48CD79EDB3324831C574D6B312ABCD09396AC6D5CED5B5996E22D99DBF4AA68A558F39CD65A4DB54735A16F2175CE6B1715B994A0D6A4B29729815147E7F439AB0BFA54D1E38A49BD999B2D5BA12A3353EEDB22A28EB512300302AFD941B9B795C8AB649A90158A204B7E154AFAFF000A70D4FB99028C8AE7EF65CB1C1AC5EE043737592773567972EDC1A86E59D8F069D170BCD11BBD43A8F66E39A96160E306A9CE79EB8A92D1F2E0035767613D4D8B7DA8EB8ABF7F22A5B064386ACC4608C326A3BCBA59005DD52F442F205BF7070CA4D696997DB2E17A8C9AC852190600C8A9A02DE6A9E98AA84AE4DAC7A1C5751EC0CF8354AF5ADE76C00A0FA8AAB6F8920049ED5957176B0DDEC0D9A995BA823612CA0EE7349332C03E41C516CDE7C408349242DC83C8A4055B8BBDC9CD60DC4E43920F15B92DA9C1039AC1BD81A2720F4A169B021D6F2E4EE0706AD0BC994E0138ACD85C20C66A6170ADC034EED81A2B7C4B60939FAD4B2B91112393590D26D6C8EB56A1BD461873CD39262BA226772A4B5416EBE64DC8AB771710EDC645578258D5B8EB59BBDF419C507C8208A38C7F8D214556CE4E280FF435D53B5EE25AEC2E483914190A1DDDA9A4F34EDC36ED27352DB6C360F3189C8C1CD001CF279A8836C6191C5485C11C50FB0EE3B27D6976E79CE0D20240E47E3407143BEC087043D4914F504F434C5618E69CB9FE135326C64A09C7BD0AD93C9E69A11C8E7A53E34EF4F7D5B2C954E0600A42A7140627DA903367AE6B37AEE0890120734F8C65A9A07A8AD4B0B096560C50ECF5ED4005AD935CB00570BDCD74F63696F688362AE7FBC40CFE750416E02ED52062A7FB2B9FE3FD69B95C122EBEA31A00A08ACBD42F438243FEB4C9EC266C9539C7BD61DFB4B002AF9A9BB65A486CB72CEDD722A16980EA6A979FCF351C93EE3459EC696B13BB870493587A8228CB01CD5892E76120D54B8943A75AAE491491423BA688E292E6732A601C50F002093D2A8C8EA92E33C56D18DF71B562F585AC6DF339E6B4BCC4846D4ACCB7B88F1D719A9C4AA4FCA735138A94ACC12D09249DC9EB509B87E84D4AEA31D6AB4838F7A5C96600B2B6FE7A55F8DD1D40CD648DD9249E2A48673CF6AAF212B9AEE10A0C1E94C6916B3FED0D83C9A413E464D0A3A8B7344367A500B7A1FAD5386E0EEE4F156C4C1BD289C9F4138A241C8C6334AB112DD29F132E074CD5A578C75C0A95292049149E061F7739A6224E3B1AD512447A629449183C629B9BEA5248CE16B3381C1AB3169A7AB9CD5B13281818A8DEEB1DEA2ED6AC771A34D847CC40CD2496D1C632A00A6B5DF19CD5692ED89C134D098E6619C546D20C60D4465C1273503C8C4F14723B021CF211C540D20CD058EEC9350BB61BBD528DF515C90C84F4151B8DFCD20719CD05AB4B37F120BB1B12869700735BB0205407A115916F9F33815B2A19E3000E69C1F99A4362D4277915AB1868A2C8ACEB3B760C370C56D0C6CC0E6A2A4D3D113565A58745F34633D6AC2019EB50C430306A6242D73B473966204B851DEB76306DE018F4AE7A2B810B06233571B52F35368E2AAEEDA89A259EE0BE45625D3E09E79AB4ECFC9359D70771A9BDF70221CB64D29183483A7BD304EB9DBDEA9764220B85667C52D8C6EB312D53E413D39A9A25E722A95D2D02F6412CA4360D53954B3EEC9AB13F193545262CC41A4992685B671D78ABB17041ACEB6233D715703E0F5E94D584D1D05BDCEDB623DAB99BBBA637C5BDEB72C5D5D707906B3F57D3FCA7F353A1A24ECC4BB1ADA3DE9202935D0AB2B2F3DEB82D3EE4C4719E6BA5B4D40F01CF1532B35B8AC69496E73953C562EAB1654929C8EF5BB05DC52719150EA31ACD03617B54497705A1C331C1A744986DC29B720ACA4104510C802F279AB8A1BB13B8E3355C15527279A919FE5AA333E0E6949316849248A4F5A877B039538AAFE6ED393CD31AE33C8E954A2FA035731C3B37CBC539986DC1EB554C8DD1968C823A918AE99454741244ACC73C134D0ED9E466A3F3081C60D2F9873F70D4269741D9DEC4B92DD722943607506A0F319BDA9E738CD09DC6DF626121618342901B9350A6ECF353F960F39A56EA3E61F827A54A8CDC54414839C114BBC838C8A95A82562CACADD2A656E055618C0C75A9D4E7AD27BD8D10FEADE952050307AD314679C1ABF610F98F975CFB5425777B88BDA6596E1E6C8B91E8456CABBEDD88981F4A65AA4CCA008580F7535712DAE49E10FE54EE25A102473E32AA49A6CB25CC2373A381EE08AD8B5B5982E5EA6BC8A37B56420138A91DCE713516C7DEAC2D6EECBAE4D5B910C53329ACDD5A12F6A48EB5A2B14629B81D33519B85EC6A83CBB188E78A85A71CF356E3A5D1A2B1A12B24AA79E6B31E5D8D87A7477009C669268FCC1BA92B9690D79C6C38AC99048F313B4D5CDAE1B9E957234856D99C81BAB48B511C8C705C371C54A934A8D4D66DCC76FAD5A861CF27AD52BC9E82499225E3F195E2AC2C824ED4C11A8A7A003DAB2EB6077219109381D2A163B4E055A6E18E0D55942E41C8AB4D256627A0F538EB48EDC631519396C5283F360F4A51D191763D4B29E4D3D2670C4738A63608001A72803D335768F41F3772D4370C0E49A94DC163D6A9AB9DDC8E2A4E18F151CA172F4570578CF1528B803D6B3C311C014E0E6A5C6CB62AF72F1BAE30335199988C678350021873814D238E0D4A885C943B01D734C2CDBB3CE28FA5216C647156C188589A42FC6075A3700A6A2390339A1B6B442DB71C47BF3519CF438A5073C1EB4D3C373576B6A0C36F3D2909ED4B924F14CC65AA24F417536F48B449DF9AE8E2B2F2D86173593E1E42A0B11C574C93C4382466A1AE4D10A4DD879B74D838E698908539AB01830C8A6965079EB5328DD117233B477C5358B0E40C8A5600820D440BA36339150D01680DCA3228DBB39C5344FB796A6C978854E0D0D262257B81B719AA2EC09CE2A9BDF6D9883D2AC890326E1C8A6AE0C46231C55411319B71E953A4CAC4F18A78E79A7B3B8AF714600A95321723A544632CBC1A4F38A7C952E56D90588EE1F39C5578D70738A965393E951EF08C0134E37EA2628DE240455D0C76E6AB29F9B3C1AB19CAD52925A585766B695382429AD7BE8964B5391DAB9AB190A4B5D4090496BC8CF14A4D326FA9C7B0D931C718357D666080D56BE40B33638A6C529298A492487B9A967A91F376735D0C372AD160915C33DC2C0495FBD501D5672DC4AE3D83114DEAB415AECDCD62350C5940AC5561BB39A8E6D4659576B366AA99B07D2A755B83349A51B7922B3E7973D0D42F3311C13509E7BD5A577A93624DD918A8572188ED4A580EA29554B722AAF2BD8A4EC643609EE29A724E060FAD5816F9190C4FD69CB063248E6B47A13A15DA10C318A746842ED0718A9CC27A82452A40E4E454B9396C3D48847F28CE0FBD3C22B0C0E2A76B66299C52AC41579A96DA04312218C139A90A2AA824D0ABF371D289A0798055C8FA524AEEF2653892AC6CF1928320552D85A4ADD13FD8B4C1088F2C47248F7AC7B64324C4953CF7ABB47A304B526894E7A559113F50334A5A3838620D559752546C2D26ADB1D31A4E5B9AB650F9AD86E3EB5D15B2C51280AAB9AE086AF2A12CAC47D2AE5B788665E4B023D08A9E5E6D50DD067A1A5F0897B0A92DF5A4693664571716A9F6A19DD8F606A6B70DE7870C7F3A4A37D4CA50E57A9E802E772706A067DE48AA16D231880AB91E7BD2D193639FD463D93938AA2D10990A9E86B7756B62D1EF02B977B9647DB42D469E873FAC68F242C6488654E49AE6E42C09C835E991BFDA130C2B3EEF46B69D8968973EB8AA5251D0699C0287CE5549CD68DADA5C4FC1040AE962D0A247F957FAD6A43A3A84C9E2AE55125A1A2672274A241154AEAD1E381941AEB2FE116A8C41AE4AF1A4666218E2A2CD94998EB1B83CF1F8D5989DD383CD569B786C8A482E183E1856BAD877669090B106A5DDC7CD554382C08A94382690AF7164FBB95355D8AE39A9198ED2077AAEE7B55C6E361BC01914EC96E3BFAD4058371536FDA066934D4AE4DBA8E038EBCD4AB9C7BD4225079C53918139E94E31BEA2D59657A608A77008A8C31C7149D0E49A567B0D5FA9607348A083D6A20F9FA53FCDCF0053BD9D84AE9D8B05C631CD307B9A62B1CFA52970A696961A4481B0DCD32438E477A8CBE79A70900033D6959F71EC381C8C1A40BC1E6985BD69A5C1EF44935A858771BA82C297008C8A4F21D8F14ACD6A2561A809CD5BB7B276704A360F7C715A3A369F13CEBF68E47A5773F62B7FB3811A8C01D05294925A90E5D8E6AD36DAC400E2A608D2B07526B45F4E590F0302AC25A242B50E49EC4DCAB1DC98C052A734E92E548E4E2A6F2D5CF0A3F2A8A7B21221EC695C4539A762C363558490ED193CD6635A4F0B939C8A9527C0C3536AE3E6E85B9242548AAB9E7AD4325D8EC7351F9BBB9E953662B961A049181356E15006DAAB1BF1C9A995F8C83CD0E37D04C98C2AAD9C50B1F2706A0379B080C69FF6D8D46E0296BB08B28110124D46EA8C722B3EEEE8C89F264541677720251F3F5A766D6C1B97A407F1AAB3425DB39C54BE692DEB5260BAF22A744C486C03E4C679A9C3F38E955D10A54EBCAF4E6AB46363D66F2DB20F35723D6E78D362EDC7B8CD65C8405273CD5713B6FC76A6935BEC2D0BB7578D23EF61F95312E06CC838A80C9195E7154E59B2FB538142490AC2C972EF29C8E29010C720D45BBD697DD69A42BD87331EA2A2967DA39EB4EC64726A0922DFC52551F60E6EE4B14BE68CD3F79E411C5320508B8C54842D572FDA1088C187353801076AA8D22A9C6714EF38E3839A1DEF7624FA1B49A2A6396028FEC10EDF2C95592FE42D90D9156E2D42420E4E2ADAB1DAA840A7368B7111E19580F4CD5578E480E0AFE95B0F7FC609CD674970AEC72452D64C9950B6C57F332BB7A5467681C9A91A12FF00EACF26AE5968CF28DD336052765B984A0D3284781D39AD8D36052C0B283F855A8B48B68DB23923BE6ADA43145C83CD67CF7561D88EE6DD0A9DCA315CF5ECB05A64478DC6BA3BC56961C29AE1B5659E2998383EDEF447E2B1AD28ABDD90CD74D21273554B12D96381554C8C0EEE69DE6EF5C1AE8713AEE4E597D6982420E7B546FB580C1E050C7E518A717D915756346DAEDA26056BABB2949C106B8FB3B662EAEFD0574D657519214715151744725595F63B4B49BF76335A114AAD8E79AC4B37063196FD6AFC790722B1B35A33034DE312C454F7AE3757D25E29CB28382735D5C72330C1A7CB6EB3C7861445D986C7190FEE9029EB521704641AD1BED29D72E9C8AC393CC52C0A918A6EED94A572637421CB30CD42DAE2E30781593717A0BF965B0699E52C801F4EB5564B7DCDA9D9AD4B5752BDEA9DA38AE72ED7C994ABF7E95D12DE471C655474F4AE6F5293CEB8DDE831551DC6F4293C418F4E2A07B74CFA55BB3899DCEEE6ADB58EF3D39A275147E2424EE6761367151193CB1EB9AD23A730E0534E9B85E4F3E94E35105CCD69F72E471559A4626B5469D8273C521B241D85355609D922AEAE67C48CC72455C4B091FA9C8A7B2AC23B5584B820020D5C6574434EFA0D5D34E314A74E651F2F3529BCF4EB4D5BC264C6684AFD05EF959A2953F84E293CB91B2369ABE2725B1C548242C3B714ED67B87333392193B0A985A4ADD0558562CD81814F2D221EB4D5986BB94CD94C4E4FE941B79B38C1AB46671DF349F6861DA93858ABC8A9F669B3D29FF659476AB1F6A66ED4AB3C85B0471424F761ADB52B7D86527923152ADB228C39E6AC6F6FC2A19369349C3B8F7DCB1143085C819A70201E060556825556209C54F90D8C74A57B6886A25CB37092649FA574565AA15C2B1F96B978BE592AE2124F5A86B4D44D763B2DC1D4321C83509259B1593697CF18033915B76FB67018100D6328D88945A1F1404E00153CB6E5132455EB38900C9EB5625489C6D2E296C64D9C85C900E3159B35BBB9CA2D7652E91131DDD6B32EEDD6DC1C0A2FA9272A74E9776738A46B7953DEB5DE456EE2A06CF5ED4D4EFA0EDA19A26957865C5392EB1904E2AC4C14F6AA33C5C7031557BB0E8170C5CEE0D4B14DB86D3555629338C9C54AB032366ADC525622FA97171B79A42A47205566B8DADB4F6A916F13B9153CB2E83DC9C4C53B54BF6CDA3DEAAB4F1919047E7559652CC73CD4FB34F52AE5F6BDCF6C541F6B98B1C1C0AAF2297E01C52C60478DC79A1A5D105C937CAC72CC714D926F286E249FA505D4B6334D3B5F834D4536C9B847379A33C8A78C7355F88D89ED4A9382DB69A685CD725DC0F03AD0EC5109C7E94DE01A5DDB8629DD27A86AD6A568672CC413564124648AAEB0012E738FC6AD021579E686B5D01F742296049CD3873CD3188C645406562FB7B54B498AC4B244B275ED42C6AAB8CD20618C669ACD95E0F35506F61DAC5C89487E78156632376DAAA921230C715346DF356966BA9E8AB125C465572A6B0E594AC849635B72312A6B26E2DC1C9EF52AF7DC4C96DEE4A0041AE86D2E77C7CB572318DAC173C56DDACDB4014A5792B3329DBA9BBE781D0D37CF19ACC373F3523487A83CD472348CAC694974480074A8DD22994870083D8F7AA3F686039A635C37406A15EE063EA9A3F94C5A0236FA1CD73B2131B61B8AED5A50C0EF20D606A5A7AC8DE620E7DABAA13B7C4691A8D6E6402DDB906B434DB3334C0C8481E94B6F02C31EE75CE2B4ECA58E419E07B553972EC2954EC5AF26351B158629D042B0BEE53514A70320E3F1A64575938358377D4CEE6FC37A554726B56DB5708A371AE57CD057AD47F6A21F19A5A05AE7A1DAEA31CBCE40AD04B9565C0615E751DE3AAF0C45489ACCB6E726538F4CD26BB21591E85B971F3104573FAD5ED8DBC4E176197070063AF6AE72E3C4F3CD034713142411BBBD7293CD76D292D3BC99EBB989A5677B326C32E0CF3DD704EFCF506B6EDC35BDB0591817C7354ED2210A79B272C6A705A6618079ADEEB637A6AEB50C124B01C566DFA81973C56E88CC63047CB58FA8057C8C71445DE5A17244162D835A8B8EBD6B0E0251B1823EB5A11CE55706B3C44252772925B22F6E1ED9A89C0233DEA13381D290CC4E7D2B9BDEE8C6D58523AE6AA48E138CD365B83CF3549E5DCD926AE9A93D2426BA892312DCE4D3958F000A63B64D3E32A2BBA1169117D491720E314E5501BA734880E4F34F076839EB4ED606BB01186069C8E77633D69B927048A702038E2949F415F4278142B673C54CDB5B277540BC678A9E3646E36D3E5695C2CC8E54C4795EB55C6F00927357E4198C802B3C9643CF4A9772B4DC58C36735606EDC2A0439EFC5582A30083426DA10D762AC476AAEAC7CCC93C5492CA14F26A9FDA5431145AE87E84ECC37935623BA0542D674926572BD6963620027AD4B5A0E3A9B31CC01C66ADC127CDC9AC781B27906AF46581C006A25B6A8B4AC6E445702B4ED26647C03C573F0B4830706B460988EA0D44DA5AA1F2B3AE827DF160361AA3CC8877C8C715916F72D1B673C5698B81730ED26B28F9984E0D161F564893AF159D7D7D1DC464A9AC8D41668188E4A1ACB5BB910EDE48A9BDD9CEDD997CC8AAFD6A7237A7CB59F12BCB28C0ADD580456F961CD5D9A2548C810B1639A63C5D4115667942E48A8B7975E945DEC53F21B140BD48A90C6A54F14F560ABCD30C8334F9DA07E6519AD83E40EBEB50AE9E5473935B36D08B8936A8AD63A332C3BB19A6A4B725A5D0E41AD8A8E01A84A18C640E6BA29ED0AB631491E94D28CEDE2A9C9DAC2B18D146586EC5135ABC8B81C1AD69ADBC8E318155B0738152DBD907333205ACB1B7CD4AC0A8E95AAF11738C54134185C1149360667985F8A8D9240D900D5C4B701B22A60AB9E40AD5492158A61DD579524D209719E08ABD84E9814D3146C718028B5F57A0CCD9653FC39A9629895E6AD35B215C1C5305A03D0D4B95F4EC26D90BCD8AADE780D9AD136EA38237531608C3729CD117761CC8ADE69C679A8DEE31D6AFF0094AD4C92DE32B8DBCD5AB5EE175B91ADE04601813529D457B53E7D31BA823F3AA9FD9B3E490991F5AD3A1DB1A91EE4EDA86E43CE0D575BCDC70C69CBA64F9E9C53BFB258724F34B950DD54F423017CDCF5ABD113D4715516D8A3E58F4AB01F6F7E2A52D08724CB40E7EB4BB89AAC5891B9681212943EC88B32CEFE31503BE1F834D32617AF35197EF49AB0598D925E724D34CD91C5412BE49C75AAFE6114F95F61587DC39DA40EF4CB44647C96A648E48C814B0B31E4D371276352560D1601E6A3821E724D53371818CF351A6A820241F9BF1A5CBA7BA0A5736F6E0544C101C922B31F58320F9179F7A8A269EE09DED807B54723DD8731727D5A38DB6A10C7EB558DE79C3E66FD699FD9B0A364F5FA9A8E544887157CCB617327B96D2EE254C77F5A8D595E51CF7AA270DCEEFD6A4B60E66C807029C57DE5AB5CE8E0804EEA0F4AD410C712E0281EF8AC48AF7ECEA3D6A29B5690E7078ACF54CDF434AEAE7E6D8B8C5539A08661CB11F4C562B5EBE4B6EA8135260E496CD691B05D3342E23488E73CD46B26E1C556176B7048EF48331BF5E2AD24D0268B0ECE16A2F35C9C0AB2A519300E4D3163C3E40ACDD28484A4D8C58773618D24F6F184E38C54FF00F2D72053A50190E6AD452F850A4D9924F50053A2CEDC30A1C90E46314A3A6722B4BBB075268DB8C834FE71926A25318E9D69E08CF5A2F2B586F7245CECC819FC28919B8207348C76A70690B12066B3490277D89D1DB6F4E6A44675C9C5568E420E7356373123D0D292E8CABDF41E9393D45432AEECF6A7383191834E5024C9CFEB4A3AB04880150060D4D2CAAB6F9193F4A8258FCB1525BB02A5585697BA26CD99AE5A43919A960B20FF0033120D680B78D79E2A40001B6A5EDA31EA431DA47C022A45B540D9038A91180241AB3045E636139350DB5BB04EC4B616514AE3702057556D616514619A0466F5233542CEDBCB8C65467BD3EE6F42700E31532986E6848F63021262880F4D82B35F54B20FB6308DF4C7158775A819E4280F1F5A8C04501B19350A3CDB8D34B73A546130DF173EA2A68DD97A71593A5DCF9120CE4A9AE99AD5278BCC888CFA0A52562B9F42BB95B88F6C8066B365B28F76156ACBAC914803022A7F2F7A8205276B6863522B720B0B278DF7EDC8AB9793A797B1860D3ADE5D802E0FBD56D5A112A8643822A6E72F533248090706A38D255F9700D44649D460E78A7C73BE79C8A2DDC57D449DA45C64531016E735382D3B631576D2C016E41A7143BDC9F438764C1DEBB38FCB78B1C1158105A6C0074A965BD7B51D0ED1DE86FB85D16AE6CE077DC05393C854DA00ACA8F568E57E0FE06A61365F214E3D69736A4B691475484024E38AC53192720D7417EA64889079ACA5858F6A7D4685B28039E6AC5CE9C0AE453ED2331B0DC38357A55ECA69A7603949A0111231CD547E056FEA16A48CE39AC3954AB7229F36BA027D08B7718A6B1E78A5C0DDD714D247639A4E2DB0BE838B023934A18EDE2A2C8638A78DD9C76AB718AB05C7A83D7BD054B1278A09DA0734E401F8069A5D11361F1461874A9FC84F4A96D212DF2E2B463B441F7BAD656B315CE7DA595CE4FE556ADDC85F98553793121F4A9049F2822B77256B16B42F0756E82A3B8608BF5A8A29412477A8A5932719CD676D4D23DCAD29CBE2A2257181D6A49B3D4F1553706C81C1AD62D2DCD1324672A3834AAFBC75A84AB6704D3972BD28BC5B15C9CC8B8E6A266CE7069870C7938A6367760537A68318C7033DEA06724F4A95CF18C556663C8C62AA3EA038381F5F4A1A562BC0C5404F393D29FE6055C11C51649D9136656B89D9783D4D54F989F5AB175223F41CD3A01BB9DBC5351BA337A6C16EC53923815A115C853BBB542022A9C0A8643F2F153656B0B5DCD2790489B855595094CF39ACF49E68DB27A5598AE1DDBE61C54CACBCD94892CED8CCDF3E40AD46448940403350C2C02F029D2CA31B45272BEDA1BA564559E5C7DF354A4980E0743535C3A8CE79354DDB2B9A1733652D08A5970A40354CCC065475A92638E455660BB771AD6104F564B6AC11CD24126771C7B1AD782ED654CE327D2B058FA739A96DAE3C99306AF92DAA052E8CE8ADE6F9BA55EF3D300F02B22DE753C8EF4B73232E08A9926D96EDD0D1173B98E30295A62548AC586EB2C496E45595B8DDDC1A4D36C7643A504D405981F97356130CA7E6A4D80A9DB4F660B4208E7C361BAD5B18C6475ACF9A328DBBD69D15DB236D65E3D69C9595D02D0D0E08C9A637D78A4591594629A4FCC6B2B5D8EE4B1101719AB2ADC75AAA853069C1B27AE055EE3B36CB45B70EB4C4611B724FE1402A538A6B7246292693D4AB16DDA39630029CF6CD55F29D4FA539262BC63A5580C26504F5A4AEB725EDA10249C1539245488493DE93CA2ADB80CFE14F50DFC4314A6D7516AC9E084CEE0574367651DBA863C9AC2818C24135A42F82C592DFAD437D00D1B8B95894946AE76FB502CC42F5355EFB53DE4AA37EB55600647CBF2688C2FAB6264A82477CE2B56087728DDC556857E6031C56B44AA105549C5225BB0E01634E3AD6AD85EBC4A06722B18B132631C55C42540DA6B9E5A8D5EC7570F9174A0BAAE7E9563EC70C2BBF008AE72DAF190ED1CD680BC99E3DBCE295ECB525AD0B81ED1D8FCA01FA546F6F048DD6B3B69EC79AB2818A524F5307148926D2EC5B9E777FBD4C4D16D5C72C0531B7AF2335197994E79C536EC4B48B91E91029F948C55916B1C438231591F6A9030018FE74E79E50A7E634EF7EA2B58D1690274606A095D66428FD0D62B5DBA92726AD5ADCA38FDE1C134927B93228DCDAC96F30787257DAAEDBEA5D124E2B5238239908C83591A9E97220668C647B55BEC4A46B4663953820FE34D36C03648E2B918351BAB39029E83D6BA5B3D6A19D42C8429F7351CAD0683EEC0450CA7A50B2B491865E6A6B8104D09008FCEB3ED59918A86E050936176C7CCF249952BFA5655C59C872C178ADF555272719A8AEDD522385AAB69A899CACB68EFD062A94914919C1ADE1731863B96B3EFA442C4A8EB5516EDA05FB19D1ABE739A91A53D075A804AF8E8699F68C0248C1A5D4B4582DF2E5B8A7594804DD6A83DCEE1EF572CD7690C7BD5D95F50BF447596410A86C0AB8C16B26D1F0A306AF99B68CEE19A8D49DB6394201E7AD26483E82BADBAF0F595AC4079EE643F41FA573BA959C9689B810CB9ED5B45AD8B534F429A3ED9393D6866CBF5AA693FCD922A6F3958567349B3556167271D7355C80B820D3D987704D42E771C018AB8A8AD6C512071D73417CF41FA541B70302A4423047F4AA9A4F6403B6F524D46EE40C034E7236E455691F6216AA5D99495C7190203B8D5392F17918CD56B8BB62318CE6ABE5BA9156A36668A9DF72E4531958861C0AB0D871B4567249B4F435761DCC33DAA249A7A113834491D9A86CBF3561515382001491151D4E689FE63F2D46CF731E56F51AFB09F94534C2A47CC715011286CED38FA54725C30EA0E7D2AF5D89E5B90DCA95CF3C0A2D1999B9A826BA0E36B020D3EDA5017E51C9A25156B33482B9AC93F943079A46906DDD550331C0EB4F9411177A86B435B3B95E590BB13559E5038A7E0B72735198F775CD546C90DB446C7350B6D752A3822A720275CE2A07DA4920D6BEA26AE880A051D6A3CFB0E29CE707B9A89C8073D29D9EC5345FB39F630E6B5655F362CE6B994728C1949AE82D98CB077E95536FA0A2EFB99326E864216A58A765201A9648099880334F6B17080ED3F95294AC5356D8912EC018A985C657682335523B499CE446DF95598AC652725081512B5B51C5E9A8E6914637F3504CF1E32303156CE9B339F9413F4A58343919FE73F854AD351BBD8CD178CA70B9A9E1BA77620F4AD43A205FE1FD29C9A3C4BEB44A49E89D888AEE56856593EEA12BEC33565E2741F3230FAA91FCEBD07C1D636F6961E6EC0CECEDF330C91838ADBBFB3B4D4594CB0A36DF515CD3AAA2EC852A8F6B1E48BF7300734A848E99CD7A75F687A5CB6A505A421F1C301822B87974ED8E50718A50AA9E838CEE63167DC4E29525607157A7D324284AB74ACE6B79933804E3D2B6E752564691D8B91DDAFDD38CD4A2652D927159A21919778539A9024980CC0D1CB162B3347ED0318623154E6BBDD90A4D579A751C1CE6AA1B8456E0D0A9A7BEA4B2D470BBC9935AD6D1851CE2B07FB40A9181F8D28D425240C900D36A6F426CDEE756258C0E319A0DD8FBA0D60A3995796C8AB308238151EEBD823136E2949F7AB4B74BF70F5AA103622F7AA26E365D649E01A8946CB98B8BB3D4EE6CDA048919C724735A11DCDA33ED18AE35B5273000A29D6575217DDCD67CADAB9CD2D59DB4725897C1001AB12FD9801B48C572A8EDF7B2735695E72327349BD3426DDCDD55B79318619AB06CE37030456042640D939AD18EE4A0E49A2DE64D8B27468CB6E0DFA523E8EA54FCD4897C49EBC512DFAA8C6EFD69DD5C12667C9A34684E5EA33A60C8D9FCAACB7EFB243E4FD6B3AE6CAE33BD01FA8A7A3D07C9DD92FD9668E50437435AB1A34AA031CD72335EDF5B920B1C0F5E6B42CB539CC60F26AA4AC84E3A6E69DF6876F748481B1BD540AE5EE747BCB397821D7B15CD6F1D56656C11C9F5A71BEDEB87504D09B48CDC2E60457334476C8C47D6AC4775B5B39A92EB4B9AFE40F080A3DF8ACCB9827B2936480FD6A53B89591B2B7A0A8F9B9A93CF5950E4E4D734AD2939F9AA55BC784E4934D5C4DBE86E35A43226E3806B36E921589978C8AA33EA533F08E40AA8B70F2B329249A141BD8564899668B18DB9A89A14933C63355BCC317CA50E053A3BD0C718C55B83BDD6A53D3543D6D31FC356EDA304E2A05999CE0F4AB819604DC064D2E6EE1A177CE48D028E31514B7609C6FE3EB59F2BC930F97350C96F36DC9CD1A3DC2E7FFFD9"

Andrea5jpg_bin$ = SPACE$(LEN(Andrea5jpg$) \ 2)
FOR count& = 1 TO LEN(Andrea5jpg_bin$)
ASC(Andrea5jpg_bin$, count&) = VAL("&H" + MID$(Andrea5jpg$, (count& - 1) * 2 + 1, 2))
NEXT count&
OPEN "splash_Andrea5.jpg" FOR BINARY AS #1
PUT #1, , Andrea5jpg_bin$
CLOSE #1

splash& = _LOADIMAGE("splash_Andrea5.jpg", 32)
SCREEN splash&
_DELAY 5
SCREEN _NEWIMAGE(640, 480, 32)
KILL "splash_Andrea5.jpg"
_FREEIMAGE splash&
PRINT "CONTINUE YOUR PROGRAM HERE"
PRINT " This is a program for Andrea, Es una programa para Andrea"
_DELAY 2
--------------------- End Code ------------

Posted on Jan 1, 2013, 5:01 PM

Respond to this message   

Return to Index


She's a real cutie!

by Pete (no login)

Nice example program of how QB64 can render JPEGS from the binary file.

Pete :)

Posted on Jan 1, 2013, 5:36 PM

Respond to this message   

Return to Index


Thanks, and this leads too ..

by (Login GarryRicketson)
R

Thanks, it also works for png, and I imagine bmp. I am thinking this could be used to load various images, all self contained in the code.
Also I wonder if it could be used to load a image as a sprite sheet, array,..
But I am not sure, yet exactly how to explain what I mean, I guess I need to try some things, and then maybe I can be more clear,

Posted on Jan 1, 2013, 6:02 PM

Respond to this message   

Return to Index


*Adorable! I'm surprised you could post that lo-o-o-o-o-ong string here!

by (Login qb432l)
R

*

Posted on Jan 1, 2013, 6:17 PM

Respond to this message   

Return to Index


*That surprised me too

by (Login GarryRicketson)
R

Posted on Jan 1, 2013, 6:22 PM

Respond to this message   

Return to Index


* Long string capability is one of the few N54 posting perks we have.

by Pete (no login)

Posted on Jan 1, 2013, 6:22 PM

Respond to this message   

Return to Index


*His string is definitely longer than mine...

by (Login burger2227)
R

Posted on Jan 6, 2013, 5:57 PM

Respond to this message   

Return to Index


Bright White Background Color in QuickBASIC?

by (no login)

I'd like to create a routine that displays black text against a background that alternates between so-called "white" (actually gray) and "bright white."

But when I enter the numbers for those two colors as backgrounds, they both display as light gray.

Is there a way to get a bright white background color, in addition to the so-called "white" in QuickBASIC?

Will in Seattle
a.k.a. "Clueless"

Posted on Jan 1, 2013, 9:49 AM

Respond to this message   

Return to Index


palette in screen 0

by mn64 (no login)

screen 0
color 0, 7
print "hello, qb paperwhite"
palette 7, 63

Posted on Jan 1, 2013, 9:57 AM

Respond to this message   

Return to Index


and to get white on bright white...

by mn64 (no login)

screen 0
color 0, 7
print "hello, qb paperwhite"
palette 7, 63

Posted on Jan 1, 2013, 9:58 AM

Respond to this message   

Return to Index


sorry, copy didnt copy, here

by mn64 (no login)

screen 0
color 7, 1
print "hello, qb paperwhite"
palette 1, 63

Posted on Jan 1, 2013, 9:59 AM

Respond to this message   

Return to Index


Also...

by (Login qb432l)
R

SCREEN 0
PALETTE 1, 63
COLOR 0, 1
CLS
LOCATE 12, 16
PRINT "Black printing on alternating whites background"
DO
_DELAY 1
IF cl = 7 THEN cl = 63 ELSE cl = 7
PALETTE 1, cl
LOOP WHILE INKEY$ = ""
SYSTEM

In SCREEN 0, only attributes 0 through 7 can be used as background color, but attributes 0 through 15 can be used as foreground. Also, CLS following a COLOR statement will make the entire screen background color.

-Bob

Posted on Jan 1, 2013, 4:13 PM

Respond to this message   

Return to Index


Hey! That worked! (Sort of)

by (no login)

Many thanks, Bob.

Now I feel like I'm finally in the ballpark.

Your code displayed first one screen with bright white background, and then after I pressed a key, it displayed a second screen, with the plain "white" (really gray) background.

So, you've taught me that my old beater of a laptop actually is capable of displaying the combination of text and background colors that I'm chasing after.

Now, the question is, how to get lines of text to alternate between those two background colors, like horizontal zebra stripes?

I'm sure the sticking point for me is that I don't understand the distinction between what the COLOR, PALETTE and SCREEN statements do.

So it looks like I'm in need or a tutorial. I've tried to find that's comprehensible to me on the web, but I'm afraid the ones I've been able to turn up so far use a lot of technical jargon that goes right by me.

If QuickBASIC were a car, I would need a tutorial on the level of "press the gas pedal with your foot when you want to go faster."

Will in Seattle
a.k.a. "Clueless"

Posted on Jan 1, 2013, 4:36 PM

Respond to this message   

Return to Index


For alternating background colors...

by (Login qb432l)
R

Just set attribute 1 to bright white, and then use 7 as your second background:

SCREEN 0
PALETTE 1, 63 'bright white
COLOR 0, 7
PRINT "This is black on white"
COLOR 0, 1
PRINT "This is black on bright white"

If you want the background color to extend right across the screen, then use:
COLOR 0, 1 'for example
PRINT SPACE$(80); 'the semi-colon prevents scrolling

Then LOCATE and PRINT on the background you've just created.

The SCREEN statement simply establishes a screen mode. SCREEN 0 is text mode only, other screen modes are graphics (as well as text).

The COLOR statement establishes the color in which you want to print, as well as the background color you want to print on. So, in the example...

COLOR 0, 7

...you are stating that you want to print in black (0) on a white background (7). The first number represents foreground color, the second, background.

The PALETTE statement establishes what hue to assign to each color number (attribute). An attribute is like a variable (0-15) to which you can assign any of 64 different hues in text mode. Then when you use COLOR 1, for example, you're really asking to use the hue that you've assigned to attribute 1. In most cases, the default palette is more than sufficient, but in your case, since you wanted a bright white background, we had to assign bright white (63) to a background attribute (0-7).

-Bob

Posted on Jan 1, 2013, 5:57 PM

Respond to this message   

Return to Index


You want stripes? Here are stripes...

by Solitaire (Login Solitaire1)
S

All in SCREEN 0:


CLS
PRINT "Press Enter after each display of stripes to see the next one..."
INPUT "", E$
CLS 'vertical stripes
FOR x = 1 TO 77
    COLOR , x / 5
    FOR y = 1 TO 23
        LOCATE y, x
        PRINT " "
    NEXT y
NEXT x
INPUT "", E$

CLS 'horizontal ribbons
y = 0
FOR x = 2 TO 23 STEP 4  
    y = y + 1
    COLOR , y
    LOCATE x, 1
    PRINT SPACE$(80)
NEXT x
INPUT "", E$

CLS ' horizontal stripes
z = 0
FOR x = 1 TO 24 STEP 4
    z = z + 1
    FOR y = 1 TO 4
        COLOR , z
        LOCATE x + y, 1
        PRINT SPACE$(80)
    NEXT y
NEXT x
INPUT "", E$

CLS 'multicolored ribbons
z = 0
FOR x = 1 TO 77
    z = z + 1
    IF z = 16 THEN z = 1
    COLOR , z
    FOR y = 1 TO 23 STEP 4
        LOCATE y, x
        PRINT " "
    NEXT y
NEXT x
INPUT "", E$

CLS 'horizontal ribbons
z = 0
FOR x = 1 TO 24 STEP 3
    z = z + 1
    IF z = 8 THEN z = 1
    COLOR , z
    LOCATE x, 1
    PRINT SPACE$(80)
NEXT x
INPUT "", E$

CLS ' plaid on black background
z = 0
FOR x = 4 TO 77 STEP 8     'vertical ribbons
    z = z + 1
    IF z = 8 THEN z = 1
    COLOR , z
    FOR y = 1 TO 23
        LOCATE y, x
        PRINT "  "
    NEXT y
NEXT x
y = 0
FOR x = 2 TO 23 STEP 4  'horizontal ribbons
    y = y + 1
    COLOR , y
    LOCATE x, 1
    PRINT SPACE$(80)
NEXT x
INPUT "", E$

CLS ' vertical stripes alternating width
FOR x = 1 TO 77 STEP 2
    COLOR , x / 5
    FOR y = 1 TO 23
        LOCATE y, x
        PRINT "  "
    NEXT y
NEXT x
INPUT "", E$

CLS ' vertical stripes narrow
z = 0
FOR x = 1 TO 79 STEP 3
    z = z + 1
    IF z = 8 THEN z = 1
    COLOR , z
    FOR y = 1 TO 23
        LOCATE y, x
        PRINT " "   'add extra space for wider stripe
    NEXT y
NEXT x
INPUT "", E$

' uses VIEW PRINT to display multicolored screen with strings
COLOR 11, 2
CLS
LOCATE 21, 15
PRINT "Solitaire"
VIEW PRINT 1 TO 18
COLOR 14, 5
CLS
LOCATE 15, 15
PRINT "See you later"
VIEW PRINT 1 TO 12
COLOR 13, 6
CLS
LOCATE 9, 15
PRINT "Goodbye"
VIEW PRINT 1 TO 6
COLOR 10, 3
CLS
LOCATE 3, 15
PRINT "Hello"

COLOR 7, 0
END


Posted on Jan 1, 2013, 11:55 PM

Respond to this message   

Return to Index


LSD Flashbacks

by (no login)

Thanks, Solitaire!

That was a trip!

But I'm afraid it's a bit over the top for my SEEFIRST.BAS program. ;)

Posted on Jan 6, 2013, 5:20 PM

Respond to this message   

Return to Index


i've got that tutorial, it's aimed at newbies and will take you far

by mn64 (no login)

http://www.network54.com/Realm/QBZips/mpgitqbi.zip

let me know if the colors don't suit you, i'll help you fix them.

Posted on Jan 2, 2013, 1:13 AM

Respond to this message   

Return to Index


Thanks, menn!

by (no login)

I just downloaded it!

Posted on Jan 4, 2013, 9:55 AM

Respond to this message   

Return to Index


What does palette 7, 63 do?

by (no login)

I've been trying to expand your little program to produce two lines, one under the other, that would print like this:

"COLOR 0, 7 should display black text on plain white background"
"COLOR 0, 15 should display black text on bright white background"

But the backgrounds of both lines come out the same color of white.

Perhaps the limitation is in the display on my old Toshiba Satellite 2545XCDT, or the video card inside it?

I'm running QuickBASIC under MS-DOS 6.21

Here's my failed attempt:
==============================================================================
'palette in screen 0
'by mn64 (no login)
'Modified by Clueless in Seattle 01-01-2013 to try to print lines
'alternating between plain white and bright white backgrounds

SCREEN 0
COLOR 0, 7
PRINT "COLOR 0, 7 should display black text on plain white background"
COLOR 0, 15
PRINT "COLOR 0, 15 should display black text on bright white background"
PALETTE 7, 63
PRINT "Did that work?"
==============================================================================

Where have I gone wrong?

Will in Seattle
a.k.a. "Clueless"

Posted on Jan 1, 2013, 4:14 PM

Respond to this message   

Return to Index


you have to sacrifice an attribute. it doesn't have to be 7.

by mn64 (no login)

i bet i get what you're doing, and i alternate color 7 and color 3 for that :)

but then there is no color 7 and color 3, or color 15. those are just color-holders. by default, 7 holds white and 3 holds cyan, and 15 holds bright white but if you use it as a background, you get 7 anyway.

i think when i answered you, i tried using palette on 15 first. i don't think it worked, because if you change 15 you still get 7 when you use 15 as a background. so using palette on 15 all day won't change the background color.

that means using it on colors 8, 9, 10, 11, 12, 13 and 14 won't work either. you can only use 0-7 as backgrounds, or you will get those colors anyway.

so we changed 7 to bright. but you want to still use it. okay, how about color 2? use palette to change color 2 to bright white, and alternate 2 and 7:
SCREEN 0
palette 2, 63
color 7, 2
print "hi"
color 0, 7
print "hi"

use palette once, after that it's redundant (unless you're changing to other colors instead.)

Posted on Jan 3, 2013, 12:32 PM

Respond to this message   

Return to Index


Thanks, menn! That did the trick!

by (Login Clueless_in_Seattle)

And thanks to everyone who has contributed ideas and code samples.

You probably guessed right, menn, about what I'm up to with this.

I want to modify my SEEFIRST.BAS display so that the background color alternates back and forth with each subsequent file display like this:

FILENAME.001 This is 1st line of text from FILENAME.001 [white background]
FILENAME.002 This is 1st line of text from FILENAME.002 [grey background]
FILENAME.003 This is 1st line of text from FILENAME.003 [white background]
etc.,
etc.,

Will in Seattle
a.k.a. "Clueless"

Posted on Jan 6, 2013, 9:55 AM

Respond to this message   

Return to Index


*you're very welcome

by mn64 (no login)

Posted on Jan 6, 2013, 10:10 AM

Respond to this message   

Return to Index


Speaking of palettes, menno, did you ever...

by (Login Kewbie)
R

figure out a way to sort those colors to my specs?

Just kidding, I know that we agreed to give it up.

How's life been treating you?

Kew

Posted on Jan 3, 2013, 11:31 AM

Respond to this message   

Return to Index


AAAAAAAAAAAAAAAAAAAAAAA!

by mn64 (no login)

long freaking time no see!

...no, these days everyone uses _RGB and redoes the palette instead of trying to sort it. but i did sort them in the shape of a heart, once :D

Posted on Jan 3, 2013, 12:22 PM

Respond to this message   

Return to Index


*Cool! I don't suppose you kept the code for the heart?

by (Login Kewbie)
R

Posted on Jan 4, 2013, 9:41 AM

Respond to this message   

Return to Index


i thought you'd get the reference... it was obscure though :)

by mn64 (no login)

i didn't actually sort the colors "in the shape of a heart."

that would be a cool project, or maybe it would be crap. :) good to see you!

Posted on Jan 5, 2013, 10:24 PM

Respond to this message   

Return to Index


You can only get it in SCREEN 9

by Solitaire (Login Solitaire1)
S

This will not work in Windows newer than XP, which do not allow full-screen mode. It will work with QB64.

SCREEN 9 'for full-screen mode to compare results
SCREEN 0
COLOR 1, 15
CLS
PRINT "SCREEN 0: Backcolor is 15, Forecolor is 1"
INPUT "", E$
SCREEN 9
COLOR 1, 63
PRINT "SCREEN 9: Backcolor is 63, Forecolor is 1"
INPUT "", E$
SCREEN 0
COLOR 7, 0 'return to default colors before ending
END

Posted on Jan 1, 2013, 11:03 AM

Respond to this message   

Return to Index


you can do it in screen 12, but remember he sometimes uses actual DOS

by mn64 (no login)

to do it in screen 12, just use PALETTE to change attribute 0 to bright white.

it ought to be something like...

PALETTE 0, 63 + 63*256 + 63*256^2 'haven't tested it, just typing it in.

if this is one of the times he's using a real version of dos, he should have expected results. if screen 9 works in windows xp i can't guess why 12 wouldn't.

Posted on Jan 3, 2013, 12:20 PM

Respond to this message   

Return to Index


It depends on which version of XP...

by (Login qb432l)
R

XP 64-bit won't run QBasic graphics programs, but 32-bit will.

-Bob

Posted on Jan 3, 2013, 11:44 PM

Respond to this message   

Return to Index


*plus there is dosbox, though as ted says it might be "inferior" to qb64

by mn64 (no login)

Posted on Jan 5, 2013, 10:26 PM

Respond to this message   

Return to Index


Ted's right...

by (Login qb432l)
R

QBasic under DOSBox is flakey. Speed issues have always been a problem, no matter how much you tweek it. And now, under W7, I've also encountered color anomalies, in both the IDE and with text mode programs. Sometimes they clear up after running the program, sometimes not. I'm afraid the writing is on the wall for QBasic. Thank goodness there's QB64.

-Bob

Posted on Jan 6, 2013, 5:02 AM

Respond to this message   

Return to Index


honestly, i've never had a problem

by mn64 (no login)

i don't find ted's take on it so controversial-- for running qbasic programs, qb64 *is* better than qb in dosbox. except for programs that use SOUND, qb64 (the sdl version at least) is total crap for those. (i don't know what kind of specs would make that not so.)

but qb64 is generally superior to qb anyway. now, this could be a windows thing. obviously dosbox isn't made for running qb, it's made for dos programs in general (primarily dos games) and it works pretty well in my experience. that doesn't make ted wrong, of course.

Posted on Jan 6, 2013, 6:58 AM

Respond to this message   

Return to Index


DosBoxQB,Linux

by (Login GarryRicketson)
R

DosBox has always worked quite well for me, for QB stuff, using linux, but to be honest, I have never been able to run any qb64, using dosbox, it says that is a windows program,
QB programs are for dos,dos box seems to work fine, for any programs that are for Dos, to me anyway.
from Garry

From Garry
http://creativeminds.webege.com/SMF/index.php

Posted on Jan 6, 2013, 7:35 AM

Respond to this message   

Return to Index


qb64 is a windows program

by mn64 (no login)

it's also a mac program and a gnu/linux program. there is no dos version of qb64 (though a 64-bit version of dos would be interesting... like a horse and buggy that could do vtol.)

you can only run dos programs in dosbox.

Posted on Jan 6, 2013, 7:47 AM

Respond to this message   

Return to Index


* Happy New Year!

by (no login)

Posted on Jan 1, 2013, 12:00 AM

Respond to this message   

Return to Index


Note to Garry...

by Pete (no login)

Hi Garry,

As promised, Jan 1st, I updated Groups. You are now in the "R" Group, which means you can now edit your posts, use photobucket to post pics, etc.

Pete

Posted on Jan 1, 2013, 12:02 AM

Respond to this message   

Return to Index


Thank you

by (Login GarryRicketson)
R

Yes I also got a notice in my e-mail,
also Happy New Year

Posted on Jan 1, 2013, 3:13 AM

Respond to this message   

Return to Index


Hey, Pete and everyone, yes, Happy New Year...

by (Login qb432l)
R

I must say that January 1st looks great without a hangover. Us old dudes tend to go to bed early, even on New Year's eve, unlike our younger selves. As a result, no excessive drinking and no hangover, no trying to remember where you parked your car before you wisely took a taxi home. Also no New Year's resolutions to live up to. To be honest, I can't remember when I made my last resolution, but I know for a fact that, whatever it was, I didn't keep it.

Just a few of the advantages of senior-citizenship.

-Bob

Posted on Jan 1, 2013, 6:47 AM

Respond to this message   

Return to Index


* lol

by (Login MCalkins)
Moderator

Posted on Jan 1, 2013, 7:03 AM

Respond to this message   

Return to Index


Us old dudes

by (Login GarryRicketson)
R

"Us old dudes tend to go to bed early,"
Al though I do go to bed early, I usually get up pretty early, but then I am not really that old yet (59).
By the grace of God, I have not had a hangover, in 28 years,
http://creativeminds.webege.com/SMF/index.php?board=7.0
I quit drinking when I was younger, if I hadn't I wouldn't be here today,
This year (New Years eve) was kind of depressing, cause I am not at home, but my wife called my, so that helped, she callled at 10:pm , I was just about to go to bed, by the time we finished talking, it was already 11:30 !
Anyway, again, happy new year every one,..

Posted on Jan 1, 2013, 7:54 AM

Respond to this message   

Return to Index


Us old dudes, redux

by (no login)

Thanks, Bob, for bringing me my first smile of the new year.

I got a big grin on my face when I read your comment:

"Us old dudes tend to go to bed early, even on New Year's eve, unlike our younger selves"

As for me, I was in bed last night at 8:30 (and awake this morning at 4:30).

And like you, I'm happy to have left partying and hangovers in the trash bins of yesteryear.

I'm well into my seventieth year now, and have been struggling against disabling chronic illness for the last twenty years, so I can no longer afford to squander my time or energy like I thought I could get away with back when I was a youngster.

It's a beautiful sunny (albeit smoggy) winter morning here in Seattle, and I feel blessed to be able to enjoy it working at my laptop in my daybed, instead of nursing one of those horrible hangovers I used to call "The Holy Terrors."

Thanks for that reminder and for cheering me up on the first day, not just of the new year, but of the rest of my life,

Will in Seattle
a.k.a. "Clueless"

Posted on Jan 1, 2013, 8:32 AM

Respond to this message   

Return to Index


Happy New Year one and all!

by Solitaire (Login Solitaire1)
S

It looks like I'm the oldest one on this forum, at the age of 75, and starting to feel my years.

I'm still actively teaching an introductory course on programming at the college level. I started out years ago with QBasic, but had to switch to Visual Basic when the new Windows OS would no longer work in full-screen mode. With each new version of .NET, we had to upgrade to the latest VB.NET version.

Now my supervisor asked me to switch to C++/C#, since that's where most of the jobs are and we need to prepare the students for future employment.

I wrote my own course syllabus and spent years preparing hundreds of original little demo programs to introduce each new concept. I placed the demos into a WORD document, arranging the code along with comments, explanations, and original lab problems for each class session. It became a substitute for a textbook, and each class I would print and hand out several pages from my document. I would revise the demos and the text document each semester as I discovered new ways to make improvements and additions. I also prepared and handed out original supplementary material.

When preparing a new demo, for simplicity I sometimes write the code in QB first, and then translate it into VB code. I teach new concepts using Console applications for the most part, and then reinforce the concept using Windows Forms applications.

It may take hundreds of hours for me to revise my demos and documents, and I'm hoping to have it ready in time for the Fall semester. I'm just making a few revisions to the Spring semester material, still using Visual Basic. The last day of the semester (as I have been doing for years) includes an introduction to C#.

Uploaded a photo to Photobucket but unable to place it here.

Posted on Jan 1, 2013, 9:46 AM

Respond to this message   

Return to Index


*Just paste the link to your Photobucket pics in the message box.

by Pete (no login)

Posted on Jan 1, 2013, 1:20 PM

Respond to this message   

Return to Index


Where do I get the link?

by Solitaire (Login Solitaire1)
S

I don't see the option for it. At Photobucket, I can just upload, not download. I tried copying the url on top when I got to my photo, but it didn't work when I pasted it here.

Posted on Jan 1, 2013, 2:24 PM

Respond to this message   

Return to Index


Screen Shot

by (Login GarryRicketson)
R

I am going to see if I can get a screen shot, To explain, but also
if you select the image, on photobucket, then right click your mouse,
You should get sort of a "drop down window" that shows various tags, select and copy the one that says "image tag",
[linked image]
And this,
[linked image]
Down at the bottom, where it says URL, and has the mouse pointer, you should be able to select and copy that,then paste it into your post,
Hope this helps.
from Garry

Posted on Jan 1, 2013, 3:12 PM

Respond to this message   

Return to Index


Photo of myself

by Solitaire (Login Solitaire1)
S

Thanks, I think I got it now.

This is a picture of myself taken about 10 years ago. I use it for all my other forum profiles.

I do look a lot younger than my age. I'm 75 now. People are surprised when I tell them how old I am. It's all in the genes.


[linked image]

Posted on Jan 1, 2013, 3:38 PM

Respond to this message   

Return to Index


*Looks like you got images figured out

by (Login GarryRicketson)
R

Looks like you figured it out, Based on the photo, I would look like I am 90, and I am only 59, you look younger then me.!

Posted on Jan 1, 2013, 3:59 PM

Respond to this message   

Return to Index


Solitaire is dyslexic...

by Pete (no login)

She's really only 57!

Kidding aside, I picked up on that looks a lot younger than the age she posted, too.

I have a pic that does that for me, of course in my case, I took it 30 years ago. It's hanging on the wall, behind my desk. The photo keeps looking less and less like me all the time, and more and more like my son. I keep telling him I'll sell it to him in a few years, he keeps telling me by that time, he'll inherit it. Not sure where he got his snarky sense of humor from, oh well

Pete :)

Posted on Jan 1, 2013, 5:43 PM

Respond to this message   

Return to Index


*You've got that backwards, Dorian (nice to meet you, Solitaire - very nice picture).

by (Login qb432l)
R

*

Posted on Jan 1, 2013, 6:08 PM

Respond to this message   

Return to Index


Can you help me figure out how to insert images?

by (no login)

> Garry Ricketson (Login GarryRicketson)
> R
> Posted Jan 1, 2013 3:59 PM
>
> *Looks like you got images figured out

I don't have a login account.

Do I need to create one if I want to insert images into my posts?

Will in Seattle
a.k.a. "Clueless"

Posted on Jan 5, 2013, 10:03 AM

Respond to this message   

Return to Index


*i think you just post the url

by mn64 (no login)

Posted on Jan 5, 2013, 11:13 AM

Respond to this message   

Return to Index


login account, posting images

by (no login)

All though I do have a loggin acount, I am not logged in, and this seemed to work fine, I just pasted the URL in,as Mn says,
Image below
http://www.garryricketsonartworks.org/granite_roses.JPG
I think I read a FAQ discussion about this, I will see if I can find it again, and get back to here with a link to the thread, for more details.

Posted on Jan 5, 2013, 1:03 PM

Respond to this message   

Return to Index


login account, posting images

by Garry (no login)

Well sorry, when I clicked preview, it lookded like that was going to work, so I guess you do need to be logged in, and also I am pretty sure it has to be photobucket.com where the image is stored, so you would need to start a account with them too,..I will get back again with more details.
from Garry
Let's see if this works
http://i1140.photobucket.com/albums/n566/GarryRicketson/th_QB64-1.png

Posted on Jan 5, 2013, 1:23 PM

Respond to this message   

Return to Index


Posting photos,Now I am logged in

by (Login GarryRicketson)
R

Now that I am logged in, I do see the option to submit photos, So, that means you do need to start a loggin account, and be logged in, of course though, you can just paste in the URL anyway, and if people want to see the photo, they will follow the link, and look at it. But to actually be viewable as part of the post, you would need to be logged in,
EDITED: Apparently it dose not have to be photobucket.
END EDIT

and also upload the image to photobucket.com,you will need to start a account with them too, but it is for free.However, you would need some where to store the photo, or image, photobucket.com is free, and I recommend that.
This 1st image is not at photobucket, and probabley not visable.
Edited: I was surprised to see it did work, so I guess it dose not have to be photobucket, I had just pasted the URL in.

[linked image]
However this one should show,


[linked image]
I hope this makes sense, if not feel free to tell me, and I will try to explain better. I couldn't find anything in the FAQ's maybe I will try to write some explanation, and submit it there,..?
from Garry

From Garry
http://creativeminds.webege.com/SMF/index.php

Posted on Jan 5, 2013, 1:39 PM

Respond to this message   

Return to Index


My work station

by (Login Clueless_in_Seattle)

I'm going to try to insert a photo. I'm not sure it will work. The "preview" of this message doesn't show the photo. sad.gif

Here I am working in my daybed. All my equipment consists of hand-me-downs from FreeCycleSeattle.

These days I'm working on a hand-me-down laptop with a dead display, so I have it plugged into a monitor (hand-me-down, of course!) on a cart (also hand-down) next to my bed (do I have to add that the bed is also a hand-me-down from FreeCycleSeattle? I don't know how I'd get by were it not for the kindness of strangers).

Off to my right (your left as you look at the photo) you can see my old (hand-me-down)Toshiba laptop on which I run MS-DOS 6.21.

I use steel broiler pans (hand-me-downs, what else?) under these laptops as makeshift cooling trays, to try to dissipate some of the heat that builds up when I rest them on a pillow on my lap in bed.

Switching back and forth between the two computers is a tiresome chore, because the steel broiler pans are so heavy, and I suffer from chronic muscle and joint pain. But playing with these computers is an absorbing pastime that keeps me busy while resting in bed, where I spend a considerable part of each day these days.

Will in Seattle
a.k.a. "Clueless"

Posted on Jan 6, 2013, 10:19 AM

Respond to this message   

Return to Index


If at first you don't succeed....

by (Login Clueless_in_Seattle)

[linked image].html

Posted on Jan 6, 2013, 10:36 AM

Respond to this message   

Return to Index


Finally!

by (Login Clueless_in_Seattle)

Now if I can only remember how to do this next time:

1. Upload photo to PhotoBucket
2. In PhotoBucket click on HTML code to right of photo
3. Past link into message:

Photobucket

Posted on Jan 6, 2013, 10:40 AM

Respond to this message   

Return to Index


nice setup

by mn64 (no login)

i guess with the two computer screens in front of you, it doesn't matter if the clock radio is on its side. i can't even tell if it's on.

Posted on Jan 6, 2013, 6:35 PM

Respond to this message   

Return to Index


Congratulations

by (Login GarryRicketson)
R

That is great, you also explain it in a much simpler,clear way then I did, I am not too good at explaining things,
but glad to see you got it,
I have mentioned it before, but I had dropped out of computers, back at a time when I was just using Dos, then when I got back into them, a lot of these new things had me completely confused,..but some of them are pretty good,..
ok well take care and enjoy your self,
from Garry

Posted on Jan 6, 2013, 11:15 AM

Respond to this message   

Return to Index


*My pleasure, CIS! Lots of smiles around here :-)

by (Login qb432l)
R

*

Posted on Jan 1, 2013, 6:26 PM

Respond to this message   

Return to Index


happy new year, thebob... have a quick demo

by mn64 (no login)

it uses the textmode-flavor routines on your graphics forum

http://www.network54.com/Forum/648955/message/1357063517/actually+solitaire+wrote+an+operating+system+once...

Posted on Jan 1, 2013, 10:11 AM

Respond to this message   

Return to Index


*whoa... sorry about the front page. michael or solitaire, if you can fix the url there

by mn64 (no login)

(i forgot how much you can accidentally do to the layout here... eeeeee.)

Posted on Dec 27, 2012, 8:44 PM

Respond to this message   

Return to Index


Praeludium B-dur (Das Wohltemperierte Klavier Teil 1)

by J.S. Bach (no login)

http://www.youtube.com/watch?v=zoH0JumyFrE

x$ = "t92 l32 o3b->f>d<f<a>f>c<f<b->f>d<f<f>a>f<a<g>db-d<f>dad<g>db-d<d>f>d<f"
x$ = x$ + "o3e-b->g<b-db->f<b-e-b->g<b-<b->>db-d<c>de-d<<b->>dgd<<a>>cfc<<f>a>e-<a"
x$ = x$ + "<b->>dfd<fb->d<b-dfb-f<b->dfd<l32 g>def+gab->c<b-gab->cdef"
x$ = x$ + "cege<g>cec<eg>c<gaege<a>e-fgab>cdc<ab>cdefg"
x$ = x$ + "<d->faf<a>dfd<fa>d<adfaf<b->f>d<f<g>f>b-<f<a>f>c<f<f>f>e-<f"
x$ = x$ + "<b->f>d<f<g>fb-f<a>f>c<f<f>f>e-<f<b->f>d<f<b>g>f<gcg>e<gc+a>g<a"
x$ = x$ + "da>f<a<d>b->a<b-<e>b->g<b-e>cb-c<f>cac<<f>>d>c<d<<g>>db-d<g>e>d<e"
x$ = x$ + "<a>cdefgab->c<b-agfe-dcd<b-agfe-dcde-dc<b-agfe>>cb-c<<f>>cac<<d>b->a<b-<e>b->g<b-<f>a>g<a<a>a>f<a<b->g>f<gcg>e<g"
x$ = x$ + "<f>a>cfc<a>fc<afa>c<af>c<afcfedc<b-agfa>cfa>ce-g-<<l4d"
y$ = "o2>dfb->dab->df" 'arpeggiated
x$ = x$ + "l32" + y$ + "l32" + y$ + "l16 o2b>dg>dgb>df"
x$ = x$ + "l32ga-gfe-de-fe-dc<b>cdc<bagabagfe-dc<b-a-efe-dc<b-a-gfe-d"
y$ = "o3c>e-g>cgb->ce-"
x$ = x$ + "l32" + y$ + "l32" + y$ + "l16o3fa>cfa>ce-"
x$ = x$ + "o3l32cde-fga-b-agfda-b->cdc<b-ab->cde-fe-dcde-fga"
x$ = x$ + "b->cde-fgafl8>d"
y$ = "o2b->dfb->fa-b->d"
x$ = x$ + "l32" + y$ + "l32" + y$ + "l16o3e-gb->egb->d"
x$ = x$ + "l32o3egb->gb->d-" + "l32o3e-g>cgb->c"
x$ = x$ + "l32o3fa>ce-fa>c "
x$ = x$ + "o4 fd<b-ab->df<dfd<b-ab->df>b<a-fdb<af>d"
x$ = x$ + "l32o4e-de-dcde-dc<b-ab->c<b-agfgagfe-de-fe-de-dc"
x$ = x$ + "l32o2b->dfd dfb-f fb->d<b- b->dfd dfb-f fb->d<b->dfd l8b-"
x$ = x$ + "l4o2b-"

PLAY x$

Posted on Dec 27, 2012, 4:43 PM

Respond to this message   

Return to Index


*cool

by (Login MCalkins)
Moderator

Posted on Dec 28, 2012, 3:44 AM

Respond to this message   

Return to Index


Merry Christmas - Christmas comes just once a year...

by Pete (no login)


Christmas comes just once a year
But every day, our forum's here
From January through December
It's here for every forum member

And while this site may not be growing
Thanks to all, who keep it going
Let's try and treat each other right
Merry Christmas to all, and to all a goodnight
----------------------------------------------

Wow, what did the wife put in the eggnog this year?

Pete :)


Posted on Dec 25, 2012, 10:25 AM

Respond to this message   

Return to Index


*and if win8 leaves you maligned, at least free bootloaders are signed

by mn64 (no login)

Posted on Dec 25, 2012, 10:34 AM

Respond to this message   

Return to Index


Michael, go home!

by Pete (no login)

You're making me look like Scrooge. I told you you could have x-mas off!

Best wishes to you and your family this day. I hope you can get that religious rift repaired or behind you in the coming new year. Quite honestly, and solely from my perspective from knowing you from your post here over many years, you're too good of an individual to be cast into a mold.

Merry Christmas,

Pete

Posted on Dec 25, 2012, 10:55 AM

Respond to this message   

Return to Index


*Thanks. (I am home, btw...)

by (Login MCalkins)
Moderator

Posted on Dec 25, 2012, 11:43 AM

Respond to this message   

Return to Index


...

by gopus (no login)

I bet you this was the first thing you did on Christmas Day, WASN'T IT??!?


WASN'T IT??!?!?!

Posted on Dec 28, 2012, 9:24 PM

Respond to this message   

Return to Index

 Copyright © 1999-2014 Network54. All rights reserved.   Terms of Use   Privacy Statement