Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- REM Fire effect (frame-rate independent)
- REM For 'BBC BASIC for Windows'
- REM Not compatible with BBCSDL
- REM 27-Dec-2017
- *ESC OFF
- ON ERROR OSCLI "REFRESH ON" : CLS : ON : VDU 7 : PRINT REPORT$ + " at line " + STR$ERL; : REPEAT UNTIL INKEY(1)=0
- N% = 1000 : REM number of fire blobs
- PROCFixWindowSize
- WinW% = 256
- WinH% = 480
- VDU 23, 22, WinW%; WinH%; 8, 16, 16, 0 : OFF
- SYS "timeBeginPeriod", 1
- SYS "QueryPerformanceFrequency", ^Freq%%
- Freq = 1000.0 / Freq%%
- QueryPerformanceCounter% = FNSYS_NameToAddress( "QueryPerformanceCounter" )
- Sleep% = FNSYS_NameToAddress( "Sleep" )
- InvalidateRect% = FNSYS_NameToAddress( "InvalidateRect" )
- DIM gfx{ bmBuffAddr%, bmBuffW%, bmBuffH%, \
- \ flags{paint&, flipY&}}
- PROCassemble
- DIM BITMAPINFOHEADER{Size%, Width%, Height%, Planes{l&,h&}, BitCount{l&,h&}, \
- \ Compression%, SizeImage%, XPelsPerMeter%, YPelsPerMeter%, \
- \ ClrUsed%, ClrImportant%}
- DIM bmi{Header{} = BITMAPINFOHEADER{}, Palette%(255)}
- bmi.Header.Size% = DIM(BITMAPINFOHEADER{})
- bmi.Header.Width% = @vdu%!208
- bmi.Header.Height% = @vdu%!212
- bmi.Header.Planes.l& = 1
- bmi.Header.BitCount.l& = 8
- FOR I% = 0 TO 255
- READ rgb%
- r& = rgb% >> 16
- g& = rgb% >> 8
- b& = rgb%
- bmi.Palette%(I%) = b& + (g&<<8) + (r&<<16)
- NEXT I%
- SYS "CreateDIBSection", @memhdc%, bmi{}, 0, ^bits%, 0, 0 TO hbitmap%
- IF hbitmap% = 0 ERROR 100, "Couldn't create DIBSection"
- SYS "SelectObject", @memhdc%, hbitmap% TO oldhbm%
- SYS "DeleteObject", oldhbm%
- CLS : OFF
- gfx.bmBuffAddr% = bits%
- gfx.bmBuffW% = @vdu%!208
- gfx.bmBuffH% = @vdu%!212
- gfx.flags.paint& = 1
- gfx.flags.flipY& = 0
- REM create the fire blob/particle sprite:
- sprSz% = 49 : REM 49x49 at 8 bits-per-pixel
- DIM spr% sprSz%^2
- FOR Y% = 0 TO sprSz%-1
- FOR X% = 0 TO sprSz%-1
- d = SQR( (sprSz%/2 - X%)^2 + (sprSz%/2 - Y%)^2 )
- IF d < sprSz%/2 THEN
- spr%?(sprSz%*Y% + X%) = 255
- ENDIF
- NEXT
- NEXT
- DIM x%(N%-1), Y%(N%-1), y(N%-1), yv(N%-1), ya(N%-1)
- REM x%() is particle X co-ordinate
- REM y() is the current Y co-ordinate of the particle
- REM Y%() is maximum allowed Y co-ordinate before particle is reset
- REM yv() is Y velocity
- REM ya() is Y acceleration
- REM Initialize all the fire blobs:
- FOR I% = 0 TO N%-1
- PROCnew
- NEXT
- REM Copy some variables into static integers for (v. slight) performance boost:
- B% = spr%
- D% = gfx{}
- P% = GFXLIB_PlotShape%
- K% = sprSz%/2
- S% = sprSz%
- *REFRESH OFF
- SYS QueryPerformanceCounter%, ^time0%%
- REPEAT
- SYS QueryPerformanceCounter%, ^time1%%
- dt = Freq * (time1%% - time0%%)
- time0%% = time1%%
- CLS
- FOR I% = 0 TO N%-1
- SYS P%, D%, B%, S%, S%, x%(I%)-K%, y(I%)-K%
- IF y(I%) > Y%(I%) THEN
- PROCnew
- ENDIF
- y(I%) += yv(I%) * dt
- yv(I%) += ya(I%) * dt
- NEXT
- SYS InvalidateRect%, @hwnd%, 0, 0
- *REFRESH
- SYS Sleep%, 2
- UNTIL FALSE
- END
- :
- :
- :
- :
- DEF PROCnew
- a = 2*PI*RND(1)
- r = 48*RND(1)
- x%(I%) = WinW%/2 + r*SINa
- y(I%) = 32+r*COSa
- Y%(I%) = 64+RND(WinH%-64)
- ya(I%) = 0.0001 + 0.00075*RND(1)
- yv(I%) = ya(I%)*RND(100)
- ENDPROC
- :
- :
- :
- :
- DEF FNSYS_NameToAddress( f$ )
- LOCAL P%
- DIM P% LOCAL 5
- [OPT 0 : call f$ : ]
- =P%!-4+P%
- :
- :
- :
- :
- DEF PROCassemble
- LOCAL I%, P%, code%, varsblk%
- _gBMBUFFADDR = ^gfx.bmBuffAddr% - gfx{}
- _gBMBUFFW = ^gfx.bmBuffW% - gfx{}
- _gBMBUFFH = ^gfx.bmBuffH% - gfx{}
- _gPAINTF = ^gfx.flags.paint& - gfx{}
- _gFLIPYF = ^gfx.flags.flipY& - gfx{}
- DIM GFXLIB_clip{ skip1%, skip2%, skip3%, skip4%, check_y%, set_plotflag%, exit% }
- DIM GFXLIB_Plot{ cont%, xloop%, yloop%, next_pxl%, exit% }
- DIM GFXLIB_PlotShape{ cont%, xloop%, yloop%, next_pxl%, exit% }
- DIM code% 32767, varsblk% 4096
- FOR I% = 0 TO 2 STEP 2
- P% = code%
- [OPT I%
- .GFXLIB_PlotShape%
- ;
- ; SYS GFXLIB_PlotShape%, gfx{}, bmAddr, bmW, bmH, x, y
- ;
- ;----*----*----*----*----*----*----*----|
- pushad
- ;REM. ESP +36 = gfx
- ;REM. ESP +40 = bmAddr
- ;REM. ESP +44 = bmW
- ;REM. ESP +48 = bmH
- ;REM. ESP +52 = x
- ;REM. ESP +56 = y
- ;REM. ------------------------------------------------------
- ;REM. Setup the entry params for the bitmap clipping routine
- ;REM. ------------------------------------------------------
- mov eax, [esp + 36] ; EAX = ptr to gfx{} struct
- test BYTE [eax + _gPAINTF], &FF
- jz near GFXLIB_PlotShape.exit%
- test BYTE [eax + _gFLIPYF], &FF
- jz GFXLIB_PlotShape.cont%
- ;REM. Flip Y-coord
- mov ebx, [eax + 8] ; EBX = gfx.bmBuffH%
- sub ebx, [esp + 56] ; = gfx.bmBuffH% - y
- sub ebx, [esp + 48] ; = gfx.bmBuffH% - y - bmH
- mov [esp + 56], ebx ; store new Y
- .GFXLIB_PlotShape.cont%
- ;REM. copy GFXLIB_PlotShape's entry vars from the stack to varsblk% (this makes life easier)
- mov ebx,[esp+40] : mov [varsblk%+64],ebx ; varsblk%+64 = bmAddr
- mov ebx,[esp+44] : mov [varsblk%+68],ebx ; varsblk%+68 = bmW
- mov ebx,[esp+48] : mov [varsblk%+72],ebx ; varsblk%+72 = bmH
- mov ebx,[esp+52] : mov [varsblk%+76],ebx ; varsblk%+76 = x
- mov ebx,[esp+56] : mov [varsblk%+80],ebx ; varsblk%+80 = y
- ;REM. Call the clipping routine (GFXLIB_clip) after PUSHing the required vars onto the stack
- ;REM. SYS GFXLIB_clip, gfx, bmW, bmH, bmX, bmY, clipValsBlk
- push (varsblk%+128) ; ptr to clipValsBlk
- push dword [varsblk%+80] ; y
- push dword [varsblk%+76] ; x
- push dword [varsblk%+72] ; bmH
- push dword [varsblk%+68] ; bmW
- push eax ; ptr to params blk
- call GFXLIB_clip%
- ;REM.
- ;REM. clipValsBlk
- ;REM.
- ;REM. +128 PlotShapeFlag (TRUE or FALSE) - if FALSE, do not attempt to PlotShape/display bitmap
- ;REM. +132 clipFlag (TRUE or FALSE) - if TRUE then clipping is required
- ;REM. +136 startX
- ;REM. +140 startY
- ;REM. +144 numRows
- ;REM. +148 rowLen
- ;REM. +152 skipRows
- ;REM. +156 skipPxls
- ;REM.
- cmp [varsblk%+128], dword TRUE ; check PlotShapeFlag
- jne GFXLIB_PlotShape.exit% ; exit if PlotShapeFlag=FALSE
- ;----*----*----*----*----*----*----*----|
- ; EAX = ptr to params blk
- mov ebx, [eax + 0] ; load base addr of 'bmp buffer' (bmpBuffAddr)
- mov ecx, [varsblk% + 140] ; startY
- imul ecx, [eax + 4] ; = startY*bmpBuffW
- add ecx, [varsblk% + 136] ; = startY*bmpBuffW + startX
- ;REM shl ecx, 2 ; = 4*(startY*bmpBuffW + startX)
- add ecx, ebx ; = bmpBuffAddr + 4*(startY*bmpBuffW + startX)
- mov edi, [varsblk% + 64] ; bmAddr
- mov ebx, [varsblk% + 152] ; skipRows
- add ebx, [varsblk% + 156] ; skipRows+skipPxls
- ;REM shl ebx, 2 ; 4*(skipRows + skipPxls)
- add edi, ebx ; bmAddr += 4*(skipRows + skipPxls)
- mov ebp, [varsblk% + 68] ; bmW
- ;REM shl ebp, 2 ; = 4*bmW
- mov eax, [eax + 4] ; bmBuffW
- ;REM shl eax, 2 ; = 4*bmBuffW
- mov esi, [varsblk% + 144] ; numRows (Y-loop counter)
- dec esi ; numRows -= 1
- .GFXLIB_PlotShape.yloop%
- push esi ; preserve ESI (Y-loop counter)
- mov esi, [varsblk% + 148] ; rowLen (X-loop counter)
- dec esi ; rowLen -= 1
- .GFXLIB_PlotShape.xloop%
- movzx edx, BYTE [edi + esi] ; load byte from source bitmap
- test dl, &FF ; is it 0 ?
- jz GFXLIB_PlotShape.next_pxl% ; skip (i.e. don't PlotShape) if so
- cmp BYTE [ecx + esi], &FF ; test dest byte
- je GFXLIB_PlotShape.next_pxl% ; skip if = 255
- inc BYTE [ecx + esi] ; inc dest byte
- .GFXLIB_PlotShape.next_pxl%
- dec esi ; X -= 1
- jge GFXLIB_PlotShape.xloop% ; loop if X >= 0
- add edi, ebp ; bmAddr += 4*bmW
- add ecx, eax ; bmBuffAddr += 4*bmBuffW
- pop esi ; recover numRows (Y-loop)
- dec esi ; Y -= 1
- jge GFXLIB_PlotShape.yloop% ; loop if Y >= 0
- .GFXLIB_PlotShape.exit%
- popad
- ret (6*4)
- .GFXLIB_clip% ; for internal use only
- ; SYS GFXLIB_clip, gfx, bmW, bmH, bmX, bmY, clipValsBlk
- ;
- ; On exit:
- ;
- ; clipValsBlk
- ;
- ; +0 plotFlag (TRUE or FALSE) - if FALSE, do not attempt to plot/display bitmap
- ; +4 clipFlag (TRUE or FALSE) - if TRUE, bitmap needs to be clipped
- ; +8 startX
- ; +12 startY
- ; +16 numRows
- ; +20 rowLen
- ; +24 skipRows
- ; +28 skipPxls
- ;
- pushad
- ; ESP+36 = gfx
- ; ESP+40 = bmW
- ; ESP+44 = bmH
- ; ESP+48 = x
- ; ESP+52 = y
- ; ESP+56 = clipValsBlk
- ;----*----*----*----*----*----*----*----|
- mov ebp, [esp + 56] ; EBP = ptr to clipvarsblk%
- ; init. clipVarlBlk
- mov [ebp + 0], dword FALSE ; plotFlag
- mov [ebp + 4], dword FALSE ; clipFlag
- mov eax,[esp+48] : mov [ebp + 8],eax ; startX = bmX
- mov eax,[esp+52] : mov [ebp +12],eax ; startY = bmY
- mov eax,[esp+44] : mov [ebp +16],eax ; numRows = bmH
- mov eax,[esp+40] : mov [ebp +20],eax ; rowLen = bmW
- mov [ebp +24], dword 0 ; skipRows
- mov [ebp +28], dword 0 ; skipPxls
- cmp [esp+40], dword 0 ; is bmW <= 0 ?
- jle near GFXLIB_clip.exit%
- cmp [esp+44], dword 0 ; is bmH <= 0 ?
- jle near GFXLIB_clip.exit%
- mov esi, [esp + 36] ; load ptr to params blk
- mov eax, [esp + 48] ; load bmX
- mov ebx, [esp + 52] ; load bmY
- cmp eax, [esi + 4] ; is bmX >= bmpBuffW ?
- jge near GFXLIB_clip.exit%
- mov ecx, [esp+40] ; bmW
- neg ecx ; -bmW
- cmp eax, ecx ; is bmX <= -bmW
- jle near GFXLIB_clip.exit%
- cmp ebx, [esi + 8] ; is bmY >= bmpBuffH ?
- jge near GFXLIB_clip.exit%
- mov ecx, [esp+44] ; bmH
- neg ecx ; -bmH
- cmp ebx, ecx ; is bmY <= -bmH
- jle near GFXLIB_clip.exit%
- ;REM IF bmX% < 0 AND (bmX% + bmW%) < bmBuffW% THEN
- ;REM clip% = TRUE
- ;REM rowlen% += bmX%
- ;REM skippxls% = -bmX%
- ;REM x`% = 0
- ;REM ENDIF
- cmp eax, 0 ; bmX < 0 ?
- jge near GFXLIB_clip.skip1%
- mov ecx, [esp+40] ; ecx = bmW
- add ecx, eax ; = bmX + bmW
- cmp ecx, [esi+4] ; (bmX + bmW) < bmpBuffW ?
- jge near GFXLIB_clip.skip1%
- mov [ebp+4], dword TRUE ; clipFlag = TRUE
- add [ebp+20], eax ; rowLen += bmX (note bmX is -ve)
- mov [ebp+28], eax ; skipPxls = -bmX
- neg dword [ebp+28] ;
- mov [ebp+8], dword 0 ; startX = 0
- .GFXLIB_clip.skip1%
- ;REM IF bmX% > bmBuffW%-bmW% THEN
- ;REM clip% = TRUE
- ;REM rowlen% = bmBuffW% - bmX%
- ;REM ENDIF
- mov ecx, [esi+4] ; ecx = bmpBuffW
- mov edx, ecx ; copy ecx
- sub ecx, [esp+40] ; ecx -= bmW
- cmp eax, ecx ; is bmX > bmpBuffW-bmW ?
- jle near GFXLIB_clip.skip2%
- mov [ebp+4], dword TRUE ; clipFlag = TRUE
- sub edx, eax ; bmpBuffW - bmX
- mov [ebp+20], edx ; rowLen = bmpBuffW - bmX
- .GFXLIB_clip.skip2%
- ;REM IF bmX% < 0 AND (bmX% + bmW%) >= bmBuffW% THEN
- ;REM clip% = TRUE
- ;REM rowlen% = bmBuffW%
- ;REM skippxls% = -bmX%
- ;REM x`% = 0
- ;REM ENDIF
- cmp eax, 0
- jge near GFXLIB_clip.check_y%
- mov ecx, [esp+40] ; ecx = bmW
- add ecx, eax ; = bmX + bmW
- cmp ecx, [esi+4] ; is (bmX+bmW) >= bmpBuffW ?
- jl near GFXLIB_clip.check_y%
- mov [ebp+4], dword TRUE ; clipFlag = TRUE
- mov ecx, [esi+4] ; bmpBuffW
- mov [ebp+20], ecx ; rowLen = bmpBuffW
- mov ecx, eax ; ecx = bmX
- neg ecx ; = -bmX
- mov [ebp+28], ecx ; skipPxls = -bmX
- mov [ebp+8], dword 0 ; startX = 0
- .GFXLIB_clip.check_y%
- ;REM IF bmY% < 0 AND (bmY% + bmH%) < bmBuffH% THEN
- ;REM clip% = TRUE
- ;REM numrows% += bmY%+bmH%
- ;REM skiprows% -= bmW%*bmY%
- ;REM y`% = 0
- ;REM ENDIF
- cmp ebx, 0 ; bmY < 0 ?
- jge near GFXLIB_clip.skip3%
- mov ecx, [esp+44] ; ecx = bmH
- mov edx, ecx ; copy ecx (bmH)
- add ecx, ebx ; bmY + bmH
- cmp ecx, [esi+8] ; is (bmY+bmH) < bmpBuffH ?
- jge near GFXLIB_clip.skip3%
- mov [ebp+4], dword TRUE ; clipFlag = TRUE
- mov [ebp+16], ebx ; numRows = bmY
- add [ebp+16], edx ; = bmY+bmH
- mov ecx, ebx ; ecx = bmY
- imul ecx, [esp+40] ; = bmY*bmW
- sub [ebp+24], ecx ; skipRows -= bmY*bmW
- mov [ebp+12], dword 0 ; startY = 0
- .GFXLIB_clip.skip3%
- ;REM IF bmY% > bmBuffH%-bmH% THEN
- ;REM clip% = TRUE
- ;REM numrows% = bmBuffH% - bmY%
- ;REM ENDIF
- mov ecx, [esi+8] ; ecx = bmpBuffH
- sub ecx, [esp+44] ; = bmpBuffH - bmH
- cmp ebx, ecx ; is bmY > (bmpBuffH-bmH) ?
- jle near GFXLIB_clip.skip4%
- mov [ebp+4], dword TRUE ; clipFlag = TRUE
- mov ecx, [esi+8] ; ecx = bmpBuffH
- sub ecx, ebx ; bmpBuffH-bmY
- mov [ebp+16], ecx ; numRows = bmpBuffH-bmY
- .GFXLIB_clip.skip4%
- ;REM IF bmY% < 0 AND (bmY% + bmH%) >= bmBuffH% THEN
- ;REM clip% = TRUE
- ;REM numrows% = bmBuffH%
- ;REM skiprows% -= bmW%*bmY%
- ;REM y`% = 0
- ;REM ENDIF
- cmp ebx, 0 ; is bmY < 0 ?
- jge GFXLIB_clip.set_plotflag%
- mov ecx, [esp+44] ; ecx = bmH
- add ecx, ebx ; ecx = bmY+bmH
- cmp ecx, [esi+8] ; is (bmY+bmH) >= bmpBuffH ?
- jl GFXLIB_clip.set_plotflag%
- mov [ebp+4], dword TRUE ; clipFlag = TRUE
- mov ecx, [esi+8] ; ecx = bmpBuffH
- mov [ebp+16], ecx ; numRows = bmpBuffH
- mov ecx, [esp+40]
- imul ecx, ebx ; bmW*bmY
- sub [ebp+24], ecx ; skipRows -= bmW*bmY
- mov [ebp+12], dword 0 ; startY = 0
- .GFXLIB_clip.set_plotflag%
- mov [ebp+0], dword TRUE ; plot flag = TRUE
- .GFXLIB_clip.exit%
- popad
- ret (6*4)
- ]
- NEXT I%
- ENDPROC
- DEF PROCFixWindowSize
- REM GWL_STYLE = -16
- REM WS_THICKFRAME = &40000
- REM WS_MAXIMIZEBOX = &10000
- REM SYS "GetWindowLong", @hwnd%, GWL_STYLE TO ws%
- REM SYS "SetWindowLong", @hwnd%, GWL_STYLE, ws% AND NOT WS_THICKFRAME \
- REM \ AND NOT WS_MAXIMIZEBOX
- LOCAL W%
- SYS "GetWindowLong", @hwnd%, -16 TO W%
- SYS "SetWindowLong", @hwnd%, -16, W% AND NOT &40000 AND NOT &10000
- ENDPROC
- DATA &60000
- DATA &E0000
- DATA &170000
- DATA &210000
- DATA &2C0000
- DATA &380000
- DATA &440000
- DATA &510000
- DATA &5F0000
- DATA &6D0000
- DATA &7B0000
- DATA &880000
- DATA &940000
- DATA &A00000
- DATA &AD0000
- DATA &B80000
- DATA &C40000
- DATA &CF0000
- DATA &D90000
- DATA &E20000
- DATA &EA0000
- DATA &F20000
- DATA &F90000
- DATA &FF0000
- DATA &FF0500
- DATA &FF0A00
- DATA &FF1100
- DATA &FF1800
- DATA &FF1F00
- DATA &FF2800
- DATA &FF3100
- DATA &FF3A00
- DATA &FF4400
- DATA &FF4E00
- DATA &FF5900
- DATA &FF6300
- DATA &FF6E00
- DATA &FF7900
- DATA &FF8200
- DATA &FF8800
- DATA &FF8E00
- DATA &FF9400
- DATA &FF9900
- DATA &FF9F00
- DATA &FFA500
- DATA &FFAA00
- DATA &FFB000
- DATA &FFB600
- DATA &FFBB00
- DATA &FFC000
- DATA &FFC600
- DATA &FFCB00
- DATA &FFD000
- DATA &FFD400
- DATA &FFD900
- DATA &FFDE00
- DATA &FFE200
- DATA &FFE600
- DATA &FFEA00
- DATA &FFEE00
- DATA &FFF200
- DATA &FFF500
- DATA &FFF800
- DATA &FFFB00
- DATA &FFFE00
- DATA &FFFF02
- DATA &FFFF05
- DATA &FFFF0A
- DATA &FFFF0E
- DATA &FFFF13
- DATA &FFFF19
- DATA &FFFF1F
- DATA &FFFF25
- DATA &FFFF2C
- DATA &FFFF33
- DATA &FFFF3A
- DATA &FFFF41
- DATA &FFFF48
- DATA &FFFF50
- DATA &FFFF58
- DATA &FFFF60
- DATA &FFFF69
- DATA &FFFF71
- DATA &FFFF79
- DATA &FFFF82
- DATA &FFFF8C
- DATA &FFFF97
- DATA &FFFFA1
- DATA &FFFFAB
- DATA &FFFFB6
- DATA &FFFFBF
- DATA &FFFFC9
- DATA &FFFFD1
- DATA &FFFFDA
- DATA &FFFFE2
- DATA &FFFFE9
- DATA &FFFFF0
- DATA &FFFFF6
- DATA &FFFFFB
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
- DATA &FFFFFF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement