1
1
Fork 0
mirror of https://github.com/FellippeHeitor/InForm.git synced 2024-05-12 06:50:12 +00:00
InForm/InForm/extensions/gifplay.bm
2023-05-09 02:23:53 +05:30

888 lines
45 KiB
Plaintext

'#######################################################################################
'# Animated GIF decoder v1.0 #
'# By Zom-B #
'# #
'# http://www.qb64.org/wiki/GIF_Images #
'#######################################################################################
'Adapted for use with InForm's PictureBox controls by @FellippeHeitor
'$Include:'gifplay.bi'
$IF GIFPLAY_BM = UNDEFINED THEN
$LET GIFPLAY_BM = TRUE
SUB UpdateGif (ID AS LONG)
DIM i AS LONG, newFrame AS LONG
STATIC GifOverlay AS LONG
i = GetGifIndex(ID)
IF i = 0 THEN EXIT SUB
IF GifOverlay = 0 THEN
GifOverlay = LoadOverlayImage&
END IF
IF GifData(i).IsPlaying OR GifData(i).LastFrameServed = 0 THEN
IF GifData(i).LastFrameUpdate > 0 AND TIMER - GifData(i).LastFrameUpdate < GifData(i).LastFrameDelay THEN
'Wait for the GIF's frame delay
ELSE
GifData(i).Frame = GifData(i).Frame + 1
GifData(i).LastFrameServed = GifData(i).Frame
GifData(i).LastFrameUpdate = TIMER
END IF
END IF
BeginDraw ID
newFrame = GetGifFrame&(i)
IF newFrame THEN _PUTIMAGE , newFrame
IF GifData(i).IsPlaying = False AND GifData(i).HideOverlay = False AND GifData(i).totalFrames > 1 THEN
_PUTIMAGE (_WIDTH / 2 - _WIDTH(GifOverlay) / 2, _HEIGHT / 2 - _HEIGHT(GifOverlay) / 2), GifOverlay
END IF
EndDraw ID
END SUB
FUNCTION GifIsPlaying%% (ID AS LONG)
DIM i AS LONG
i = GetGifIndex(ID)
GifIsPlaying%% = GifData(i).IsPlaying
END FUNCTION
FUNCTION GifWidth%(ID AS LONG)
DIM i AS LONG
i = GetGifIndex(ID)
GifWidth% = GifData(i).width
END FUNCTION
FUNCTION GifHeight%(ID AS LONG)
DIM i AS LONG
i = GetGifIndex(ID)
GifHeight% = GifData(i).height
END FUNCTION
FUNCTION TotalFrames&(ID AS LONG)
DIM i AS LONG
i = GetGifIndex(ID)
TotalFrames& = GifData(i).totalFrames
END FUNCTION
SUB HideGifOverlay (ID AS LONG)
DIM i AS LONG
i = GetGifIndex(ID)
GifData(i).HideOverlay = True
END SUB
SUB PlayGif (ID AS LONG)
DIM i AS LONG
i = GetGifIndex(ID)
GifData(i).IsPlaying = True
END SUB
SUB PauseGif (ID AS LONG)
DIM i AS LONG
i = GetGifIndex(ID)
GifData(i).IsPlaying = False
END SUB
SUB StopGif (ID AS LONG)
DIM i AS LONG
i = GetGifIndex(ID)
GifData(i).IsPlaying = False
GifData(i).Frame = 1
END SUB
FUNCTION OpenGif%%(ID AS LONG, filename$)
DIM i AS LONG, Index AS LONG
DIM byte~%%, palette$, delay~%
IF Control(ID).Type <> __UI_Type_PictureBox THEN ERROR 5: EXIT FUNCTION
Index = GetGifIndex&(ID)
IF Index = 0 THEN
TotalGIFLoaded = TotalGIFLoaded + 1
Index = TotalGIFLoaded
REDIM _PRESERVE GifData(1 TO TotalGIFLoaded) AS GIFDATA
ELSE
CloseGif ID
END IF
GifData(Index).ID = ID
GifData(Index).file = FREEFILE
IF _FILEEXISTS(filename$) = 0 THEN EXIT FUNCTION
OPEN filename$ FOR BINARY AS GifData(Index).file
GET GifData(Index).file, , GifData(Index).sigver
GET GifData(Index).file, , GifData(Index).width
GET GifData(Index).file, , GifData(Index).height
GET GifData(Index).file, , byte~%%
GifData(Index).bpp = (byte~%% AND 7) + 1
GifData(Index).sortFlag = (byte~%% AND 8) > 0
GifData(Index).colorRes = (byte~%% \ 16 AND 7) + 1
GifData(Index).colorTableFlag = (byte~%% AND 128) > 0
GifData(Index).numColors = 2 ^ GifData(Index).bpp
GET GifData(Index).file, , GifData(Index).bgColor
GET GifData(Index).file, , byte~%%
IF byte~%% = 0 THEN GifData(Index).aspect = 0 ELSE GifData(Index).aspect = (byte~%% + 15) / 64
IF GifData(Index).sigver <> "GIF87a" AND GifData(Index).sigver <> "GIF89a" THEN
'Invalid version
GOTO LoadError
END IF
IF NOT GifData(Index).colorTableFlag THEN
'No Color Table
GOTO LoadError
END IF
palette$ = SPACE$(3 * GifData(Index).numColors)
GET GifData(Index).file, , palette$
GifData(Index).palette = palette$
DO
GET GifData(Index).file, , byte~%%
SELECT CASE byte~%%
CASE &H2C ' Image Descriptor
TotalGIFFrames = TotalGIFFrames + 1
GifData(Index).totalFrames = GifData(Index).totalFrames + 1
IF GifData(Index).firstFrame = 0 THEN
GifData(Index).firstFrame = TotalGIFFrames
END IF
IF TotalGIFFrames > UBOUND(GifFrameData) THEN
REDIM _PRESERVE GifFrameData(0 TO TotalGIFFrames * 2) AS FRAMEDATA
END IF
GifFrameData(TotalGIFFrames).ID = ID
GifFrameData(TotalGIFFrames).thisFrame = GifData(Index).totalFrames
GET GifData(Index).file, , GifFrameData(TotalGIFFrames).left
GET GifData(Index).file, , GifFrameData(TotalGIFFrames).top
GET GifData(Index).file, , GifFrameData(TotalGIFFrames).width
GET GifData(Index).file, , GifFrameData(TotalGIFFrames).height
GET GifData(Index).file, , byte~%%
GifFrameData(TotalGIFFrames).localColorTableFlag = (byte~%% AND 128) > 0
GifFrameData(TotalGIFFrames).interlacedFlag = (byte~%% AND 64) > 0
GifFrameData(TotalGIFFrames).sortFlag = (byte~%% AND 32) > 0
GifFrameData(TotalGIFFrames).palBPP = (byte~%% AND 7) + 1
GifFrameData(TotalGIFFrames).addr = LOC(GifData(Index).file) + 1
IF GifFrameData(TotalGIFFrames).localColorTableFlag THEN
SEEK GifData(Index).file, LOC(GifData(Index).file) + 3 * 2 ^ GifFrameData(TotalGIFFrames).palBPP + 1
END IF
GET GifData(Index).file, , GifFrameData(TotalGIFFrames).minimumCodeSize
IF GifFrameData(TotalGIFFrames).disposalMethod > 2 THEN
'Unsupported disposalMethod
GOTO LoadError
END IF
SkipGIFBlocks GifData(Index).file
CASE &H3B ' Trailer
EXIT DO
CASE &H21 ' Extension Introducer
GET GifData(Index).file, , byte~%% ' Extension Label
SELECT CASE byte~%%
CASE &HFF, &HFE ' Application Extension, Comment Extension
SkipGIFBlocks GifData(Index).file
CASE &HF9
IF TotalGIFFrames > UBOUND(GifFrameData) THEN
REDIM _PRESERVE GifFrameData(0 TO TotalGIFFrames * 2) AS FRAMEDATA
END IF
GifFrameData(TotalGIFFrames).ID = ID
GET GifData(Index).file, , byte~%% ' Block Size (always 4)
GET GifData(Index).file, , byte~%%
GifFrameData(TotalGIFFrames).transparentFlag = (byte~%% AND 1) > 0
GifFrameData(TotalGIFFrames).userInput = (byte~%% AND 2) > 0
GifFrameData(TotalGIFFrames).disposalMethod = byte~%% \ 4 AND 7
GET GifData(Index).file, , delay~%
IF delay~% = 0 THEN GifFrameData(TotalGIFFrames).delay = 0.1 ELSE GifFrameData(TotalGIFFrames).delay = delay~% / 100
GET GifData(Index).file, , GifFrameData(TotalGIFFrames).transColor
SkipGIFBlocks GifData(Index).file
CASE ELSE
'Unsupported extension Label
GOTO LoadError
END SELECT
CASE ELSE
'Unsupported chunk
GOTO LoadError
END SELECT
LOOP
REDIM _PRESERVE GifFrameData(0 TO TotalGIFFrames) AS FRAMEDATA
GifData(Index).IsPlaying = False
OpenGif%% = True
EXIT FUNCTION
LoadError:
GifData(Index).ID = 0
CLOSE GifData(Index).file
FOR i = 1 TO TotalGIFFrames
IF GifFrameData(i).ID = ID THEN
GifFrameData(i).ID = 0
END IF
NEXT
END FUNCTION
FUNCTION GetGifIndex&(ID AS LONG)
DIM i AS LONG
FOR i = 1 TO TotalGIFLoaded
IF GifData(i).ID = ID THEN
GetGifIndex& = i
EXIT FOR
END IF
NEXT
END FUNCTION
SUB CloseGif(ID AS LONG)
DIM i AS LONG, Index AS LONG
Index = GetGifIndex(ID)
IF Index = 0 THEN EXIT SUB
FOR i = 0 TO UBOUND(GifFrameData)
IF GifFrameData(i).ID = ID THEN
GifFrameData(i).ID = 0
IF GifFrameData(i).addr < -1 THEN
_FREEIMAGE GifFrameData(i).addr
END IF
END IF
NEXT
CLOSE GifData(Index).file
GifData(Index).ID = 0
GifData(Index).firstFrame = 0
END SUB
SUB SkipGIFBlocks (file AS INTEGER)
DIM byte~%%
DO
GET file, , byte~%% ' Block Size
SEEK file, LOC(file) + byte~%% + 1
LOOP WHILE byte~%%
END SUB
FUNCTION GetGifFrame& (Index AS LONG)
DIM i AS LONG
DIM frame AS LONG, previousFrame AS LONG
DIM w AS INTEGER, h AS INTEGER
DIM img&, actualFrame&
DIM prevDest AS LONG
IF GifData(Index).Frame > GifData(Index).totalFrames THEN
GifData(Index).Frame = 1
END IF
FOR i = 1 TO UBOUND(GifFrameData)
IF GifFrameData(i).ID = GifData(Index).ID AND GifFrameData(i).thisFrame = GifData(Index).Frame THEN
frame = i
EXIT FOR
ELSEIF GifFrameData(i).ID = GifData(Index).ID AND GifFrameData(i).thisFrame < GifData(Index).Frame THEN
previousFrame = i
END IF
NEXT
GifData(Index).LastFrameDelay = GifFrameData(frame).delay - (GifFrameData(frame).delay / 10)
IF GifFrameData(frame).addr > 0 THEN
prevDest = _DEST
w = GifFrameData(frame).width
h = GifFrameData(frame).height
img& = _NEWIMAGE(w, h, 256)
actualFrame& = _NEWIMAGE(GifData(Index).width, GifData(Index).height, 256)
_DEST img&
DecodeFrame GifData(Index), GifFrameData(frame)
_DEST actualFrame&
IF GifFrameData(frame).localColorTableFlag THEN
_COPYPALETTE img&
ELSE
FOR i = 0 TO GifData(Index).numColors - 1
_PALETTECOLOR i, _RGB32(ASC(GifData(Index).palette, i * 3 + 1), ASC(GifData(Index).palette, i * 3 + 2), ASC(GifData(Index).palette, i * 3 + 3))
NEXT
END IF
IF GifData(Index).Frame > 1 THEN
SELECT CASE GifFrameData(previousFrame).disposalMethod
CASE 0, 1
_PUTIMAGE , GifFrameData(previousFrame).addr
CASE 2
CLS , GifData(Index).bgColor
_CLEARCOLOR GifData(Index).bgColor
END SELECT
ELSE
CLS , GifData(Index).bgColor
END IF
IF GifFrameData(frame).transparentFlag THEN
_CLEARCOLOR GifFrameData(frame).transColor, img&
END IF
_PUTIMAGE (GifFrameData(frame).left, GifFrameData(frame).top), img&
_FREEIMAGE img&
GifFrameData(frame).addr = actualFrame&
GifData(Index).LoadedFrames = GifData(Index).LoadedFrames + 1
GifData(Index).GifLoadComplete = (GifData(Index).LoadedFrames = GifData(Index).TotalFrames)
_DEST prevDest
END IF
GetGifFrame& = GifFrameData(frame).addr
END FUNCTION
SUB DecodeFrame (gifdata AS GIFDATA, GifFrameData AS FRAMEDATA)
DIM byte AS _UNSIGNED _BYTE
DIM prefix(4095), suffix(4095), colorStack(4095)
DIM startCodeSize AS INTEGER, clearCode AS INTEGER
DIM endCode AS INTEGER, minCode AS INTEGER, startMaxCode AS INTEGER
DIM nvc AS INTEGER, codeSize AS INTEGER
DIM maxCode AS INTEGER, bitPointer AS INTEGER, blockSize AS INTEGER
DIM blockPointer AS INTEGER, x AS INTEGER, y AS INTEGER
DIM palette$, i AS LONG, c&, stackPointer AS INTEGER
DIM currentCode AS INTEGER, code AS INTEGER, lastColor AS INTEGER
DIM oldCode AS INTEGER, WorkCode&, LastChar AS INTEGER
DIM interlacedPass AS INTEGER, interlacedStep AS INTEGER
DIM file AS INTEGER, a$, loopStart!
startCodeSize = gifdata.bpp + 1
clearCode = 2 ^ gifdata.bpp
endCode = clearCode + 1
minCode = endCode + 1
startMaxCode = clearCode * 2 - 1
nvc = minCode
codeSize = startCodeSize
maxCode = startMaxCode
IF GifFrameData.interlacedFlag THEN interlacedPass = 0: interlacedStep = 8
bitPointer = 0
blockSize = 0
blockPointer = 0
x = 0
y = 0
file = gifdata.file
SEEK file, GifFrameData.addr
IF GifFrameData.localColorTableFlag THEN
palette$ = SPACE$(3 * 2 ^ GifFrameData.palBPP)
GET file, , palette$
FOR i = 0 TO gifdata.numColors - 1
c& = _RGB32(ASC(palette$, i * 3 + 1), ASC(palette$, i * 3 + 2), ASC(palette$, i * 3 + 3))
_PALETTECOLOR i, c&
NEXT
END IF
GET file, , byte ' minimumCodeSize
loopStart! = TIMER
DO
IF TIMER - loopStart! > 2 THEN EXIT DO
GOSUB GetCode
stackPointer = 0
IF code = clearCode THEN 'Reset & Draw next color direct
nvc = minCode ' \
codeSize = startCodeSize ' Preset default codes
maxCode = startMaxCode ' /
GOSUB GetCode
currentCode = code
lastColor = code
colorStack(stackPointer) = lastColor
stackPointer = 1
ELSEIF code <> endCode THEN 'Draw direct color or colors from suffix
currentCode = code
IF currentCode = nvc THEN 'Take last color too
currentCode = oldCode
colorStack(stackPointer) = lastColor
stackPointer = stackPointer + 1
END IF
WHILE currentCode >= minCode 'Extract colors from suffix
colorStack(stackPointer) = suffix(currentCode)
stackPointer = stackPointer + 1
currentCode = prefix(currentCode) 'Next color from suffix is described in
WEND ' the prefix, else prefix is the last col.
lastColor = currentCode ' Last color is equal to the
colorStack(stackPointer) = lastColor ' last known code (direct, or from
stackPointer = stackPointer + 1 ' Prefix)
suffix(nvc) = lastColor 'Automatically, update suffix
prefix(nvc) = oldCode 'Code from the session before (for extracting from suffix)
nvc = nvc + 1
IF nvc > maxCode AND codeSize < 12 THEN
codeSize = codeSize + 1
maxCode = maxCode * 2 + 1
END IF
END IF
FOR i = stackPointer - 1 TO 0 STEP -1
PSET (x, y), colorStack(i)
x = x + 1
IF x = GifFrameData.width THEN
x = 0
IF GifFrameData.interlacedFlag THEN
y = y + interlacedStep
IF y >= GifFrameData.height THEN
SELECT CASE interlacedPass
CASE 0: interlacedPass = 1: y = 4
CASE 1: interlacedPass = 2: y = 2
CASE 2: interlacedPass = 3: y = 1
END SELECT
interlacedStep = 2 * y
END IF
ELSE
y = y + 1
END IF
END IF
NEXT
oldCode = code
LOOP UNTIL code = endCode
GET file, , byte
EXIT SUB
GetCode:
IF bitPointer = 0 THEN GOSUB ReadByteFromBlock: bitPointer = 8
WorkCode& = LastChar \ (2 ^ (8 - bitPointer))
WHILE codeSize > bitPointer
GOSUB ReadByteFromBlock
WorkCode& = WorkCode& OR LastChar * (2 ^ bitPointer)
bitPointer = bitPointer + 8
WEND
bitPointer = bitPointer - codeSize
code = WorkCode& AND maxCode
RETURN
ReadByteFromBlock:
IF blockPointer = blockSize THEN
GET file, , byte: blockSize = byte
a$ = SPACE$(blockSize): GET file, , a$
blockPointer = 0
END IF
blockPointer = blockPointer + 1
LastChar = ASC(MID$(a$, blockPointer, 1))
RETURN
END SUB
FUNCTION gifOverlayImage$
DIM A$
A$ = MKI$(64) + MKI$(64)
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000J000005000`M0000M20004<000`e0000V30008?000Pl0000"
A$ = A$ + "V3000L=000@`0000M2000L70000D0000J000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000003000PQ0000<30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?0000c0000620000300000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "00030000^1000X<000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000:3000h60000300000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000l0000@N0000Q30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000Q3000T7000`30000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000010000\5000`g0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "O3000\5000@0000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000000000R0000X;000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000j2000420"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000A1000D>000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000@i0000A100000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000000000000000@00000520008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000@Q0000100000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000P10000M20008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b3000d9000P1000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000000000000000000000000000P1"
A$ = A$ + "0000^20008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000^2000H00000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000@00000L20008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0000W00001000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000120008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b300088000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000000000000000000000@10008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000A10000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000P0000@>000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b3000@>00008000000000000000000000000000000000000000000000000"
A$ = A$ + "000010000T;000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000i2000400"
A$ = A$ + "000000000000000000000000000000000000000000000\5000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?0000G00000000000000000000"
A$ = A$ + "000000000000000000000l0000Pg0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000N3000l0000000000000000000000000000000000"
A$ = A$ + "00@N0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000@N000000000000000000000000000000`20000Q30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000Q3000`000000"
A$ = A$ + "00000000000000000000^10008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000PK000000000000000000001000"
A$ = A$ + "0l<000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000@30004000000000000000L3000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "000m0000f3000P?000Pn0000j3000X?000Pn0000h3000@?000`l0000b300"
A$ = A$ + "08?000Pl0000b30008?000@m0000h3000X?0000n0000f30008?000`l0000"
A$ = A$ + "g3000T?000Pn0000j3000X?000Pn0000j3000X?000Pn0000j3000X?000Pn"
A$ = A$ + "0000j3000P?000`l0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00`=000000000000000R0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b3000D?0000n0000j3000X?000Pn0000"
A$ = A$ + "j3000X?000Pn0000j3000X?000Pn0000i3000H?000Pl0000b30008?000@m"
A$ = A$ + "0000j3000X?000Pn0000j3000X?000Pm0000g3000X?000Pn0000j3000X?0"
A$ = A$ + "00Pn0000j3000X?000Pn0000j3000X?000Pn0000j3000X?000Pn0000i300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl00009200000000000000"
A$ = A$ + "<30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b3000H?000Pn0000jOb9WX?WLb9oNk]gnooooooooooooooooooooooZ"
A$ = A$ + "[^JoniWOl3000X?000Pn0000h30008?000Pl0000g3000X?^hRKoooooo;]d"
A$ = A$ + "Bk?000Pn0000h3000T?000PnZ[^jnooooooooooooooooooooooooooooooo"
A$ = A$ + "oooooooooooooooooooooooooooo\a6Kk3000X?000@m0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b3000d<000000000K00008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b3000H?000Pn0000j_jZ"
A$ = A$ + "[foooooooooooooooooooooooooooooooooooooooooooooooo_dB;]oWLb9"
A$ = A$ + "j3000X?000Pm0000b3000L?000PnhR;^mooooo_dB;]o0000j3000P?000@n"
A$ = A$ + "0000j[^jZkoooooooooooooooooooooooooooooooooooooooooooooooooo"
A$ = A$ + "oooooooooc6K\]?000Pn0000e30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000L000005000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b3000@?000Pn0000j;]dBkoooooooooooGLa5g_Oni7o"
A$ = A$ + "0000j3000X?000PnIUEFk_jZ[foooooooooook]gNk?000Pn0000j3000@?0"
A$ = A$ + "00`m0000jS;^hfooooooB;]dn3000X?0000n0000i3000X_jZ[^oooooogHS"
A$ = A$ + "=b?000Pn0000j3000X?000Pn0000j3000X?000Pn0000j3000X?000Pn0000"
A$ = A$ + "i30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300085000@O"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "000n0000jc9WLboooooooooooc6K\]?000Pn0000j3000X?000Pn0000j300"
A$ = A$ + "0X?000PnIUEFkoooooooooooLb9Wl3000X?000Pm0000g3000X?^hRKooooo"
A$ = A$ + "o;]dBk?000Pn0000h3000T?000PnZ[^jnoooooOS=f8o0000j3000X?000Pn"
A$ = A$ + "0000j3000X?000Pn0000j3000X?000Pn0000h3000<?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000@O0000T20008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?0000m0000jOb9WXoooooooooo"
A$ = A$ + "ogHS=b?000Pn0000i3000H?000`l0000b30008?000@m0000h3000X?WLb9o"
A$ = A$ + "oooook]gNk?000Pn0000h3000L?000PnhR;^mooooo_dB;]o0000j3000P?0"
A$ = A$ + "00@n0000j[^jZkoooooo=fHSl3000X?000@m0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000T20008<000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000f3000X?WLb9oooooo[^jZk?000Pn0000j3000<?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b3000@?000PnWLb9jGLa5g?WLb9oWLb9j300"
A$ = A$ + "0X?000`m0000jS;^hfooooooB;]dn3000X?0000n0000i3000X_jZ[^ooooo"
A$ = A$ + "ogHS=b?000Pn0000e30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008<0"
A$ = A$ + "00@f0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "0P?000PnNk]gnooooo?WLb9o0000j3000L?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000h3000X?000Pn0000j3000X?0000n0000g3000X?^hRKo"
A$ = A$ + "ooooo;]dBk?000Pn0000h3000T?000PnZ[^jnoooooOS=f8o0000j3000X?0"
A$ = A$ + "00Pn0000j3000X?000Pn0000j3000P?000Pm0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000@e0000V30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000@n0000jC?mdooooooo"
A$ = A$ + "\a6Kk3000X?000@m0000b30008?000`l0000h3000X?000Pn0000j3000X?0"
A$ = A$ + "00Pn0000j3000X?0000n0000c3000L?000PnhR;^mooooo_dB;]o0000j300"
A$ = A$ + "0P?000@n0000j[^jZkoooooo=fHSl3000X?000Pn0000j3000X?000Pn0000"
A$ = A$ + "j3000X?000Pn0000j3000H?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000P30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000j3000Xooooooooooo?d@3]?000Pn0000c300"
A$ = A$ + "08?000Pl0000i3000X?000Pn0000j3000X?000Pn0000j3000X?000Pn0000"
A$ = A$ + "j3000X?000`m0000jS;^hfooooooB;]dn3000X?0000n0000i3000X_jZ[^o"
A$ = A$ + "ooooooooooooooooooooooooooooooooooooooooooooooooB;]dn3000X?0"
A$ = A$ + "000n0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "0`>000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b3000X?000Pnooooooooooo@3=dn0000j3000<?000Pl0000e3000X?K\afn"
A$ = A$ + "ooooooooooooooooooooooooooooooooooooogHS=b?000Pn0000g3000X?^"
A$ = A$ + "hRKoooooo;]dBk?000Pn0000h3000T?000PnZ[^jnooooooooooooooooooo"
A$ = A$ + "ooooooooooooooooooooooooooooo;]dBk?000Pn0000h30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?0000k0000V30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pn0000jooooooo"
A$ = A$ + "oooo\a6Kk3000X?000@m0000b3000D?000Pn\a6Kkooooooooooooooooooo"
A$ = A$ + "ooooooooooooooooooOS=f8o0000j3000L?000PnhR;^mooooo_dB;]o0000"
A$ = A$ + "j3000P?000@n0000j[^jZkoooooo=fHSl3000X?000Pn0000j3000X?000Pn"
A$ = A$ + "0000j3000X?000Pn0000j3000H?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000P3000T=000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000h3000X_gNk]ooooooc9WLb?000Pn0000"
A$ = A$ + "f30008?000Pl0000i3000X?000Pn0000j3000X?000Pn0000j[^jZkoooooo"
A$ = A$ + "=fHSl3000X?000`m0000jS;^hfooooooB;]dn3000X?0000n0000i3000X_j"
A$ = A$ + "Z[^oooooogHS=b?000Pn0000j3000X?000Pn0000j3000X?000Pn0000h300"
A$ = A$ + "0H?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b3000D=000P`0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b3000H?000PnLb9Wlooooo_gNk]o0000j3000T?000`l0000b3000<?0"
A$ = A$ + "000n0000j3000X?000Pn0000j3000X_jZ[^oooooogHS=b?000Pn0000g300"
A$ = A$ + "0X?^hRKoooooo;]dBk?000Pn0000h3000T?000PnZ[^jnoooooOS=f8o0000"
A$ = A$ + "j3000D?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000P`0000T20008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0000m0000j?d@"
A$ = A$ + "3]oooooooooookWOna?000Pn0000i3000H?0000m0000b30008?0000m0000"
A$ = A$ + "g3000T?000PnZ[^jnoooooOS=f8o0000j3000L?000PnhR;^mooooo_dB;]o"
A$ = A$ + "0000j3000P?000@n0000j[^jZkoooooo=fHSl3000X?000@m0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000T2000d7000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b3000P?000PnLb9Wlooooooooooo"
A$ = A$ + "niWOl3000X?000Pn0000j3000X?000Pn0000j3000X?000PnniWOlC?mdooo"
A$ = A$ + "oooo=fHSl3000X?000`m0000jS;^hfooooooB;]dn3000X?0000n0000i300"
A$ = A$ + "0X_jZ[^oooooogHS=b?000Pn0000e30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b3000d7000PD0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?0000m0000j3000X?^hRKooooooooooo_dB;]oLb9Wl300"
A$ = A$ + "0X?000Pn0000jOb9WX?WLb9oZ[^jnoooooooooooZ[^jnWEFI]?000Pn0000"
A$ = A$ + "g3000X?^hRKoooooo;]dBk?000Pn0000h3000T?000PnZ[^jnoooooOS=f8o"
A$ = A$ + "0000j3000D?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000PD0000L000"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b3000D?000Pn0000jc9WLboooooooooooooooooooooooooooooooooooooo"
A$ = A$ + "oooooooooooooooo[^jZm3000X?000Pn0000h3000L?000PnhR;^mooooo_d"
A$ = A$ + "B;]o0000j3000P?000@n0000j[^jZkoooooo=fHSl3000X?000@m0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000L000000000@c0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000e3000X?0"
A$ = A$ + "00Pn0000jc9WLbOa5GLooooooooooooooooooooooGLa5g?WLb9o0000j300"
A$ = A$ + "0X?000Pn0000g3000<?000`m0000jS;^hfooooooB;]dn3000X?0000n0000"
A$ = A$ + "i3000X_jZ[^oooooogHS=b?000Pn0000e30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000>300000000000000920008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?0000m0000h3000X?000Pn0000"
A$ = A$ + "j3000X?000Pn0000j3000X?000Pn0000j3000X?0000n0000e30008?000Pl"
A$ = A$ + "0000e3000X?000Pn0000j3000X?000Pn0000f3000L?000Pn0000j3000X?0"
A$ = A$ + "00Pn0000j3000<?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b3000T8000000000"
A$ = A$ + "00000P3000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?0000m0000f3000P?000Pn0000j3000X?0"
A$ = A$ + "00Pn0000h3000H?0000m0000b30008?000Pl0000b30008?000@m0000h300"
A$ = A$ + "0X?0000n0000f30008?000`l0000g3000T?000Pn0000h3000<?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?0000>00000000000000@00000@30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?0000d0000100000000000000000000h6000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000^10000000000"
A$ = A$ + "00000000000000030000R30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000R3000`000000000000000000000000000000"
A$ = A$ + "0T7000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b3000T700000000000000000000000000000000000`30000N30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b3000h=000@4000000000000"
A$ = A$ + "00000000000000000000000000000`5000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?0000G000000000000000000000000000000000000"
A$ = A$ + "0000000000@00000j20008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000P^"
A$ = A$ + "000010000000000000000000000000000000000000000000000000000420"
A$ = A$ + "000i0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?0000i0000Q0000000000000000000"
A$ = A$ + "00000000000000000000000000000000000000000000A10008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000A1000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000`P0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl000042000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "00000000000010000`9000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000L2000400000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000000000000000000000000000P1"
A$ = A$ + "0000^20008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000^2000H00000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000H0000@W0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000M2000H00000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000010000D8000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl000052000400000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000A1000D>000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000@i0000A1000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000P80000j20008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000P^0000Q0000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000400"
A$ = A$ + "000G0000O30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b3000l=0000G"
A$ = A$ + "000010000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000000000000000000l0000@N0000"
A$ = A$ + "Q30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000Q3000X7000`3000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "00000000000000000000000000000000000000000`0000PK0000;30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000`b0000"
A$ = A$ + "^1000`000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000<0000920000=000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000@3000T80000<0000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000J000005000@N0000N20008<0"
A$ = A$ + "000f0000Y30008?000@k0000R30008=000P`0000N2000T70000D0000J000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000%%00"
gifOverlayImage$ = A$
END FUNCTION
FUNCTION LoadOverlayImage&
DIM MemoryBlock AS _MEM, TempImage AS LONG
DIM NewWidth AS INTEGER, NewHeight AS INTEGER, A$, BASFILE$
A$ = gifOverlayImage$
IF LEN(A$) = 0 THEN EXIT FUNCTION
NewWidth = CVI(LEFT$(A$, 2))
NewHeight = CVI(MID$(A$, 3, 2))
A$ = MID$(A$, 5)
BASFILE$ = gifUnpack$(A$)
TempImage = _NEWIMAGE(NewWidth, NewHeight, 32)
MemoryBlock = _MEMIMAGE(TempImage)
__UI_MemCopy MemoryBlock.OFFSET, _OFFSET(BASFILE$), LEN(BASFILE$)
_MEMFREE MemoryBlock
LoadOverlayImage& = TempImage
END FUNCTION
FUNCTION gifUnpack$ (PackedData$)
'Adapted from Dav's BIN2BAS
'http://www.qbasicnews.com/dav/qb64.php
DIM A$, i&, B$, C%, F$, C$, t%, B&, X$, btemp$
A$ = PackedData$
FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
IF INSTR(1, B$, "%") THEN
FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
IF F$ <> "%" THEN C$ = C$ + F$
NEXT: B$ = C$
END IF: FOR t% = LEN(B$) TO 1 STEP -1
B& = B& * 64 + ASC(MID$(B$, t%)) - 48
NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
NEXT: btemp$ = btemp$ + X$: NEXT
gifUnpack$ = btemp$
END FUNCTION
'############################################################################################
$endif