Welcome, Guest
You have to register before you can post on our site.

Username/Email:
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 308
» Latest member: Donaldvem
» Forum threads: 1,741
» Forum posts: 17,901

Full Statistics

Latest Threads
The QB64 IDE shell
Forum: Utilities
Last Post: JasonPag
09-16-2024, 05:37 PM
» Replies: 9
» Views: 762
Importance regarding Ches...
Forum: Utilities
Last Post: JasonPag
09-01-2024, 06:34 PM
» Replies: 0
» Views: 31
Chess and Analysis and En...
Forum: Utilities
Last Post: JasonPag
08-28-2024, 02:37 PM
» Replies: 0
» Views: 32
DAY 009:_PutImage
Forum: Keyword of the Day!
Last Post: grymmjack
09-02-2023, 02:57 PM
» Replies: 54
» Views: 2,034
Fall Banner Contest?
Forum: Site Suggestions
Last Post: grymmjack
08-31-2023, 11:50 PM
» Replies: 36
» Views: 1,261
ColorPicker - Function th...
Forum: Dav
Last Post: Dav
08-31-2023, 11:04 PM
» Replies: 3
» Views: 315
Goals(1) = New Tile()
Forum: Works in Progress
Last Post: RhoSigma
08-31-2023, 09:45 PM
» Replies: 3
» Views: 127
micro(A)v11
Forum: QBJS, BAM, and Other BASICs
Last Post: bplus
08-31-2023, 09:14 PM
» Replies: 90
» Views: 3,589
Updating The Single Most ...
Forum: QBJS, BAM, and Other BASICs
Last Post: bplus
08-31-2023, 09:13 PM
» Replies: 7
» Views: 254
QBJS Image Question
Forum: QBJS, BAM, and Other BASICs
Last Post: bplus
08-31-2023, 05:49 PM
» Replies: 5
» Views: 155

 
  Announcing QB64 Phoenix Edition v0.7.1 Release!
Posted by: admin - 05-22-2022, 07:47 PM - Forum: Announcements - Replies (8)

Release v0.7.1 - QB64 Phoenix Edition/QB64pe (github.com)

  • If a .bas file had a space in the name, it would not compile properly.
  • When multiple instances of the IDE were used, the second instance would not always recompile the program after changes are made.
  • The symbol file was fixed to work correctly even when the EXE variable provided to the Makefile includes a path.
  • The version number was fixed to correctly reflect the release version.
  • Fix to windows setup_win.bat cleaning up the mingw compilers after installation.
  • Fix to IDE freeze occurring due to invalid line endings coming from git.
  • Fix to Run Only not deleting the temporary executable on some distros of Linux.
  • Fix to _DESKTOPWIDTH and _DESKTOPHEIGHT. They no longer require a valid window handle to generate a proper response.
Enhancements:
  • IDE wiki parser has been enhanced and replaced for more versatile and professional looking pages inside Help.
  • Creation of a new MakeFile system.

Release v0.6.0 Notes
  • Add "Run Only" option to IDE menu.
  • Swap out PNG library for modern version -- we now load PNG files about 30% faster.
  • Fix to page width with variable width fonts.
  • _Bin$ added to the language. (see wiki for more information)
  • Removed/Replaced several more links which were pointing to the old qb64.org sites and forums.
  • Using the number-based $VERSIONINFO flags will now also set the string versions of those flags, if values for them are not provided.



Release v0.5.0 Notes

Another step forward in making our first version "1.0" as the new team working on QB64. This release (version 0.5) now:
  • Has swapped out the mingw compilers to updated versions for Windows users.
  • Reduced the size of the repo considerably for those who wish to download direct and setup QB64 manually, for whatever reason.
  • Prepacked Linux and max versions of QB64, which come in at less than 10MB each now.
  • We've swapped out all the references to the now defunct .net and .org sites that we could find, and replaced them to proper, working links which now connect to our new wiki, forum, and all at qb64phoenix.com.
  • $Color:0 and $Color:32 has now been tweaked to work with $NoPrefix. Color names will remain the same in all cases, if $Color is used without $NoPrefix. When $Color is used in conjunction with $NoPrefix, the colors of Red, Green, and Blue which would normally conflict with the now underscoreless commands of _Red, _Green, _Blue, have been altered to have NP_appended to them (for No Prefix). Example: Color NP_Red, Orange for a red on orange color.


Click on the big title above to go directly to the release page and grab yourself a copy of the latest version for all your QB64 needs!

Print this item

  Scrolling fog/cloud image for moving background
Posted by: Dav - 05-22-2022, 06:16 PM - Forum: Programs - Replies (15)

Here's something I made to use for several things, thought I'd share it here.  It's a scrolling fog or cloud background you can easily add to programs.  The image is seamless so it looks like the fog/cloud just keeps rolling.  I threw in a flying witch to show how you can use it as a background with other things.

This uses a real image converted to bas code -  I'm trying to figure out how to make a good looking seamless fog image using just QB64 drawing commands instead, so I can eliminate using a real image (and a lot of BAS code).  Anyway, here's an example of scrolling an image as a background.

- Dav

Code: (Select All)
'=============
'FOGSCROLL.BAS
'=============
'Scrolls a seamless fog image on screen.
'Coded by Dav, MAY/2022

'I made a seamless fog image in a paint program and
'converted it into BAS code using the BASIMAGE program.
'This demo puts two images side by side so it scrolls them.
'The result is an effect of a constant moving fog or cloud.
'You may freely use this in your programs.

'I threw in a flying witch to show how easy it is to use.
'Press SPACE to raise the witch up.


SCREEN _NEWIMAGE(1000, 600, 32)

fog& = BASIMAGE1&
witch& = BASIMAGE2&

DO

    '===================================================
    'This way scrolls fog images left...
    _PUTIMAGE (spos, 0)-(spos + _WIDTH, _HEIGHT), fog&
    _PUTIMAGE (spos + _WIDTH, 0)-(spos + (_WIDTH * 2), _HEIGHT), fog&
    spos = spos - 6: IF spos <= -_WIDTH THEN spos = 0

    'Use this one to scroll right...
    '_PUTIMAGE (spos, 0)-(spos + _WIDTH, _HEIGHT), fog&
    '_PUTIMAGE (spos - _WIDTH, 0)-(spos, _HEIGHT), fog&
    'spos = spos + 6: IF spos >= _WIDTH THEN spos = 0

    '===================================================

    'Here's the witch code....
    'if pressed space, move witch up& forward
    IF INP(&H60) = 57 THEN
        witchflyy = witchflyy - 4
        witchflyx = witchflyx + 3
        spos = spos - 2 '<-- scroll fog faster too (remove it wanted)
    ELSE
        ' else wich drifts down
        witchflyy = witchflyy + 2
        witchflyx = witchflyx - 1
    END IF

    'keep witch in screen bounds
    IF witchflyx < 5 THEN witchflyx = 5
    IF witchflyx > _WIDTH - 100 THEN witchflyx = _WIDTH - 100
    IF witchflyy < 5 THEN witchflyy = 5
    IF witchflyy > _HEIGHT - 100 THEN witchflyy = _HEIGHT - 100

    _PUTIMAGE (witchflyx, witchflyy), witch&

    LOCATE 1, 1: PRINT "Press SPACE to fly...";

    '===========================================================

    _DISPLAY
    _LIMIT 60

LOOP

FUNCTION BASIMAGE1& 'fog.png
    v& = _NEWIMAGE(262, 198, 32)
    DIM m AS _MEM: m = _MEMIMAGE(v&)
    A$ = ""
    A$ = A$ + "haIcMN]\\DT\4mkk>J=`XH6DSF;nmiJma\2;`7G5IEKP7B3>k^kBVa:m`SXj"
    A$ = A$ + "nkomonOn?h7l3nO6o`Oh?loIlSnAoX_dh7oSoafa?iWlCnO6Zgc?kWmcTSOj"
    A$ = A$ + "?mWJ7_N?_gkmN_Kln_okoiO`7l1eSG_oiPmj^?o?oWocoRa_hGl;Nc6_fn=7"
    A$ = A$ + "3\SSOi_lGJ7Zm7Kk=oLoZOe_j;=neojOmocO3gGh[Omi`Qjcnjen`?l3olOc"
    A$ = A$ + "_igliofOk_mcoX?jSNghSoh?n;6ObWl9OYaeOojmR_OleEKW?mCod_dhcn\?"
    A$ = A$ + "k;=^nkZmi[a[SiGSG7oGSiilll>M]LN_kJnaL^l[h1Gld<NlEll<Fok;h2<f"
    A$ = A$ + "0b5L\16CPa5^N_GagKI2<^P:FVmJ9^#:6l9i2^He_Ya5Hag=cSE<2T9POnik"
    A$ = A$ + "Kb5H\16G0S?Af0k_oFa4HL1fe]V[U\i7Wb5V\QGLQ[a9J6D\Q6N0b5Vai=l0"
    A$ = A$ + "7GhTaGW<17GhJOLZVU]<17GhJkaH0\i`=W[Ye6I\S=\Qkb5#VPJdb4VLQGW7"
    A$ = A$ + "]\DljWJMS9G`a6HLQ;f`T;<I3<VPR?TbWXIP\1L<I<>^`Cc6`o^S=Pa#gQOP"
    A$ = A$ + "O^=<;W^oCH3ZHjfeaLG7D\1Fn38GhR=XbY`5WZh2ZlABl0LOQL05C#UcDcm7"
    A$ = A$ + "ej68GPa6#^0b6JmF#a6Vae^hNV>3lcWh1h#a5N:fPj_WH3W<D<Q=NUTRk>9O"
    A$ = A$ + "RkXoHciLCn6:f#b_15GhjmYn<9o5fb4Vi>LMLghM#cJ7\i\:^0;?2<>mDV`T"
    A$ = A$ + ";hbI#a3#f06[kh1=LQ6fPcW1gWY9>oTHIgfX=_W_>I3KelL2KPU?A3K#a5BN"
    A$ = A$ + "AZbY0i1cmaT1hH2XFQfLjLcEJe:<SaH[Sch1X74calmZh2Gk;77PYG`=HNGT"
    A$ = A$ + "h2=l1F<GJKhRW?aCcCH2^]kMh2gUGdXkQYmRa7Di^hh38KHkXQ=hZc1b5`1b"
    A$ = A$ + "4^h2=iBVFcYA[PR;PaJ>_3DLQ;f#;GPi71j;aMh2gU=hh1Kh2KeOXRWMg_gX"
    A$ = A$ + "Kh[C^#ceVFOCMlQkb6Vjlg`=BK_97PiW`eXQ5hH09V#3GP=fTg0Z]h^j5JI2"
    A$ = A$ + "ZnN0i2GSCi3Kh2hli6^]kh`U[1KkeV?aC`6NBV#R;dh7a6fP:^WY_giE8SKT"
    A$ = A$ + "lFLVSSCS#KnW]ijfj]06O=og\hF6;Pi1aT;Pk;WN1FM<>Q;XH3^hK5K8mIBm"
    A$ = A$ + "6Q;o^]<Zf]IKn9YeNKFcjYH2KbUJniO:fPZ^0ceeE3U7R\m3b5HN9Tl885cg"
    A$ = A$ + "^nFR;`R[D[Y[h2X62Go:`h<Ki2ZJM`lP\Ec0N=]96NniJhh:=LKc]YI>aVh]"
    A$ = A$ + "Cm4XMKL2C`U3ES?49fP:^MZ]7m`T=BLS[m3jS0CW`6O3g^^bG5LQ]eZL^OHK"
    A$ = A$ + "WF=3hO7o_^JCdb6>Ihb[;a4`S[Ch2=j;f^VLK>]:^`6_aB7GYL=Bn=Xjo9F]"
    A$ = A$ + "1Va]<fPSchH5Wb4^>_IckJVoXVc^YN4]iATh4\j:hh2>M3^jVTb_HSVQk`<f"
    A$ = A$ + "\V^S9TfFKI7KR3ClRkbDDi0dlJ<N[JK\]F5\lmaHGfcZQKk`h1<V`<7RT_;Y"
    A$ = A$ + "eE^V7]AW#3G8i?XJ]m=mmH;?Y]W9Ki2=\1geKGLl6^`MgFKFCXQ?L:;i4N`M"
    A$ = A$ + "6:m2]\Q4S#=B?[7]iJTH2:^`6V0Cg0KM_ioEe_SYhZTG0]\S=iRl4LQD^4c["
    A$ = A$ + "Q^[aY?K;GXE[`F]PKeaTH2=lQ_:i1Gj[MLQDN==m4UREdlLPMRn3E]MDJSBJ"
    A$ = A$ + "oMcWJd9Wh2Gk7FO9f4cW6]NC`b5iDfPZ^U:>0nOEOFF\W;6]Ekafhm]i2MgL"
    A$ = A$ + "#N2_8`HgkXG8]OBeM1I5ZHHGn9ZLDBK;VW<:VPS;\Y^K^iV<^`LkoF`5fdC4"
    A$ = A$ + "?5G#mLFVd7Th2ZhCE<?bM>ASBkmfCeTlTNCLgL#V_?Ug2:M?=kWF>1[O2H_O"
    A$ = A$ + "7SPa4L\AV?SYiZ]\Q4_Aa5^NMG^4_U<Q=KcCi2W>JI2gMohb1RM?^U=`V_lF"
    A$ = A$ + "b3LK?FlYCWQcKUF^fFn`fnf#UKBZo4#NX;VMkLDge\Cd;Pn?NWhgWV7\Q=LB"
    A$ = A$ + "lhV[iCV0;^NcaUkmj^OkV3]U=LWho=aY<?4Dj3Jc7J;[k4O?Ci3Qj7BN8Xd5"
    A$ = A$ + "QgCMcAJVS^U;XjQhVj:f`3DlQkhAQR=Tj9JeJa=a]9OMBaf^NbTmN`gG:NVM"
    A$ = A$ + "\dTgdefMC<D3C8aMDL15C8i]cflTJbaIK^A^lAJd4i>_C[gdXGHSo2ZH9\fR"
    A$ = A$ + "KG__=nWE?dWR;`HMK6=L1Lmi4C#Y_1_>`jo2eLO5SJ3O`57YRIJH2H<ZK=gV"
    A$ = A$ + "HSiiRKNNkJU?InC9O>K_nih2^njea5B3L>\Jn:S;TnnNL3G8iUH:7TWbo1ll"
    A$ = A$ + "]Ec0coWV]OK_RLMlWh2WV7JKNYGa>]L1lhi]T;dL=YUKeXahD?<Ln8T>fJd;"
    A$ = A$ + "dNMIcJKZebH[o[h2<f`C`5^S_4G_F3K`]N>cgQ=l0LO`>gEGc#^#:>#iE]Rc"
    A$ = A$ + "]a3U9KP=W^I>HS6TWV;PkGfaGJk\UCL2GXUekH3^cYD^T8k9]N=>WMSNQkXo"
    A$ = A$ + "_U;hl`0I3]JDH[W[hc]iT`^VZd5ih2=[5dVCJkJ>H\l6V#JKUlad=Wn^<16C"
    A$ = A$ + "LSfk=J9Je6]E3XJ=[]LQTFQ4GhY[YPcO1Lkglm:Wkin^mLEa]fj?1C[#ciYc"
    A$ = A$ + "S1E<AKn=YlCMLQVeMCa_=ic[b9I;CH^o`]E[FZdiD;K`EOSWP;TVSPc;BcED"
    A$ = A$ + "a:YeQObJ=^U9XH3Kmnh^JJJi6WVK4^]M[9X^?k^GWh2ZioKH2\HH7KHSG0]J"
    A$ = A$ + "lC<Q=JYJiV=jRHLQif^ImMT]enIL3G>f:o2^;KHSo0]NJ\imMbaNS635K0I2"
    A$ = A$ + "G7C\OK>LL1dc3eL0gmiT?:Z][CKbVeFEaA^L8^;CPU;RS;ThmKH3]<QCH]Zc"
    A$ = A$ + "Sfi5:=BY[9OCS;hRSVo=g_7>]\RCh2:f0S;PofLPonL`fVcoM[?RYik>f#:F"
    A$ = A$ + "_EgMCLm9LQdjccoFJMFee8eme6=E]i:ehSB;KHclQCc3nD^`lcaRa>Q;XRQD"
    A$ = A$ + "lPVgoVOo\^SW4cg;NLnmnNO_8G8aOJ^_OWLPHakZeYfb5#f#BoOR;XdWkFcD"
    A$ = A$ + "MMRM=OKnFOEb5N;h1c[;HLIR;Lb_MUYhYin\E7`ELfLd`9LoVJUlGPMMBa4V"
    A$ = A$ + "<>ea9S=dhm`C>^kL8U63V>idJoZ?CCnlHlfF=E:^PCGE;KX9GWkh?`Ca3#]2"
    A$ = A$ + "]LQ=[1_U;XbS#5KSaJ=lQFml9V#[f7gaY;?9WNV=ig\Ag3nifb6Dj7JRSBLQ"
    A$ = A$ + "=n=fToP;726GHnI#]BW`5JmFH;CH;o_INbF^#k_a]]j7fhM`ElfgmknMol_c"
    A$ = A$ + "gikl^a[ooG3GLXj_[dc[^6i>gH<Q[S=lHLc_C`K^FjdT]mc]97ld`UKP:FYU"
    A$ = A$ + "UP<QVe4MWKY?cD[DSo9^JBfb4J?OLg;g`4Jh2YLk?eS?gnB]mAV`LPaP:Nal"
    A$ = A$ + "_oJkg4gi>?#_AD<1faC[o8ZSaCSoE\^=J=f`6JlPH3G`EgQ]iAiFKMNnchQh"
    A$ = A$ + "ai6?EKh2KHL]LnVi?^hHUOO>]kWDc`=i\PLQ_mgnKo537WP5[Vd<Td:<?NIl"
    A$ = A$ + "P6VUB7a9efL;KX=W57G4eGoFb5HN9PJ4>A_3;g8V?LKH3=eIAMnORFQFmOKV"
    A$ = A$ + "K`RQClPdJOK[GH3C0cQh5;hKm]nF_K<i38S857N7>F3CXU?TH3^hg]J5BLQF"
    A$ = A$ + "mB\l^EN<`ReEa6:miHm8Ej4LWg:^P:_m4Ghe#YGX]6=>fPSIeL__97Q]L17C"
    A$ = A$ + "XI^mVj6jNMVNQ9G8a7BaOW`6#FER9d`:J?fN:>`F^0;n#a4LeZHC<36_QeMX"
    A$ = A$ + "=>AMlkb5J[V17G0oK>?9EJ6N:^#[NQiL?Woo^inKd4ObH63N5gSL1TAP7OKZ"
    A$ = A$ + "[IbGU9cTMMaUSc6fPRGmTlP=KCELa6^P:oQ6_6Mi?\A_CSoY=N<`d;Tn>GXi"
    A$ = A$ + "l[YV[>O1JWGTh2\e\?ESLK^5]j9#m2=LQYn1TKeF3C7CHNM1_Fhb[Aa9^KN>"
    A$ = A$ + "]<1UfSV][;Fj4^`F_6W[WRiJ_Q5fXkaiU9NnSj5Jn^HICmFKh2gE3XkjG3Gh"
    A$ = A$ + ":>h^nXM2GhefHV71b6nonononR1CgPR;TdAXZ1:b:W\0E^==NQXj1Zk<>a_7"
    A$ = A$ + "<6B]fjYJ5LN:db5#]2Ke7=i2:oAVk75C`YG`MNUZGKZ_5LJo?EWHJnScK1gO"
    A$ = A$ + "[YGNLn;X>^HN?>S1WL16KPa5Bm6U[?ZLLQfA;Gh>NSZ^^gX1E5;\Idj9OKL3"
    A$ = A$ + "C_`Y\Q[c?fa:S?`^>hh2KlMdEoBeab\VA=a#=nEe`5Ba6]S=ma3NlZh2]\Qg"
    A$ = A$ + ":^`MI3KH2\[G=i?NbW5e<gZ=`iI`MH2X>KFmkLN<db5JZSX;gWigo29f`9<1"
    A$ = A$ + "U>V6FHkj3GK;fe>GneHlcG5L1T=XlhCU?agdi2>O5J_Gfjg6;f_9oikZ9h4O"
    A$ = A$ + "hLL1E]mElQDN4KhHhimeagV__GCLQdnFYIH;G`]fPS=TlXC5GMG^PbSD6G#a"
    A$ = A$ + "7HN?VRm?U;P\Q6o5fXEXmnIK<_ZWNfd;B]an=?WQKRQHiMgd;P>^0boLWKG7"
    A$ = A$ + "3<]2GOW#_il4SkKHBKmHYIN4[f;>=X9n0;VJ[o2]L1dO1EmADaOOEc5L\Qg2"
    A$ = A$ + "^P;nOC^0KSEM<QdgiQ?1GXQ=Th2\[=Zc?l_ojlQmk?IkcOMb;RTW7=i#iV7e"
    A$ = A$ + "d[XY]WbGBUNQCh2\l8^f^^hn[h;F_8g4koe=G8a6Jd:hj]PfelKn>8J>oFmj"
    A$ = A$ + "ZO7j>Q=XR=Bm=lFfPbGaii9SmenK]gMh3hi]R3Vb3`YGXYoYMjAJmGh9lF7c"
    A$ = A$ + "QP5SQ[iV>NN2^PcSQCi2Yl^Lg;E<Q=ij[R]Co^]Qo=g_o:KH3YHS4G#iK?b5"
    A$ = A$ + "L\Qie5fi9nkMIc_aM>6ASFQ6fPckQfl?KmbJ;G0WWkhG=L1U?2_N=63J6S?O"
    A$ = A$ + "mCi2\GK[oS^WI26;=a4Li;LR7P]LQVQkgTYdgE1]a6Zn6ViK?K=cDoJQi4in"
    A$ = A$ + "=bfmKFkFm3ZJEL2Kh4oX`?OBGbfjH^Q;Xd\`h2cnDhELf[meLkah3:VA3G`m"
    A$ = A$ + "jYN2]Q9TH3]<QI?gLJm1N[H3_EOGZcF[O6g\U;`j?QYf0f_SegA_0;_<7K`i"
    A$ = A$ + "e`fQcKVdW1eT\Q=XVOcdeidY<mGHFCBT;TlKY]V;>]m\gKkc#US9TN>9DN<b"
    A$ = A$ + "R;^Km4N:^#k_=C>f063hd8Pa==iBXlPLb5#V`_nGo[Yo6gWhOK6=N>TZO;;V"
    A$ = A$ + "gmnLlQfldJbY`a5LilldL16CZU9PaW>M7YhNFoQN:KHC>4Ki2ZJ:hd4lTl1F"
    A$ = A$ + "M8BeJMN^?SIJlN4_6jd:lR9L=JH3>OIgj=9;O[D>6W>JI9<M39f`6^P;gU[h"
    A$ = A$ + "7VgNGLQTGnXO<8K`iKJb7f=N^hl`\U=hd<Xh2YJ^M2G8mKj\;V#miAf#R;X>"
    A$ = A$ + "_A=3ZiK9^0b4n`?l3OgPa6J^>LGm4W`8L<S=<4Wo6ZL:BJ`Kd;`lCMb5DeT8"
    A$ = A$ + "a5Hi6=?nM<1<VTa7^;K8UC1bVBc[EeP_MmX6?6#ogLe`W]=MNg=eAg<?7?OW"
    A$ = A$ + "a9ci]YNn0i2C]2CV`Y\Q6mB]J;N2n`6fQkmid<hFgMCN49^0[?6HN3RL1VnW"
    A$ = A$ + "if?YE`eW7?=G#Mm[a[1Gmg_cJE:^P:^fi[f<N37c]1>7?eKFHLbT;XlGo9h2"
    A$ = A$ + "G\QTG39=Fhe^FnQS=TZY1jE;6ccN_^N\Ri]gF^PcgALmLF=1Cm^4S;PNEgLL"
    A$ = A$ + "kZGb9J6Ln<\Q?ijQQYFHVnmkb7Hae:=3<V#3GH6OcbC#a4HiPdha^S;PiAPL"
    A$ = A$ + "15KHN]VEkfClVYEk#3GXQKXHb]\1EL1;nGi;HR;hjYAElddS9DoC:O2F]2I\"
    A$ = A$ + "1V7T9]1:?IDl]D=XEL1gjEYN<#a6LL1efAU32KKP[3jd=kR;Li?k^fYlL\Ec"
    A$ = A$ + "0kJ2N>O7?KgTG1[f>=ak9=JKcWXQ;Pe=BUo^[O1JR_De[NNNdb5DNSb>FMOg"
    A$ = A$ + "DlF`4Jh29V#;K8U7PK]#enTaE`ik<Mc>ojKZU1kJW[F48GHb7Hme0NNUhX]i"
    A$ = A$ + "CTbY`YOZ=^?=`]5j1PS=<ceGUSNR;XH3][kjZ=1CKRS[hZKBC]KC\0EOGhh1"
    A$ = A$ + "Ki2\hIE?j\9?2gf;=D<UFOiCa1]n]O7^PS=T^^TRggjIIRE^Q;`b;9i1Y:O2"
    A$ = A$ + "fLME>jZQcCC7C#a5DjFDNXf4GVf6>O7LNUVZUkK9G8eG_KH2Zn3\UQhR3Vj8"
    A$ = A$ + "DL1gLhWT;PJ6J>OO:^#:_?geTFV#;G`U?a<nHn_g`5LaHZn?ZQ;`RmH_^Z60"
    A$ = A$ + "9f#RARJADk_Dm7N:^`LNLZNK=\5LKaj38fn[ASaFOiKW7o==^#[g<]\Q6o8E"
    A$ = A$ + "\0G=>LL1EoTaRcDeMH;CXU;`>6Di`gh3ZBgPjLYIOVbW2iA:OcLL1EM0La^>"
    A$ = A$ + "moW`4HngWdMORo7Yjem=9^`6fPbKV=J6BLQD_afb5`iV:]iYjAf6?eFC`FV#"
    A$ = A$ + "Km0aSCF_FhH3KI2\QZWDCeJSYIH67cREEN[gV_0S9TlaGES_]a2][=RcU_ng"
    A$ = A$ + "YNPn4^#RCdX1`iIkfL9DGGJjKn=LfTGL>^`ekEEg?F<N:WminDa5JZOQjhdY"
    A$ = A$ + "I`iM:S9X^Vd`4D[gUh2cijcHHeLlDN0KI2>_jfFc4FLdYmh3;o[WT;d`6LiA"
    A$ = A$ + "h^FhH2:f0N=ZQ;hj;25G#5G`j10F_YRe6PiIX[>5H]5Cik[h2>fPbc?7GPMn"
    A$ = A$ + "\Mkg`4Vc]MmkXR=hVc[Vkkh2GOVOc_iglo<H\QfLG`H8L=cF^PJmbWR;hlCQ"
    A$ = A$ + "a:Be1ZQ;`jUmfjHVjo167Aa6JR=HNZch9<M6:=gZJ2nj_=SiLNRbbU`]VNZN"
    A$ = A$ + "0^jL`>GfZ;#e;J\el`kc>o[Dck_RQo]ofOkk6Gac]\1ffhJkP\QDN4<mhZhS"
    A$ = A$ + "]n\YH2_6>V0bifZ[:ie[kNF[NQ]mi#C_Aid#Pe\T]n_R;\974F^gKh2Km3<e"
    A$ = A$ + "g3ZljCN\dT3aC`4`kKWb6VacOd7mA_Kdb6Vj5#V`T;PK;7G#E3Sk`5`if<OJ"
    A$ = A$ + "EGGDJPJZoR:o<V^Q4C8a6fd_3<Va6o8HJ7D[Kf<__aKOGn6hJn9O3MN2Zd?X"
    A$ = A$ + "hJ\nW<iEbF^#3CPYGPa7BiDPacG<16K0S3H3T=XbU8U7QR;P[cNZ7KKH28W3"
    A$ = A$ + "eCe`7BeU1I3ZlZLN?NJo>XlRXeSB7K`USLboBV?OZl=H[aWlhdYM`ecA\LQD"
    A$ = A$ + "7oWb5HKGE?XdXG#YK#Egb[iY>^P:nFa:BiTgj_`YL16K#a<ajf`HU^1NmPa6"
    A$ = A$ + "BnlfFGVTVQD_#QL2TIdhc0NMLNmVUCAR9hjk\93#U3OC^k]ighb[#m\BXFO7"
    A$ = A$ + "I3KIG:^`F_cBLQG36GH67`h2Cf0b7fXSHKM:Cnj_Q=hdBYh2CV0kJ2b<E\15"
    A$ = A$ + "[TEOHF=:BL1f8mj>m4KH3<=J=mQNJ=?Gn58K`a5Ll4G>5YJQfTGQRO]Q;`hX"
    A$ = A$ + "\id>_cL3VNI6G#YI0I3^l3fh5W[N3\NTPa6Hc[CN\k^^PL15CPYUB5kkd>Qn"
    A$ = A$ + "#jRc_;G0o\ZLBLnAZnkYn5AE3=6C9egD:Mj:M2=eAmDf`<n^UOYZCYkH?UOP"
    A$ = A$ + "Kn]jnjC`5JR5H<Q=m0HR;hbW`=_6W7gb5BG?DJXDLRT?;KH2Ke3\=WT]e_HK"
    A$ = A$ + "?S<_?XlaDE7d6_9Kbmga6Hmk#jIMR]oMJKDn;P7o=GkLN:VZO5cgAEm4B\Q6"
    A$ = A$ + "^`Y<QCi2^cOU>ZFo5>Q;<_nXZUaMh2]\1W7>\LbLe_XQ;LZ6Glcil[#iE0VO"
    A$ = A$ + "NjiiXEgPS;TnNJ8EcFd?eFV#:gP[kmKVSTh2Yh1W^IF=jKW;Wh2YlaM<2W6Z"
    A$ = A$ + "FO7g`4`[A=mhU;F>a4Ic5L\0E>I>n#:G]W#W;b6Lm6Qcc^VW1d6O6LiATn>L"
    A$ = A$ + "YU9`lWmDV0C7`9LQVN#8a4DccIjlCeLWU[c9LQ4W0_N\]N4Zl5f<LeWISN[V"
    A$ = A$ + "AcfZiJWJ]nTOh^ee`]?S;hh0ZJNTj?CV75<o5LOW9dd3f\QkhWicXRWfTO`V"
    A$ = A$ + "eSI\1VVgDNccig\eoJmnPa5Be[LC>f=G;fFSbVjffFoFF^G]NgVh4gQaPa^Z"
    A$ = A$ + "e[Hi<dTo6C[RR=TZoIC=?f`5B?KF=?cF<M89?6OJV#SVM5K0e<d`3H<15GX9"
    A$ = A$ + "O86G`]fFSnS=WoC=o9^#:O:7G8eoT^NSJ3W`=LNfd`6HiDXh2>]J9f#C]?al"
    A$ = A$ + "6LNPRJ6LiAXRmKnNISmLNYZUJZNTZl5DcoM[9L:K#U?lG5LQVegVKgF>3KmC"
    A$ = A$ + "EO7YH2GiBmaOl7Gk1KR9XlXXUeXj=4F<?Sc\AgQR3[lJhJnlVec#f0j1Ikc6"
    A$ = A$ + "#Zn8CfPcga6^PjkIBgcc9ZG#e?S:O5>U9XH3^h#GOh\U9PjlKbSXAkkllYYn"
    A$ = A$ + "S^]K3G0mLm5CH>LmgTS5dZ5i4o;JdELMnfDoX4GH^fN;GPi3J:ORCje_4K0c"
    A$ = A$ + "U#ekb=<1lk\nCi2=?kC=aA=i<R[_Zf>:f`MjQAlnLCnVYLSD[Ce`6Ji2\Ja`"
    A$ = A$ + "h2>f#BkAC_RdDgSVN9AMnVdIdb5Hg;LJ5JdgReWhTNo]Q;`ZM#jI]4I3h_W5"
    A$ = A$ + "G?kFW`5LmaTS=dT;>NMNN_Sa6#ogfZKEY1]Q;`l58iEbFf`6_ELLQ?iCnTg="
    A$ = A$ + "L\1UfP6N`9m9Q[oCI<1T;XH8>]O9O8CgKMi8bd<LjXeoAEO8eb6f`5Hn;dn<"
    A$ = A$ + "CWZm[;WL7C0iihm:fLXFOaCNF]MnCcHkf=i]b6m2<fPR;L2C#]Mg`5Vgo#^#"
    A$ = A$ + "cmhTVQ4G`a4Lk77o7g?Ki2YWmR;fPZfU\jHRiB`jci6O7KNV8f`7Ba<^LoHi"
    A$ = A$ + "CLR?gWb5DNYX>_`mAB;bVL:BmlYS=lF`5^K^4:^#;gg5_^aCIW^DLoXl5c=o"
    A$ = A$ + "i4^`T=hNF8MmS0b6^6_nkZlCDiBTZgJ[6YDLEb[h6]7K7gQ=hRWCjSDNXhZ?"
    A$ = A$ + "a9J6D\1Fm9DNHfjmXR9dh3lfJG\U;dhW\bG16SjeO;=g9i_QJ^^S;XN6_IeZ"
    A$ = A$ + "#e3S_RcWiDljobj7j[gKkccA;G`igB3;UiaICmSDS=LRfeIBJAahI6K`Yg`E"
    A$ = A$ + "O2V?3^jEZh2=N?N2Ch^\PTg#<]m>O1I\1W^?T;PNOf\^2NOe=OR5kdf?4\JE"
    A$ = A$ + "`N^7HedlbKQIl>^mDKgCbSh>L1gWI[^M5K8E?ldmBWF8U?8cmGb;Rdi`6f0b"
    A$ = A$ + "5fDCRF_2NbNKPa5>E7XR=X6cgkMh2YLVCJUg`6H?C6^WYcY7UcWmjiflKRLQ"
    A$ = A$ + "TNQTG5]<QTWTKl0Ai3RR;hV3eZmQU?ABc0;7RifH^ML[moDLQd[[d2Td0f`5"
    A$ = A$ + "^^Oilg1_>OMLYb5]iNZR?UH3^W_ZTgT\WoZdgG;8K0i=Wjkh9LQT_SW`4HiW"
    A$ = A$ + "_YN5W`6DL1gJ=WTGd[]G;G#m<UQj>Baf>fPb?QVaVN=YQ?\aW1eL<W73:^PR"
    A$ = A$ + "_\97W=\Q=OgAYj3Rk`5fjkhYLQie5G^3W67M7fPkn7N<kh2gU=Xd<TZ]0;72"
    A$ = A$ + "L]K7?8a5HOfFNQS;`^GL2KHC]VVadWb5H7KKH3<^0[77>AoPjIjBm\McbAAY"
    A$ = A$ + "I#a6>=?2em96k]Yn2Kh2YeXHgoHnQ<e<Tl8KciPjLW]FO3GHV71CGoYLQ97P"
    A$ = A$ + "mggD_BgmQdmGUOAKVcQiBhh2Ze]L7G=[kTjObTfQT_4:]2<_<CN<dl\OL7VP"
    A$ = A$ + "Zf3Kl7H3GHkLb4Ghe0iH]\1fiPkmbd<Xd=Xl>`ik7SCL7o8CmfDSg2Z[=?1G"
    A$ = A$ + "H>okjcScCBe5==_cY[Qig`6^`Vl=Jl`<mm9QZ78C?_H\j9\aGhfekEaF]i#d"
    A$ = A$ + ">WDa5DmKaYiad<V7k^Hgdcj4S;bH3HLmM[OAR;TH3^[[:MkgAc0Sk\U9h>>?"
    A$ = A$ + "AgP[OTEmEMS6RknM>US=\Y6S:?K>U;XF7YQ;XZ?fea3coHeiJSFWCh5ha]:7"
    A$ = A$ + "0F<\:^DMm8aIL\Qdk=YGaY1O[naTgSYkOGk?F\\:Gg=gKM<\Cm`[Y^WKjiJT"
    A$ = A$ + ";\Q9PLQ6V#;KHkX=^3[C]S=ljhRiAZbk:L>\JNOkl77C#]>O[NQ[S95GHK?>"
    A$ = A$ + "YZA2FcDlHfa6Dla=\Q]J6DN8jh2WL_eUg:cKnVLeML1FN6KlZ<i5:C?3ZY^U"
    A$ = A$ + "9XH3]3emU=iA[RIO]MIg[Di0Q7?Ye4gb5Dn4^Q;dha#:>W]m?YO:DW;<^0kN"
    A$ = A$ + "[RQ<WOdXIXQ=lF`5H7c\h4U6Ria=ZI#a5>9?35GXa[aCe:L7f#JNSS9PinZR"
    A$ = A$ + "IA=YZSc6_0HciKegh>fE<QDL8SAd`5HnJNWnbfYK#alKSeLLM6KXU;TV3fb4"
    A$ = A$ + "Dj7DNLM7^`F?8Vl17G`e33Ki2gEcP;?RVl`KbmmjNFcL2elG6GHKn?9?1EJn"
    A$ = A$ + "Ml3E^5hk9YI`E_d]L1VVQk\6\R=Tji9D;0K]ldLAfmfVGca6f`5`Ho=i0hlV"
    A$ = A$ + "#ek2ZLOLj[oZbSQFV`F^0NoZeOS6m2Wb5L[Q_YV1HlHjJEji_dmLN^9GRCbi"
    A$ = A$ + ":Y?O^6T;O2F\?K^[Jm:WOYKh28K;iaUS=`F[Gi90S=XN_:O>LL16gc=BN6hV"
    A$ = A$ + "?PaQ^H1UGi\iXYiM9^#Z^L\g_R=\Q;T>gKd<hdHe`4BOO^\U;`^6gLOI3KP="
    A$ = A$ + "7^Eo[CKkVib\eNLi3e`6LenDEcCD_A3KX9?2UVX]<QVe#`LSEn_]=7ldjFYL"
    A$ = A$ + "IL3739a5^>?flmURS7fh?k9\QfLKJi2c[a]lJU_o<nP;GhDoghVC[Vcj>GV_"
    A$ = A$ + "VbW;Fn6:nP[fWZG[U=\agaWP;d4Cah2=eH;57]U=hRcMcoI_Win\=oOeaoFm"
    A$ = A$ + "29oJgL]EMmUa4`SUk`5LNCYH3^hM6C`=Vc[KW?kba#E?4Fn68O8i10[?8VnG"
    A$ = A$ + "blS\]O7O;h2][eRLQWHN;F[RVS1lN_K^OJ\9>=adL__]\QWVinF`5LnD[V7V"
    A$ = A$ + "d0\U;`Z]1SaghU2;^Gie5SmYbk`Egf4KX]_VJi29?LJh2=iAl4<Q4G`U?`LN"
    A$ = A$ + "NSoOH\b9kW[m5KK`Rofb6^N?^[SgQ9hdXeVc0S;dVKAbG<ElOC_#`d=PG_Kh"
    A$ = A$ + "2=WK>?EJHM9o;KI2gU;`>?_;G`iS#J^Z:FYM=mFNPcSSFMVKbEYU=`f6hW9M"
    A$ = A$ + "MMKn3<FL3C0Omfh67WXUOd`5DcaKm=KV7a6^PCKD;KXiIij^n;Tbi3?7KmSc"
    A$ = A$ + "i;g9[CObh^<Q4K`5KTd?Th2^Se]_o6^0KkROV9GP=?GU3nMh2KdOPaE=nFb>"
    A$ = A$ + "^L\P]J5Jn\gQ=hN6=ffGCgiNCce<W^jgB>#Jd6gTH3?1GHcaKK=3^3c[icmj"
    A$ = A$ + "o7?_CaE>V`9iRdb6HL1WFidi#cnFa6Ki:KI3Zn`^Yg5DLQT^?eiAjeLj:N[S"
    A$ = A$ + "YObA3K8MMI3GdMnVZ[1niBlUFOMD_N3K`5od6g]InFbg1EM2>mhk><QTVSfl"
    A$ = A$ + ";JOfBD_G7GHcJoY[;^[AgQ?Lgeh_Sfj[]Ujk[eWB[d9lZT6;LO??GBofd<7h"
    A$ = A$ + "[QLaVL4Ba>WX?]U=hF?\Iof<Wo>aC\]WS=LJMHD<SWR;dLL[f?YJ8XZ1G:V]"
    A$ = A$ + "M>N[?mhj\=O7\=c_#a4LaM=m6IbkS4G8mKQ5kg<?f_]VW`6>I>gMGc:UkLB_"
    A$ = A$ + ";Nneh;ofSkCh2K78KhYi2Kl91gO?5K0SWBo>#^]fX]J`Cl1efXigU:DO26Gc"
    A$ = A$ + "jQiTV[[?oLoLmK[kWnYOjG<`O_MM?SE:f0>oj]T9dZQ8=_?a5VcaMlV_:i2K"
    A$ = A$ + "n\]mje9i3eh?R;gUC^GS\16ChJ^lL>m6m3^eNKbiF]>MS6ndi`lcfnkP[R]a"
    A$ = A$ + "fOCV`WmIO6UAPo^L[H3hlZVjm]INPKXRcI<Qfj\[h2ZnPHKLUCSC;CHS?5:V"
    A$ = A$ + "P;?[=W39]:\[OWVg8b6#^06?YH3]n]iFkU5SkbgGa4`hkiam<V4ecglkT]b3"
    A$ = A$ + "A67Jb3`QB31c[5V^Pfh^CH2ZlVHk?5[JcW_Q;LZf1<^FiKZS9Tl0IS^37K8M"
    A$ = A$ + "=R]_BJDJHZYSYCI3Wh7YR=`Ra^ng\eZCim`FgV]N]BK?KmLlLFY?1i2o^Og_"
    A$ = A$ + "k;68S#a6VJ6JFO_=>A]mHJQDah=j?Mi3N2Gh^\QD\46?adfdb6LNYfZcRU;Y"
    A$ = A$ + "S=`>6fhaSREiH3H<5b5^;CHb5HaUG\QFo#L<QTNNWo08S0i2c?7S9XH3\[[<"
    A$ = A$ + "f#S_A9]R9^#jn6Ko`b9EU39>W?=on^N>db5D<Q=\Q6N0b6BJ]B\Q=G_VGg#m"
    A$ = A$ + "#>^0b6HL1eLhk`5HkcinmjgUFWGS9V#SNN<_3fWAY_XA[PSATH3:MnhjaGgC"
    A$ = A$ + "Ic[MJ?#^#K\=CcIbO9UVQk<??a5DJCJH2>MgKI1Kh2Z[EgaoDfi#cJ6=LQI\"
    A$ = A$ + "D;K#a3HngQaGCf`6V0;oN5OPi5Q:>VEOQF]2>nPSiZ^^Yh38K0__gFO:fa`9"
    A$ = A$ + "L1ffHclmVie^lXE[gjF[dM]l]P=X^gn4\Q]N?`VKhRAI[Ofhoh9L1LOad`_Q"
    A$ = A$ + "9hF[njLIniW_gOo_ogo^aeoFaC`meeWK>HK_iacfLeJI3]L1G\=KOhh2GON5"
    A$ = A$ + "O1m1`5oNGf0;6^Q9X^Fn4\17GPU;i9iDTH\^i7>=m>]a:f0cGBU>h6^0KmDE"
    A$ = A$ + "N7:>P:FDUc1kc>olhWEa4n3oQo`GJ`H5GKGeiYRm^a70emL7CPYIH;GHSf3<"
    A$ = A$ + ">K[?N=iGhlPO[o=]\1V63lH0I3^[A>O>JI39V#3G#=W7I3^NT<UCaenE]?Ei"
    A$ = A$ + "hWH2Zh`I\HBKAJ=NW>1T;`6:fPZ_ABJ9`eTEi<Vh1hn#a4>U;hHIKF7>YK8Y"
    A$ = A$ + "Q:a3BL\k>Bn?jf_?5KXinZS;`R]Lm[SJ>L;GhJoRiDPLQ6=lZHbFO0JN_^mi"
    A$ = A$ + "Ol?n7oRQkhPE[RDOUYh3=i<XHj:?#?AcQknOR?hH4<>`FM0=<1U^n]idhd]X"
    A$ = A$ + "^fZhl:=FKi2=g;MeNC]fYBc?^NWKMS[SSG_o4GhJkV>nJG_>Y__9ng=#V0S="
    A$ = A$ + "`d<`h]]mL:S=db4Dm#BR9Xf^=nT`>NKm7`5oM23Pa4D7OYm?kHQMNaHI8C:Y"
    A$ = A$ + "O8Y[BigZBKPJNA[Gk9?oCmf7b5DN<`fV>^#;CXQA\U5`HCWXG8Y5[ao16o]i"
    A$ = A$ + "No\oADL1Voa]iDfb6Jm=\e?U]3E>JWVGR:G9T=Pkk6_ID3ee]inQY=XITjGX"
    A$ = A$ + "6nP[g7#^PKkZfoGa_Wb4Bj7fhUXR=Xn\ZJU`Z=Z[?[BaP<^PZ7bWm?belAUN"
    A$ = A$ + "cdlYFn`gTi2:?Ng>DLQD=:JIC^LG#f3S;XRoM\1g85;[H3X_6=mW4[V0]LQC"
    A$ = A$ + "beXag#U7U=j=>Q;PaL=aO^hHFORSn<PcSf\]BePU=WgYC^=7RfhLLo[n<ZSg"
    A$ = A$ + "]L1\n4haO;KXMOjHUXV?gJ59fPjeHabZNVTM\`H3H><\hWVl8JGK_ac`T?4\"
    A$ = A$ + "jEXZiAjLCaRg^flMh2W\=H\=UVagJ^#C><HlF;K`aGLiBT>7NBf#BoTR=<_G"
    A$ = A$ + "f<oS]NUJmNFOCZb_ea5Va`<=3Yj?Xl<eiIYS;d4C[dld`6Dn#j6KH3]L1Lhb"
    A$ = A$ + "KPa5D[;le5G`E[4FLDjc]UETlUTYeoYH3^S?Do>cc_]ih^a;2L>RS9`h2_R;"
    A$ = A$ + "AOjDeCUYI7SkBNGfXE#MMkDn#bCU6M4>oL>AkO:?ddmaiJ2:oAMJ^KmG`a5L"
    A$ = A$ + "eaaa5BmXQccg6M49=o9oHNJ=3Gg;aj>XF_BikE3G#ii#Jnd<VM6ONe35hkiT"
    A$ = A$ + "lhK[[Q;o1E<Kb[Tk`6D\27K#EGj6^PC[#SfAdCCF<TCgMKm1CL1FmLHaJKi2"
    A$ = A$ + "9f`G7L1F]Bfb5LJSMJ<Wc7JdAScCDJ#IJ5LJiM\17_SMnWh;\[EYhf=LQCI4"
    A$ = A$ + "?1GP]=Bmk0C?1jcPjh:53ejm^cS]6=3ch=FlBJP<V=<1F^49O6N2m2:MTZh2"
    A$ = A$ + "fjQ]L1G];M\1L]6F]6Vik_aooD>kXV9ff\9n]E_D3;JS76<=3hLEfm;WVOUn"
    A$ = A$ + "#El#C^6:o?DjKMaEWFCR=[c_Q;`ZQcF]2]\QCh2:m7^i5>^`eLD6K`iC1;>c"
    A$ = A$ + "E7C5[jR;Pn0fFK#Uf7U7jW\fn9jnIi_TdX`b1ZU=db4LiUd`5>ImEfPYc_A;"
    A$ = A$ + "QK=bVjB`h2>=CheWClH0cG:a6fb5JI2]J5`iW\hHFN0]jTAfPC_`;N`Oj?mW"
    A$ = A$ + "Ng#a6fV3AR?P<27SkD^#ZNY>oAJh2hLIgi:KkPg_KI3>NQK=KFLXR=dXI8a6"
    A$ = A$ + "LjDD7?>m#<FGSf7U7::^#Rchh::mM\lhKdTS[IUR_L[9bH3>^`5CPa6NB^PR"
    A$ = A$ + "CdTOdMh2YnXJC^4=<Q=\A6O#UK`MH3ZLAfb6N2^PJME<>Ba6JbC1?7DN[fb6"
    A$ = A$ + "Lm3alcWd?R[3jjg7Won\i=GkW6OlHjSMj5f`6DaC=a7^[IKh2ZLEJd;PjRJh"
    A$ = A$ + "K9^`MZeXcSb6n#C>683K6_iR[BN]ibS`=D[]^QGZhA]N[RaeZ]AC^8=n2bRW"
    A$ = A$ + "fd?`GcEEiG\Q=P7GXWS_H1oiolOn;6_ngKh2]J6JRGL[KgZoXQ7O:G#Eo#gl"
    A$ = A$ + "HVNbd`aRJRoK^FO]mInjMBNeWb4Dj^JmIUiIRJ]NfcT]cg5gWCa5#VP;WQ6N"
    A$ = A$ + "`\OOJlN#]nHb[o4G0I3=LWVhgCF;M[g5Yk5>]J=jkIg3N:^#C]UDa8]iePkC"
    A$ = A$ + "Enk>o1H<QVLMJb3_InR:_25KP]^?nLEQiR=g6ZLAJh2=\0ggK0\o>b6HG[HN"
    A$ = A$ + "6XRWagSS;lJPn#^Q=XRW?U=\U;hd^a>WHNb\9_Pf?C3CXA3Fjh:YY2mV^YF6"
    A$ = A$ + "W`2JmkHciHR;db6`HKUW\]ek4cS#UC;kk#T6^0S=XF3IbVBn_S_nen2i2oUo"
    A$ = A$ + "bOiMS9K`]m>Y?0f6ghH3=NDTZMYb[f]LQD>CKh2\SWdfo4f3V_B3Oh4o=H_O"
    A$ = A$ + "7;k>LQ6oDEae:=3ZNi`i_0^NDR9Th28K`=oUU?AC>;<^`;N`Om_nGOgHb6L?"
    A$ = A$ + "3T<o6>eW0EL^kcScmEa3>fPK=j][;gb5BL]]JADJ2`]][Vf<n#:?PC7Y[SKi"
    A$ = A$ + "2:>T;g8UO7:=7>_FLL1W7oKh2^?3C3a6f0KkNa5^H28KPMlhl`KC]5f\f_:V"
    A$ = A$ + ":=Ha4>m>WZIOCN4]\#F<;j_hFMC\JFQW7YJQLRgW]\eii[R;<?f`mKRAXb32"
    A$ = A$ + "OogU;LYSWa5^R[DaF<VPKPl1fLO6K`YMAa5#f0NNXH3Zn]ZA?1KNLcWK;GPM"
    A$ = A$ + "\YRKKVGg47Td>Y>nCLQ4C`MNkddaRa>]F8=j\JHPZS9WfRC6=LQI^4:^`[[c"
    A$ = A$ + "8GPicO:oRiWMV[?^=HmVCb3N7GHV31S;`>GBj8DNlije`fHh=<Rdf=igGR;d"
    A$ = A$ + "\n8b6JcS2e<hfVY[M^ci6_7^[>Pg:^#keodXQ;XlNLF?27G0macY9WU_olcY"
    A$ = A$ + "f6HO6XZ;9ck3DCc5Gh_mgnKOaHb6H77X>26[`eg0Zl>DW3^?cVASVQCh2][M"
    A$ = A$ + "j6ZL:>iceb5#MV:_7DkcFM?^A:?2gejWT=L]]EiBXh2XW9>^0^6<CC>KPL1G"
    A$ = A$ + ">o\NRba7H\15GPa6fb:LeIYQ;hZijMh4^e>ghI#JM<fLgCh2^l?>Q=P_>FWK"
    A$ = A$ + "U7g=noXdZeXeSMMWYYh>ieh^?TH3_ULQ4KPEOP[HFWOP^H>dKDFn>>=3=3EN"
    A$ = A$ + "?Xg8YSC5?X]o]N[h2^iKCmWKV[N2GhYH3\i4^JTghocYSdifYNOLgLNNmnV\"
    A$ = A$ + "Qg:^P:Om[H8\G2V<QI\Zb?#V_38GXAc`Oo_ogOgHb6#]49]5:o8JlYda2Jlj"
    A$ = A$ + "LK^4Zl8Dj1>U;POfWD_PJKdb4L\QVLaBGgKmfQYA1O=U6=FmBf`5Dk;UO3Co"
    A$ = A$ + "5BLQ6O2Hj_I3eJh>MkZL:He\Ta5^H2Cf#kh4f06OWd8dh[ifiW:f0;n?iGeY"
    A$ = A$ + "<1WFmD^hc]ISV1FmcfT_g6_;f`BLN7[HfWb5LLIljm[]3fC3\jDbh2<MjgU="
    A$ = A$ + "PJ6BiTPiDXjW1WNQ;N`ohOl?Ng`a7`o^COTKnGkX]N7]L16oT=7<iiP;nWi_"
    A$ = A$ + "Pc3^iaiF^PR=`H^hl0fm4ElKR;X>O`S1fm:W75]jiLg7BNnhd<Pm9EjiS0Wg"
    A$ = A$ + "ZjW`=e3dmnO=DNEdD7DWO68GHb6^h0:=5>?7f`5^nk\okVjP^a33gLkTgH9O"
    A$ = A$ + "bHJ<IcgIaMZHRF=3ZcGL^jVJ;gb4B77Wh?a6N]:G?W^2T=<mc#eWhZNG0WcZ"
    A$ = A$ + "h2:o2DNlkh2=eg#m\?hlc0i2ocoiolM3T?Xbeh>L1<VGa3DlTdjH=NHhdLhb"
    A$ = A$ + "a#]V3ngEam>V`6f#;GXQcV^Vb^VUh2CMJKI2gQGS<1ec\1N=4miTa6N2^P;_"
    A$ = A$ + "l]no[RaMejTYaOnn^d3<I2Cf0C31;?35G#ecTZaVi`]c[EjCJF7;a5Li8lJX"
    A$ = A$ + "RYJbA_ImB6o1_6f`JEiCh^>gb5#M#?9G`U[WZWXCLQ;?6BKSVl8HmS0jg_C3"
    A$ = A$ + ">FSbDnk>N`d?PIM6D_GT;l_nGo;9O`i1a6O6f>fh;AJ^mMi2]<1LnBB_nC`5"
    A$ = A$ + "DLeC_>[N=5G#a4Ln8lEQN1egA<:^#3K9YIH3GXacOFM3MiNPk_ifH6;SK?lm"
    A$ = A$ + "Ma4VS6m3YJDP\QCeB\U?LBN4<__DN7Pl1E>4WT3CK^4YiUheFeekfk3Ki2>="
    A$ = A$ + "5\QbWU6_FBn;XH2=N<`H;Zlh^^7hlL<a5Di`[H3YaLkZFWW=DL17O8i7Y[g8"
    A$ = A$ + "KNFBVcIO2M3<O`Dc3CaU83PmgBikg`6La4hnB]FEjid9mL_hh2\[I^[[8C8i"
    A$ = A$ + "ADjN0SEkZ9AR9TH3Z_C9>Q;d4okRSCm?0cOCefDa9HLQomonOo^aMh3\lOHe"
    A$ = A$ + "]]I>\B?K3C8=74GK[E7[Jm<FLBCnlKR9Bc7_VCfD3[fWiU[Sk6ODCJQB<CV^"
    A$ = A$ + "T4O^EK1nID\hfJNbd7ZjOQ4G0[10;GnFOoLJ#VK7gnJb5^H2hPa7He`hjHai"
    A$ = A$ + "iIS^RDoimTL1flhT72>^P:Ok6^`<N`53PaG\eYL?cKZJKUh2^Sk4?XU9TbII"
    A$ = A$ + "k#Y?HSgB9fbllRa5DiakH2^AKn0=lWI\]jeNa0n?oWocG<H\QT62VOW<oAMm"
    A$ = A$ + "e1Kn:>gLCN4ckKco[KnlMW?ZH3]j5L<QF^#jjZZGEC\Q]nUdb5NB6dfA3G^U"
    A$ = A$ + "A_Q;XR5M[5WdCT6]k[[onT9\U?hH3\LNB\1U62eLYkj5aYcWf`5JVSWdQhdR"
    A$ = A$ + "`RgMGCE_fMlMX9fCa\CjCJh5Z]]khdaWEiXdZMCE;#6G#icGKM1Li8`RiMi6"
    A$ = A$ + "Xd:Xh2]N?Tl2Ae_G=lQ=e_8mjW^6TJnCBWJ[N47G0W;[lHHSNQFoNL?kE9mC"
    A$ = A$ + "ha=NnXH3Ke5Zh=:f0C33knKC>S:f`Cb5JdBXd4`lBL6kcH58?honOo_[I3C?"
    A$ = A$ + "7fn<HmT\QD=iN[i2:f#SGJ9M[Zie8KXIdh_SS=LM=\9gN7K4??fXek4^0SG]"
    A$ = A$ + "aoC7_ca6De8X9>N3KXicRan_RgWalHLoC`5JH3>^PK^lCa5f`4Dal9MVZhUd"
    A$ = A$ + "cRESWG\H:L=GGMPgDgBekY=Wl6O1O]MDihib=#Y1XQ;`^nah2^c76GPiePBg"
    A$ = A$ + "\cgaCI3KH;>^`<nGmgC7;\jY<I0YWaR9GXY^JKlD`UGlfehEaiYWU2FMfEmN"
    A$ = A$ + "Ccc\UC[nChoBb3P;^PR9hHJ\gO:G3U75>=M9=0Z[Mc]=N_[9o^ie:6KPeS1:"
    A$ = A$ + "o1>EkPkm`Z5Yb71Wo2Kh1H];KN>#fb5`jDXF;Aig];WH6GP]N1;>Gm\mbH7^"
    A$ = A$ + "Wm_f_G7D7o\HRk`4L[ojReEG;H_>N]?i?1V;7^=f`5H[kO7^#;K`eGR\hKG_"
    A$ = A$ + "4hd=XRGAO8_3CXYG;JO^#Ji2H>aCf`Vibce<A]09^#ZoKgVG#ji2Nkgi;=NR"
    A$ = A$ + "M2?P]FH:>Ca2CL1g#YWPUko6o4CL7fmo=e9bi3YjiCX]gRHL1U^3do_4o1mJ"
    A$ = A$ + "4mE`a4BmNeFV#R;`lRTYIXAo[J>5KM;5GXmInOnMmTjccH1^l<fhCIR?X^fi"
    A$ = A$ + "dWkN?>fPkHO;KH3GXe;Y]J6LL15K`mMc`9\Q[HdILY[_6Klm4mJlR;XH2]mP"
    A$ = A$ + "IccfQZF4Kh29=3Yl8Bc;Ei;XN>MLo^Yenm3I;_Ya?RF]3=i\g67mJhh2]iJi"
    A$ = A$ + "he\mSS=\iLkD=3Z[cC_KE\1F]:LmJPS9`NN7HaaZNO`ikPKO^mIkZQ;TNVZL"
    A$ = A$ + "eV`=?7mH8UG\B?L;C0SUM?g_^L5L?o>Wb6Li3XRKBn_XdId`5^>nfheJB;Wb"
    A$ = A$ + "7CllI3k3W;`V[\Q=`NnZ`L:Jd;<caWm<9PK;VFOl_QkGWo2HO9Tb5#mj^WAR"
    A$ = A$ + "VN[AeCN^lUEoMemJeJH:F#jg4Je[aH2hn=a6Hi[XfV:_eDnhe>LJkMN[dhES"
    A$ = A$ + "CkPKO`H8=an>?VBJ;Mlb4K#ekC_RiJI2^J0fj9hLhH3>^#ZGTBOgAhNf8D<0"
    A$ = A$ + "E?gMRGkZiE<^PCSPkg<nVO;iEL17KXIPKg=Nkcd<YdBQKgTg2>mAKmKEaKDj"
    A$ = A$ + ";>U;P\QdkUa8LiDXN^;_h2C=mZJ1Xlk7i<9NP;G66KHb5LlP]lQDojjN6;_C"
    A$ = A$ + "=iEcOMJ5`HDlgHm[omlobN?Y_SaJIB=\QfldE[;f>BeR`a6Dn\VH3>Vb6M3>"
    A$ = A$ + "M#YGOSW5<f0cW1GLIbg_fWiJG=4IiPP739^#COfbH58c`m\nl4<1FNd=iojl"
    A$ = A$ + "D0SiK7^l:DkOW>UTgW=i4O2CXMMldedTg\W\mH\f]i6UdCdDo6lmjd<hh2Ga"
    A$ = A$ + "UZn6XikUQ]LQiWSi1jea1V7QjiRfE7Q]J8L?3`Wb5`hPCI2Wb5Jh39=2g97U"
    A$ = A$ + "DLa6V`fA[o]]\QV]aYlQ4k`iE3SCTj[1G?>Yj]aVN8Ba6LJ=HmT9[?:_>6#o"
    A$ = A$ + "5B?c=<f`F_7BL1E]9ML1WNQVi^>^0nKF4ke`O[cD[kgb5Je;\9^Xe;fT_0^["
    A$ = A$ + "_]nT\A;eFf#:?[6oFO;d;XZeX[73Kb[Pa5LmH`lchjE:lk>1gJj<f0[n4^JE"
    A$ = A$ + "Xfn^Nb1i4<oeBcaKR;KRkI_6nkS:ZO85g_E_PR=hh5:VPkJER=LZO9hf\Mkh"
    A$ = A$ + "^6hl9i4=3Zl;DeUH6C`jQ1fJkZJ:\iiAP]OBmM4jgPjIXNb5L[YWZGkenDa5"
    A$ = A$ + "BiAd`5HllGgGKbG`53>i2H<oEL?SKLmj\OoTMiKThB=\Qfh3WFZ]a`W`6Jd1"
    A$ = A$ + "elIDJVN2f#[OS\n[cmLH?SIMm>X:_0Gm9Jn^BRmNO=Hm89Zi#]^^[g3Dmh5>"
    A$ = A$ + "DJ5JbQXU9La5BccLN2PoFWRalHl>kmL2K8i[A[WV=<P6=D9ODMiKd`QgVKeG"
    A$ = A$ + "ELQ4K0cM8mlBTH0\elMn9bH2Ho4affZnAbY;Q]_LO7ZPiAdLMPaJD?c`Ki2<"
    A$ = A$ + "VPJ>Vb_05Gh:6oGn;oU_KPJ6LLQ9O#a:Ll8TYhlcLK^oWfO69NPc?g6fPB35"
    A$ = A$ + "S=hh2<NiMmTDic8^>Y:FGa4Dm0UBOQ:gLE^lZnDL;oYYo3fb6Wi#TZ3a9J5V"
    A$ = A$ + "i9ScaJRmHi#<S]_h2CfPBCAJTlY#a6L[Mbh3>FPCcDC>??=GH3KJb5D\1lJ`"
    A$ = A$ + "MI3GceD<QIO;XlGcUO]:Fea3HaZ8K#E30Wg7cmGK?9i>6f`5LOoR\E[PR9Tl"
    A$ = A$ + "=0GkOb=`HIT;`d2\U;`6\G7SAKl1`iIafAb3dFV0KkihA\gkK9G8E[RGckLO"
    A$ = A$ + "OGe4GVdfO7VPZfP\oN:VeE[Pk`4`c?5G8e[B_U<1UGR>]2<f`C`5B_7gJgYL"
    A$ = A$ + "cMJBD\PfmK[W2Yhm=<:Vo:]iBXH3=ml4[NTcooDOoVZWoD_#K^39fPKogT_A"
    A$ = A$ + "R9hZ;9b3HNX>i2gU9PeLKb5JH2>^PbGQGSOa_hGl^A3KXa?BfnJ3K#Ye>Ugd"
    A$ = A$ + "faMHB^Hn6^UbS5FNC9fPc;B5GPi[0kI1Fe[_^HWTnnk`5JH6<6PR[YNF6HWo"
    A$ = A$ + "\JWZlf\U;`j]IV7S<mR>OmC[=ch2<V0b6DiFd<DjAJlS8U;^jL7ggWb6LlQ6"
    A$ = A$ + "^\knCca#K=I^VSLBM:BmdXR;hRUfb6HiCd`6f\OCL4GO>Zh29V`5G#E;RTN1"
    A$ = A$ + "67W]F#;Ch4^`5;hWocoiB^`<N^Q5TbCAaJJeKg`4Jd`\Eg`6ndF^`eWI^oKZ"
    A$ = A$ + "7CZNVYNLRECBfg5Q=NegfW`X7T]j6Lkg4?#ml?efkc:o<MmW5b5JI3=L1UFQ"
    A$ = A$ + "VHCgkIb5Na4^6>]3?1GP]=C\1UVmfSQFo#L\QD^3]an]L1d7b4OhYh2\jCZd"
    A$ = A$ + "IkNMW>oDn4:?8Ki2]eFXmLBa5LJ5NmNLLQDm8fb5NRiOche9CPa5VlQ=N;jl"
    A$ = A$ + "`PiSQC7n9jT`mM3K0IA>O>O;h2=\1fPe73=iBXh2\JBd\^ZR?`dkWjOAE>1Z"
    A$ = A$ + "hhCZ_#b_A5G8YEhjlAY7I[V16GH>_\I]Jl_eXEh3nP?h;6>^`9mg0CGBJK^="
    A$ = A$ + "g1fa#:g5W_9H\ICM5JHaKHCYNL`e7D]L1\W5B\1fJN\L?JNF4AokJZO0b6Hm"
    A$ = A$ + "VlGELQVWm;63[]^4\J7YZ3AcL<fkaa5N=VLQ6=3gQ9PkSF=3KSeDi]dhM2;f"
    A$ = A$ + "TMllD<QinWUoDJTjAb=n>Nj8a=DJ6Ji19m0=N6\e[46K`YGh4^#C]9A^0ZO5"
    A$ = A$ + "WSMJ?7PJj_;G`5cQ<1LodjYiVH\fj\db6>9OQdaFKn<=LRVNQREcBec?iY3E"
    A$ = A$ + "ole`6DnC^U;TbgYYn6WXI0kYYG__6]2=?34HmWHn:dXAN3G#5_VlH`aIVSYg"
    A$ = A$ + "59^PS?\Q7h>NBnZZR?_;?PMO[il^Q?PL1gc?AjI[>=JI3\o>S;\Id67kNF8_"
    A$ = A$ + ";KPiaPZ?[MJXJlD`e;C=<Q=L1Fm9Ki2<o2a]UJL]mOogomSLQILb9i7THDYc"
    A$ = A$ + "YF];gQ9\AW4S9<og9^`T=`d;dl<Ffb6Li?[j90\62gQ;PaQ]LQ6>1S;hZeJ:"
    A$ = A$ + "g[;^#cg[>C^0cCQW#[0;FN;G8]MBS9GHciQZ^6<NPSCUd<XRICom]<QF6Tcc"
    A$ = A$ + "C6KHfofhc#QR1hN]Cci0Of]MjiM\Q=J5fFge=j7fdgVW`5DN4ch2KbAm]V;<"
    A$ = A$ + "SS>U9Xh2=WG]i8hH2Ynd#a7D<S43XeCSCI3HO#aNV>H?OE=?g4>n#3?0OoHm"
    A$ = A$ + ";JI3Ke9\]O<>Yf4>oBOmnJH2:?6MeQ0mJlJ^dY<QWR;`Ro`HNU_2=L1GlIK^"
    A$ = A$ + "2=S=\QCd4\ilJK>;9^0fg5:f`Y<26K8mM6`YJ7Bn9Zlece3WWb4Dii`>NM<1"
    A$ = A$ + "7GPe[k\nHR=gc=_ZInZbC`I<C3SP5ggb5JR=InILJ^3g9WRVJ<L7^0Kdb6`n"
    A$ = A$ + "OBegfH_CfZM8EWc6O:#n#R=\a?AWGWKe;hjI;U>6eam9J5#F`TcS??>=iXZH"
    A$ = A$ + "3Ki2HLm9LQif8U;Acna5O]U9XHGZn]jYbIH;G8i[iT=`ji9EOGhd>hl3ga6J"
    A$ = A$ + "h8^nV#5_fdCE>O>gZGXQ9djCIjH=eCS^_[A^[WSKH2Ge9P5cdb4VK3fhe[O="
    A$ = A$ + "N:n`6^#3SBa5N:M2WZG`mj8K`mLXkH3^WGWVNUbmNVo=T=Pn>TH0=elK;G8e"
    A$ = A$ + "OgKh2GONllRYE0_FS<Qdc^k9\1E<4[fQHlZR=XRcDalh[a6KHA?QF1lhbika"
    A$ = A$ + "K1CXU?TldPU?1[?hVk;T=Xd<XReCSV__JM\QT60Gm#_3G0I3]l0Wo7Zc9gc<"
    A$ = A$ + "iT;dll2NWiT^Hj[HSgkmN_g=L\1gJ^YHoWT=L7?5D7_>M3chgWR7\Ek#B?1K"
    A$ = A$ + "^clhmjlIb6BNA^ik16leKN6?I\1GM=fDo3<VlDO7CmEASNQ=<1\^3Za6?3Je"
    A$ = A$ + "HcR=^h2>f`K5C#a5JI3?1GPM<dD_4ljLJlTLQTgTGcE`mo[o^:O2W>PVAZO\"
    A$ = A$ + "Anc9mOifjRZh2=maDZ_<MLQoO\;[%%h1"
    btemp$ = ""
    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 j = 1 TO LEN(B$)
            IF MID$(B$, j, 1) = "#" THEN
        MID$(B$, j) = "@": END IF: NEXT
        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
    btemp$ = _INFLATE$(btemp$, m.SIZE)
    _MEMPUT m, m.OFFSET, btemp$: _MEMFREE m
    BASIMAGE1& = _COPYIMAGE(v&): _FREEIMAGE v&
END FUNCTION

FUNCTION BASIMAGE2& 'witch.png
    v& = _NEWIMAGE(100, 96, 32)
    DIM m AS _MEM: m = _MEMIMAGE(v&)
    A$ = ""
    A$ = A$ + "haIkMV\Bc4447?7mP??NcCRGl5#?XRXX8j11AAa=R8^P;h2^S2^7#Aa3NaK2"
    A$ = A$ + "nDhIO7lJomm_CjhT9Cb<IVNjZ<CMh767UTdeoYk^ZZ[^WLiEib98888THFMe"
    A$ = A$ + "EEGNiUZc>k<=hehJK^iVJXnkGF0H_Q]OQ5FhoG8GMIWMfA]hR;:jB:aXS>JX"
    A$ = A$ + "J#md5Y?Sm0S557]`?mfK_R^`8m``<c<SFC`HOH<#ZKOo5a<?]OVJZYDOla79"
    A$ = A$ + "BOFNiUEgOomR^H9Nla7EaMn53_mfKJ=9OnlR^H9#o5<7Q=VWQjfBc4f#C`k3"
    A$ = A$ + "6;TjfBc2FAC:Y;[_njR^H1#\7fbW\a6K<eMgMWFGfMgM3dgR`0nbMk]gVIeF"
    A$ = A$ + "MliFd?iK^iVRfb4nn0o\Yffd<d7aJ`0k2UPh;8G3:Qnk23\9T3QJ`:[\RF3T"
    A$ = A$ + "HKXG?THIZV17L#WZ18G1VeRQjf>gX[^jbij0e]I^BBcYEDY]fJ;C7GADHXQ6"
    A$ = A$ + "b9JaLc=WJ_mfCdRj`6K\QCd2=<XmbIRbJ[Kki<dS;bPf>k`QjPGJ]eF5m`38"
    A$ = A$ + "o[DWG4MoB6H;X6[UGM;PnN26HCX2MlF<#7lR^f;HP]QUjAnR[aWY^7NomgCM"
    A$ = A$ + "m8;W;MSVH\gj[Eb^<a4CDQMiR;^#eIWM:jQSY#Q2:Pg[ISJ2:8VLb9EC?mdZ"
    A$ = A$ + ":RgQ1f0>CJ>O?dM\>^Dg6i<GMeE:`lc?_2SA5GK=lE:<]DWC66dVi8WNjYaf"
    A$ = A$ + "f74VJS7o\Naf8iD?HniWOdm;\UNhe>OmeGG<?jRN4Idm?`[]PFHZgJo0=YRL"
    A$ = A$ + "hcPf=ga6cOkgo<oHl]^lm02YZN#MKXI1KiKkQ7NXX990oaVWDTH\3Wc?oL]="
    A$ = A$ + "b<f>^76f]dHMI5mXbJ53_foNPZlo[U]m1AF>7]0K_o0C2XOX>^N6HG4mXXN\"
    A$ = A$ + "eFKUYe3>E_c0T;H\W4Yf^#5mdC?Za7OLbe1_8e<RkZQ]X2bKRaO>hSQ>oH<`"
    A$ = A$ + ">iBX^>A2SdNm>>iTCD7MdAj?Sbk7;RQKcWD5ioMMi3RJe^<oM\f<V[QGK^>j"
    A$ = A$ + "32OKVMfI;oIa5=9ZWS?L4ciTB]FKo6Q`ZCKoWkD1ank_O5_7VcGWJAm6GVmm"
    A$ = A$ + "EBA2[N^ZeJbH3NjYW2<?NjhfIP]9]1i^7aQj=g4Q=6R;RK3OW<SYR?cQ7NHb"
    A$ = A$ + "]EF3?fB<6RIl4lkH_]Sk9KTadMMLdMdA7dK3S9X6PlN_n17L#Z<_\[fcAoEI"
    A$ = A$ + "P168e\me2_Wo3K_mfZ?olCb]3L0X5nmUQ2#MH^dB;A^mPJhB]V<b8S#^]P3#"
    A$ = A$ + "UNlmgOGnl7\onkWLk07PZeL7af]fJ[YJ_mf9g6`9XB?<m=diEQ1f1>0b?b3?"
    A$ = A$ + "l0YcM8SCm;DOna5glVPLSmlc?[NmeG9g6J;dkm32e2#DggNX?<F?7<fZYV=P"
    A$ = A$ + "?j`ghFJY5b]UF1Re2_JBLcI[I>8XA8W27Ola>]NN\5IQj#YZJ8WahMMUJfQk"
    A$ = A$ + "JBFX_QG#mfT6k1CKY5Q]W4J61[A3gdT\ni_7b5`;_l2ijPX5o27jW8e7GUX["
    A$ = A$ + "A3Rd2i<c=HXh\lAjGDK#><ek;77Y5MgMgRFD7POV^B?j[_n4]84LAm]PaWbj"
    A$ = A$ + "W[HLA?Ti:J<B[jSDNFN6O\MN]THlB>fhl>6aG:?_^\3je;91JQllOdn4ga]T"
    A$ = A$ + "cc]dS6Jo6V_dI9>3nNg\BDmoEVcf=4Vo_bc75gBmZc59f>gC#?_7oj[_Zj\#"
    A$ = A$ + "F`Qh[?1GfO`IA#MLIfoMbIjVPPPPPPPP#S`o0XLK%%h1"
    btemp$ = ""
    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 j = 1 TO LEN(B$)
            IF MID$(B$, j, 1) = "#" THEN
        MID$(B$, j) = "@": END IF: NEXT
        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
    btemp$ = _INFLATE$(btemp$, m.SIZE)
    _MEMPUT m, m.OFFSET, btemp$: _MEMFREE m
    BASIMAGE2& = _COPYIMAGE(v&): _FREEIMAGE v&
END FUNCTION

Print this item

  DOW - Happy Birthday, Merry Christmas, When?
Posted by: TarotRedhand - 05-22-2022, 05:14 PM - Forum: Programs - Replies (5)

Just a small program for finding out what day of the week an event occurred/will occur on. Choose from Birthday, Western Christmas Day or any random day you choose. Unlike the other stuff I've posted on here to date, this is a fresh build. It Uses a tiny (edited) portion of the Time utility I posted recently. FWIW error trapping the INPUTs was a pain.

WhatDay.BAS

Code: (Select All)
Const TRUE% = -1
Const FALSE% = 0

Dim Choice$, AYear%, AMonth%, ADay%, DayNumber%, OutString$, YearPrompt$
Print
Print "What date do you want to know the day of the week for?"
Print "Your Birthday, Western Christmas Day or some other date?"
Print "The year chosen must be be between 1900 and 2099 inclusive."
Print
Print "Choose 'B', 'C' or 'O'"
Print
Do
    Choice$ = UCase$(InKey$)
Loop Until ((Choice$ = "B") Or (Choice$ = "C") Or (Choice$ = "O"))
Print
Print
If Choice$ = "C" Then
    YearPrompt$ = "Which Year's Christmas are you interested in? (In #### format) -> "
    Do
        Print YearPrompt$;
        Input AYear%
        If ((AYear% < 1900) Or (AYear% > 2099)) Then
            Print
            Print "Sorry, but that year is outside the scope of this program."
            Print
        End If
    Loop Until ((AYear% >= 1900) And (AYear% <= 2099))
    DayNumber% = DayOfWeek%(AYear%, 12, 25)
    OutString$ = "In " + LTrim$(Str$(AYear%)) + " Christmas Day fell/will fall on a "
    Print
    Print
Else
    If Choice$ = "B" Then
        YearPrompt$ = "Which Year's Birthday are you interested in? (In #### format) -> "
    Else
        YearPrompt$ = "Which particular Year's Date are you interested in? (In #### format) -> "
    End If
    Do
        Print YearPrompt$;
        Input AYear%
        If ((AYear% < 1900) Or (AYear% > 2099)) Then
            Print
            Print "Sorry, but that year is outside the scope of this program."
            Print
        End If
    Loop Until ((AYear% >= 1900) And (AYear% <= 2099))
    Do
        Input "And the Month Number? (1 to 12) ", AMonth%
        If ((AMonth% < 1) Or (AMonth% > 12)) Then
            Print
            Print "Sorry, but that Month does not exist."
            Print
        End If
    Loop Until ((AMonth% > 0) And (AMonth% < 13))
    Do
        Do
            Input "And finally the Day Number? (1 to 31) ", ADay%
            If ((ADay% < 1) Or (ADay% > 31)) Then
                Print
                Print "Sorry, but that Day does not exist."
                Print
            End If
        Loop Until ((ADay% >= 1) And (ADay% <= 31))
    Loop Until (DayMonthMatch%(AYear%, AMonth%, ADay%) = TRUE%)
    DayNumber% = DayOfWeek%(AYear%, AMonth%, ADay%)
    Print
    Print
    If Choice$ = "B" Then
        OutString$ = "In " + LTrim$(Str$(AYear%)) + " Your Birthday fell/will fall on a "
    Else
        OutString$ = "The " + LTrim$(Str$(ADay%)) + Suffix$(ADay%) + " of " + StringMonth$(AMonth%) + " in " + LTrim$(Str$(AYear%)) + ", is/was on a "
    End If
End If
Print OutString$ + StringWeekDay$(DayNumber%) + "."
End

Function DayMonthMatch% (Year%, Month%, Day%)
    Dim IsValid%
    Select Case Month%
        Case 1, 3, 5, 7, 8, 10, 12
            IsValid% = TRUE%
        Case 2
            If ((((Year% Mod 400) = 0) And (Day% > 29)) Or (((Year% Mod 4) = 0) And ((Year% Mod 100) <> 0) And (Day% > 29))) Then
                IsValid% = FALSE%
            ElseIf Day% > 28 Then
                IsValid% = FALSE%
            Else
                IsValid% = TRUE%
            End If
        Case 4, 6, 9, 11
            If Day% > 30 Then
                IsValid% = FALSE%
            Else
                IsValid% = TRUE%
            End If
    End Select
    DayMonthMatch% = IsValid%
End Function

Function DayOfWeek% (Year%, Month%, Day%)
    Dim Year$, Code%
    Year$ = Str$(Year%)
    Code% = Val(Right$(Year$, 2))
    Code% = (Code% + (Code% \ 4)) Mod 7
    Code% = Code% + Val(Mid$("033614625035", Month%, 1))
    If (Year% >= 2000) Then
        Code% = Code% + 6
    End If
    If (((Year% Mod 400) = 0) And (Month% > 2)) Then
        Code% = Code% + 1
    ElseIf (((Year% Mod 4) = 0) And ((Year% Mod 100) <> 0) And (Month% > 2)) Then
        Code% = Code% + 1
    End If
    Code% = Code% + Day%
    DayOfWeek% = 1 + (Code% Mod 7)
End Function

Function StringWeekDay$ (DayCode%)
    Dim DayString$
    Select Case DayCode%
        Case 1
            DayString$ = "Sunday"
        Case 2
            DayString$ = "Monday"
        Case 3
            DayString$ = "Tuesday"
        Case 4
            DayString$ = "Wednesday"
        Case 5
            DayString$ = "Thursday"
        Case 6
            DayString$ = "Friday"
        Case 7
            DayString$ = "Saturday"
    End Select
    StringWeekDay$ = DayString$
End Function

Function StringMonth$ (MonthCode%)
    Dim MonthString$
    Select Case MonthCode%
        Case 1
            MonthString$ = "January"
        Case 2
            MonthString$ = "February"
        Case 3
            MonthString$ = "March"
        Case 4
            MonthString$ = "April"
        Case 5
            MonthString$ = "May"
        Case 6
            MonthString$ = "June"
        Case 7
            MonthString$ = "July"
        Case 8
            MonthString$ = "August"
        Case 9
            MonthString$ = "September"
        Case 10
            MonthString$ = "October"
        Case 11
            MonthString$ = "November"
        Case 12
            MonthString$ = "December"
    End Select
    StringMonth$ = MonthString$
End Function

Function Suffix$ (MonthDay%)
    Dim TempString$
    If ((MonthDay% > 3) And (MonthDay% < 21)) Then
        TempString$ = "th"
    Else
        TempMonthDay% = MonthDay% Mod 10
        Select Case TempMonthDay%
            Case 0
                TempString$ = "th"
            Case 1
                TempString$ = "st"
            Case 2
                TempString$ = "nd"
            Case 3
                TempString$ = "rd"
            Case Else
                TempString$ = "th"
        End Select
    End If
    Suffix$ = TempString$
End Function

Have fun.

TR

Print this item

  Image fitment sub
Posted by: OldMoses - 05-22-2022, 04:01 PM - Forum: Utilities - No Replies

Here's a rehash of a little SUB I use when I have unpredictable sized, or aspect ratio'ed images to place in a predefined area. I call it Image_Resize. With the parameters, set a window area, identify source and destination, then set justifications (up, down, left, right, center). It does all the _PUTIMAGE figuring and then puts it, sized for best fit to the area.

A rehash because I originally posted it in the old forum, but I spruced up the example/demo code. Adding an image nesting and a swelling routine. The SUB itself has some of that cryptic looking branchless code, which was able to remove around 16 lines of SELECT CASE stuff, but I'm insufferably proud of that and haven't been able to break it yet. Blush 

While it doesn't do rotations, there's always Rotozoom'ing to a temporary handle for that and I saw no reason to try and reinvent that wheel.

Code: (Select All)
'Size and justify an image to fit in a predefined space using branchless equations. by OldMoses

_TITLE "Image Sizing demo #2"
SCREEN _NEWIMAGE(1024, 512, 32)
DO: LOOP UNTIL _SCREENEXISTS
_SCREENMOVE 5, 5

lim& = &H01011111 '                                             phantom line style
c~& = &H7FFFFFFF '                                              phantom line color
_PRINTMODE _KEEPBACKGROUND

'create test patterns, one wider & one taller (comment out if using your own images)
W& = _NEWIMAGE(750, 480, 32)
_DEST W&
COLOR , &HFFFF0000
CLS
FOR x = 100 TO 90 STEP -1
    CIRCLE (150, 240), x, &HFF0000FF
    CIRCLE (375, 240), x, &HFF0000FF
    CIRCLE (600, 240), x, &HFF0000FF
NEXT x

T& = _NEWIMAGE(480, 750, 32)
_DEST T&
COLOR , &HFF008000
CLS
FOR x = 1 TO 10
    LINE (100 + x, 100 + x)-(380 - x, 380 - x), &HFFFF0000, B
    LINE (100 + x, 470 + x)-(380 - x, 650 - x), &HFFFF0000, B
NEXT x
_PRINTSTRING (120, 120), "||||||||"
_PRINTSTRING (120, 490), "________"

'Or load images of your choosing in lieu of test patterns, and comment out the above patterns
'W& = _LOADIMAGE("", 32)
'T& = _LOADIMAGE("", 32)

_DEST 0

CLS
x% = 400: y% = 20: x1% = 650: y1% = 300 '                       use predetermined part of the screen (400, 20)-(650, 300)
LINE (x%, y%)-(x1%, y1%), c~&, B , lim& '                       show target area
Image_Resize x%, y%, x1%, y1%, W&, 0, "c", "u" '                justify up, wide image
_PRINTSTRING (0, 512 - 32), "area=(400, 20)-(650, 300) wide image, top justified (any key to continue)"
_PRINTSTRING (0, 512 - 16), "Syntax: Image_Resize 400, 20, 650, 300, W&, 0, " + CHR$(34) + "c" + CHR$(34) + ", " + CHR$(34) + "u" + CHR$(34)
SLEEP

CLS
LINE (x%, y%)-(x1%, y1%), c~&, B , lim& '                       show target area
Image_Resize x%, y%, x1%, y1%, T&, 0, "r", "c" '                justify right, tall image
_PRINTSTRING (0, 512 - 32), "area=(400, 20)-(650, 300) tall image, right justified (any key to continue)"
_PRINTSTRING (0, 512 - 16), "Syntax: Image_Resize 400, 20, 650, 300, T&, 0, " + CHR$(34) + "r" + CHR$(34) + ", " + CHR$(34) + "c" + CHR$(34)
SLEEP

CLS
x% = 0: y% = 0: x1% = _WIDTH - 1: y1% = _HEIGHT - 1 '           use full screen
Image_Resize x%, y%, x1%, y1%, W&, 0, "c", "u" '                justify up, wide image
_PRINTSTRING (0, 512 - 32), "area=full screen, wide image, top justified (any key to continue)"
_PRINTSTRING (0, 512 - 16), "Syntax: Image_Resize 0, 0, _WIDTH - 1, _HEIGHT - 1, W&, 0, " + CHR$(34) + "c" + CHR$(34) + ", " + CHR$(34) + "u" + CHR$(34)
SLEEP

CLS
Image_Resize x%, y%, x1%, y1%, T&, 0, "l", "c" '                justify left, tall image
_PRINTSTRING (400, 512 - 32), "area=full screen, tall image, left justified (any key to continue)"
_PRINTSTRING (400, 512 - 16), "Syntax: Image_Resize 0, 0, _WIDTH - 1, _HEIGHT - 1, T&, 0, " + CHR$(34) + "l" + CHR$(34) + ", " + CHR$(34) + "c" + CHR$(34)
SLEEP

CLS
Image_Resize x%, y%, x1%, y1%, W&, 0, "c", "d" '                justify down, wide image
_PRINTSTRING (0, 512 - 32), "area=full screen, wide image, bottom justified (any key to continue)"
_PRINTSTRING (0, 512 - 16), "Syntax: Image_Resize 0, 0, _WIDTH - 1, _HEIGHT - 1, W&, 0, " + CHR$(34) + "c" + CHR$(34) + ", " + CHR$(34) + "d" + CHR$(34)
SLEEP

CLS
x% = 25: y% = 450: x1% = 250: y1% = 512 '                       use predetermined part of the screen (25, 450)-(250, 580)
LINE (x%, y%)-(x1%, y1%), c~&, B , lim& '                       show target area
Image_Resize x%, y%, x1%, y1%, W&, 0, "c", "c" '                justify center, wide image
_PRINTSTRING (0, 0), "area=(25, 450)-(250, 512) wide image, center justified (any key to continue)"
_PRINTSTRING (0, 16), "Syntax: Image_Resize 25, 450, 250, 512, W&, 0, " + CHR$(34) + "c" + CHR$(34) + ", " + CHR$(34) + "c" + CHR$(34)
SLEEP

CLS
LINE (x%, y%)-(x1%, y1%), c~&, B , lim& '                       show target area
Image_Resize x%, y%, x1%, y1%, T&, 0, "c", "c" '                justify center, tall image
_PRINTSTRING (0, 0), "area=(25, 450)-(250, 512) tall image, center justified (any key to continue)"
_PRINTSTRING (0, 16), "Syntax: Image_Resize 25, 450, 250, 512, T&, 0, " + CHR$(34) + "c" + CHR$(34) + ", " + CHR$(34) + "c" + CHR$(34)
SLEEP

'nesting sub images in others
CLS
tmp& = _COPYIMAGE(T&)
_DEST tmp&
LINE (_SHR(_WIDTH(tmp&), 1), 0)-(_WIDTH(tmp&) - 1, _SHR(_HEIGHT(tmp&), 1)), c~&, B , lim&
Image_Resize _SHR(_WIDTH(tmp&), 1), 0, _WIDTH(tmp&) - 1, _SHR(_HEIGHT(tmp&), 1), W&, tmp&, "c", "c"
_DEST 0
Image_Resize 0, 0, 1024, 512, tmp&, 0, "r", "c"
_FREEIMAGE tmp&
_PRINTSTRING (0, 0), "area=full screen, wide image IN tall image, right justified (any key to continue)"
_PRINTSTRING (0, 16), "Example code:"
_PRINTSTRING (0, 32), "tmp& = _COPYIMAGE(T&)"
_PRINTSTRING (0, 48), "_DEST tmp&"
_PRINTSTRING (0, 64), "Image_Resize _SHR(_WIDTH(tmp&), 1), 0, _WIDTH(tmp&) - 1, _SHR(_HEIGHT(tmp&), 1), W&, tmp&, " + CHR$(34) + "c" + CHR$(34) + ", " + CHR$(34) + "c" + CHR$(34)
_PRINTSTRING (0, 80), "_DEST 0"
_PRINTSTRING (0, 96), "Image_Resize 0, 0, 1024, 512, tmp&, 0, " + CHR$(34) + "r" + CHR$(34) + ", " + CHR$(34) + "c" + CHR$(34)
_PRINTSTRING (0, 112), "_FREEIMAGE tmp&"
SLEEP

'expanding and moving an image around the screen
FOR swell% = 0 TO 256
    CLS
    Image_Resize swell%, swell%, swell% * 2, swell% * 2, W&, 0, "c", "u"
    _LIMIT 100
    _DISPLAY
NEXT swell%
_PRINTSTRING (0, 0), "Example code:"
_PRINTSTRING (0, 16), "FOR swell% = 0 TO 256"
_PRINTSTRING (0, 32), "    CLS"
_PRINTSTRING (0, 48), "    Image_Resize swell%, swell%, swell% * 2, swell% * 2, W&, 0, " + CHR$(34) + "c" + CHR$(34) + ", " + CHR$(34) + "u" + CHR$(34)
_PRINTSTRING (0, 64), "    _LIMIT 100"
_PRINTSTRING (0, 80), "    _DISPLAY"
_PRINTSTRING (0, 96), "NEXT swell%"

'and you get the idea...

END

SUB Image_Resize (xpos AS INTEGER, ypos AS INTEGER, xlim AS INTEGER, ylim AS INTEGER, i AS LONG, d AS LONG, xj AS STRING, yj AS STRING)

    'Syntax: upper left x, upper left y, lower right x, lower right y, image handle, destination handle, horizontal justification, vertical justification
    'horizontal justifications= "l" left, "c" center, "r" right
    'vertical justifications= "u" up, "c" center, "d" down
    DIM AS INTEGER xs, ys, xp, yp, xl, yl
    DIM AS SINGLE rt, xrt, yrt
    xrt = (xlim - xpos) / _WIDTH(i) '                           width of area divided by width of image
    yrt = (ylim - ypos) / _HEIGHT(i) '                          height of area divided by height of image
    rt = -xrt * (xrt < yrt) - yrt * (yrt <= xrt) '              pick the smaller of the two ratios to fit area
    xs = _WIDTH(i) * rt '                                       final image size ratio in x
    ys = _HEIGHT(i) * rt '                                      final image size ratio in y

    xp = -xpos * (xj = "l") - (_SHR(xlim - xpos, 1) + xpos - _SHR(xs, 1)) * (xj = "c") - (xlim - xs) * (xj = "r")
    xl = xp + xs
    yp = -ypos * (yj = "u") - (_SHR(ylim - ypos, 1) + ypos - _SHR(ys, 1)) * (yj = "c") - (ylim - ys) * (yj = "d")
    yl = yp + ys
    _PUTIMAGE (xp, yp)-(xl, yl), i, d

END SUB 'Image_Resize

Print this item

  Upcoming enhancement/changes to QB64 IDE Help
Posted by: SMcNeill - 05-22-2022, 03:06 PM - Forum: General Discussion - No Replies

Some upcoming changes for the IDE help menu, which I wanted to point out for folks, that are coming soon(tm) to the Phoenix Edition.

   

The screenshot on the left is the old version; the version on the right is our upcoming alterations.  I won't waste time trying to spell out all the two changes in those two pictures, so I'll leave it to you guys to play a game of "What's different between these two images."  

Needless to say, I personally think the new version on the right looks a whole lot cleaner, neater, and more functional!   Three cheers for @RhoSigma for his work on pushing these changes into the language.  All the credit for the wiki/help update here goes completely to him!  Big Grin

Print this item

  MemWave - Play WAV audio from string memory using Win API
Posted by: Dav - 05-22-2022, 02:07 PM - Forum: Dav - Replies (1)

MemWave uses a Windows API call to play a WAV file loaded as a string.  This way you can include small sounds directly in BAS code and play them from string memory, not from an external file.  The example code posted will play a howling WAV sound.  I used BASFILE to convert the WAV file into string data here, but you can use whatever method you want - the main thing here is the way of calling the API.  

- Dav

 - THIS CODE IS FOR WINDOWS ONLY -
Code: (Select All)
'============
'MEMWAVE.BAS
'============
'Plays a WAV file from memory (string) using Win API call.
'Coded by Dav, MAY/2022

DECLARE DYNAMIC LIBRARY "winmm"
    FUNCTION PlaySoundA& (lpszName AS STRING, BYVAL hModule AS LONG, BYVAL dwFlags AS LONG)
END DECLARE

CONST SND_APPLICATION = 128 '  look for application specific association
CONST SND_ALIAS = 65536 '  name is a WIN.INI [sounds] entry
CONST SND_ALIAS_ID = 1114112 '  name is a WIN.INI [sounds] entry identifier
CONST SND_ASYNC = 1 '  play asynchronously
CONST SND_FILENAME = 131072 '  name is a file name
CONST SND_LOOP = 8 '  loop the sound until next PlaySound
CONST SND_MEMORY = 4 '  lpszSoundName points to a memory file
CONST SND_NODEFAULT = 2 '  silence not default, if sound not found
CONST SND_NOSTOP = 16 '  don't stop any currently playing sound
CONST SND_NOWAIT = 8192 '  don't wait if the driver is busy
CONST SND_PURGE = 64 '  purge non-static events for task
CONST SND_RESOURCE = 262148 '  name is a resource name or atom
CONST SND_SYNC = 0 '  play synchronously (default)

wav$ = Basfile$ 'load wav data string

PRINT "Playing wave file from memory."
PRINT
PRINT "Press any key to stop sound and exit...."

'Play a sound from memory data...looping it...
x& = PlaySoundA(wav$, 0, SND_MEMORY OR SND_ASYNC OR SND_LOOP)

SLEEP

x& = PlaySoundA(CHR$(0), 0, SND_MEMORY) '<<<--- stop sound



FUNCTION Basfile$ () 'Coyote howl .WAV file converted with BASFILE.BAS
    A$ = ""
    A$ = A$ + "haIYkm7JKTWUWInWSUSMhfKHPUIPMXWVIXkVdTVdQ4L2f47\g4\=FHK\>IS4"
    A$ = A$ + "FJUF9T4B89:AE5EAm;ZRZ:Z2E29T4B8QT#2;S=f6K\3fT#B8QT#29Q4BXkVd"
    A$ = A$ + "\c`d<m#?LkO];km77L7L__O[Bo`fYgM^kDCCWnE_jm[_O[gkckkkKFJVKNco"
    A$ = A$ + "n[N^cii6ognkST<k7mgL^cM^O2l?oG?oi`ok?iLoEWkOlO8ko`_6hAloon9L"
    A$ = A$ + "bO>DUTLN6_c_Q?E2mCdn9L>?biMTTUUA?3N0lKdW8;[X8SN27;;;lX1jAFAE"
    A$ = A$ + "CCEFPSUVVVQC#BAEA6T^X\VQUUY2Gfd9SW8=UPVEaRiDhIhT=;g\E=3ZP;iJ"
    A$ = A$ + ">GNC:F\E_NediXHeK\ka7]QAhKlIOd7o5c4gJ[kmX3KZBC[gmn_n]?\NlanI"
    A$ = A$ + "WkLo\[4`Lg7oh3KZc;FLWWl^gm`Ja^b?kWlCniS5:g^goNkDECD[n1_h[Oc]"
    A$ = A$ + "=GmloW?goY?jFI:_c]gOm:i;fjPWme_m^UR>aOgOm?mSVH=f2=KgXJm^koXG"
    A$ = A$ + "oE_l`2a_iWm;oUOb4NB:JV_HU>kLgWmfgnX=D3?cEnl;LUKj>LJ6YL=gkQ_j"
    A$ = A$ + "[NcSfb:[o5_e=6oJS?U;_a5ZNh;NoOhm?KgR\9S69`bghROjWMUiRWOoGnko"
    A$ = A$ + "ngoPf:4YYTdhSLc?mGngm5;`dkiOgOnK_G5Z8A9E]<i3Oc;Nn[jV\jQ?me?k"
    A$ = A$ + "PJZl2BBL4QGJjK<O8fl=Jg^A9[2ej]mjUHl=eHC\DJcV]:9ATP#Mm7m^G^Sh"
    A$ = A$ + "RGjcWH=YVmZ#_j\;6?oaOcOleMBM[aVL=aZ=dSL[[=MhR?lknc_^Nli_YKb:"
    A$ = A$ + "M;C<kWOnKTXicoSOgm=3_\?VV7\K^EnToVOah4KmEo`Gg;c2c6:oa_l1E3Na"
    A$ = A$ + "Oa_j6TmNbCgTggRn5glI_j0aIo]OdeB^n[nWNTiBGhCV<C_GmnkKjn;_h2B7"
    A$ = A$ + "lEOcA:^7kB^hjMgm=l>nHcC_mgl?o]KA>gE^fZbMfZJf5_a]2XO`KnZkE>KP"
    A$ = A$ + "ebT[M;=oSmK>o\dKm^odkjAiN6?LmN`mJVNj;LQIbfn1?mPlYmi;SejKgPem"
    A$ = A$ + "4Gg3Gg7oZSc5Lj[=OVZ7Lkf<;>aeMcfkY_maMhl=o21Id<4Bjc38g=>nX^jI"
    A$ = A$ + "S6QD_BESD;<nhcWZjmNgKfC9`Lc7BMSkNkJIVoZGM1b6gia7F8e:;iW^lf7^"
    A$ = A$ + "A^<nF92OiekF8[WIV;P#c3PmP9FMeDFkmT7]9W[?oS_hb2m^g3ge:5#\`n?n"
    A$ = A$ + "AK[^fe_hELUbXA[bJ<4TbEgih3J:5IQK=WgdB66ZRl\\BF=gHSFFL92heGXT"
    A$ = A$ + "T\R`7#::j5ZeZII=jh1l7>5]TVR0MF2JUR]F_K5ah[^TWX\VU[EBS=C:BAS2"
    A$ = A$ + "U:J8T9LP#9Id:E_NeR6:RLdTTDDd\`GPPF4e;D^LA;MINZd9BT<3UPAa:5ei"
    A$ = A$ + "Y8I4e<d1fIHHiUDeeeP?Oi8CU891SP\ZV^I>[REZEaB<CHO[^Fhd\bZ`Ga2:"
    A$ = A$ + "Fej\NW:j<YR4:JB2::b\IYhT=bG8_YV\Mb6Df1hOIXYXXHh5aI5hUd<cWg#V"
    A$ = A$ + "SRPPT5f6;0i3H5ebIUCCPV8340DE1cQUUGa8WY:b_cb:29;ThIi#FTVR8;59"
    A$ = A$ + "5[P<>O2?lO=<1Mbc#3:1RMB2P3cQBlPB2a9Z2?65#PoX\VZ4;IjDIX4ecG<_"
    A$ = A$ + "^83fb4iI#V?B=Z#b;AI8>X`CU9=1ST>H4`O<39_:\RaU=EbddBV5:TC5Y#15"
    A$ = A$ + "MMEAFb\T\BJ66J#n=8>:2I7iAaO>PXY1:N8:QT=X72DH2RZV#P6UC4L1V\YC"
    A$ = A$ + "U>;4^ed=de0_2R0BP=AC1RPV3iPPXAn5TY5U#6WdE#2UZe9o<oYc[;:iTe7R"
    A$ = A$ + "1<#2GFL6G#`X4g`?1Ho1A628<Z0BGG3ig2LXTf#83Ue6T>bL`fLFBJnni[U`"
    A$ = A$ + "TaKH#IaAB2N5`UA?G2iXXo4#52]hllh:5h:0bb`FAJlVBl^LK;AL#a2#_hG7"
    A$ = A$ + ";7T[8IG81I?fUR`Ba^`SS?kDWZOi=k#SXS[fW\C03;KWbClHODdA?HMRHS7E"
    A$ = A$ + "2c^Xg`#i`2XXMdfV3Z0HoBZX#<jc7l:BOaS[JbI7<kC^?of6oP:`3=OK]HGQ"
    A$ = A$ + "M0IW:_B3n9:N2I8egH`UY?Aik1Uf?K]oAnOi?93SnBWaok7d57J:H:3G;`L>"
    A$ = A$ + "b>#7J>6TmB=:BQ=IDeOdG=<D`WihTEhg6n0dd:?T^2BC0OK0I:ha_>\Wd<OY"
    A$ = A$ + "b5=5YB5;D`XIh#91T44TecG6:CWG8EPEF`UWX<6UZE]PV0_Jaf0HQNJQWnRO"
    A$ = A$ + "b_iBcCDJcmfZA>AN]Vgni_mUk[kmBoROj?ocMAFKgK_CCCAQL[oPgmnG^9k\"
    A$ = A$ + "OlOmOe_H<o:MfKg>5D4=JNd[NoK?b:`UoKoYolc?KL]jMKGab\#[mOb[OaAU"
    A$ = A$ + "ROSOkOk_lcV:0S9HLi;gN_7lbGodM=SN[_hglK_d]lUREF;GUe?hQ_l=?oXj"
    A$ = A$ + "\nWKRa^jTci9#\<LFM?jY_mM_h>]DB7`mLC=a4C>cB1bXgihWmfgmlKGG6bg"
    A$ = A$ + "4?TWKM];MUYmBGkhglkoM_JoR\#jidYChOQ97OJ?Y<ghQ_60KDD6]eT9Qk9_"
    A$ = A$ + "lEW9X#S3NdC^o>e=P4XTddIS]f:[j?6]FaJ=JfNm=je^THhI6kbCiS]bVk]I"
    A$ = A$ + "=EbDI4:\nnkge8a2GoJgLeTL:jVi[^nN7Ok>B1Vi6c6BZn6=UFKZaVd[bnOk"
    A$ = A$ + "ofob[J4OZ;NiKi?==lQ>WNm]fKmLTaRcDH[S?\L`;ncn_lKL9OlgoojOi9im"
    A$ = A$ + "?mD[#FXI5e<1G;:[ANEbX1RbGohGmZMIVnSniObbiNlomoegE?l4GhZ[`gHW"
    A$ = A$ + "]ZYaaKDYIIne^eeW=NYknfWe8lHOd7?Ifmn^ogo?NVYW;mKo2GI;fZZ6=1SN"
    A$ = A$ + "ef=bA6LU0D5giPf<^^hWlU;ZL_OhoiOL?f5_fEG8KieKXT`_oD:ejeaR`kRn"
    A$ = A$ + "XZ\gMfDag4GLLo5Ndgo3?>W_[Ma[7dHSmJ[4O]#d`Cg]#Ri7Oj0:KLlfjQ^e"
    A$ = A$ + "eV:Pemo^oiGg<i<S=^7f:]Qb_1R#UOc3gY<G4_nB[gLcfJaGNf529fjfgKo:"
    A$ = A$ + "La37W=GmjFdQFaG6cfk\EQD;=m]FUYm3Okcja^le7g5Ae3OdaUR=chGOQTVm"
    A$ = A$ + "^maKGAUWGBFT>nZ;hbMX\bi[e^CcZ5bYSb:cU=dRglV;6R[b^go1KWW:F2nB"
    A$ = A$ + "MkF8iDOj_n;FPKSWn^W]>OXeR[eiPmK#kj;o\;_0Aa]>l`]KE>_Y^#fh1341"
    A$ = A$ + ":J[8b#bXgL_Sg]LfU_aDN5KO`>5B_bRNYKmT_n5M9Vm:GIN01lQ]UR^jZaDJ"
    A$ = A$ + "OhMfb:S_UmVBYHA5R8QBbGJSmgZ4Y_5G>2?\UYG1V0;]H0j2MjEG;C#_nC8D"
    A$ = A$ + "ZkF[GEQ<Nh898X1Hn4Y9X5=:F_Im:Fj#iK6RH[iamZQb8T_e6Kd^ZU6:_U0I"
    A$ = A$ + "<O^M_FL6E[2i]b1HZ[D0fQhgOL6S:]KEF9Kd#ABaZU_Li26b\Ic#`X0aW^]:"
    A$ = A$ + ":4KiIWeM2eVK_M3UD13VD4]E^RDj#126;33DY2:_ZSB?0k#A5g=PBnJl49RW"
    A$ = A$ + "2PoDXH>9bT9c:HFYFI3^D134WBBGCP:MJ:iBMg\M1Q<aRV8;_X0MZHaBA[T_"
    A$ = A$ + "LUb5`0=8cT>3hKJP5S0aQ#S;Q0L1OY1`B#H8T\[09bAU=;]PJ^RUbKXP0<P`"
    A$ = A$ + "U`CC0X8#MjDZBilJ#YDX#?0F3Q0`<G>3=ETU[:aT:\OoQCc3#e:WG70M9Q#o"
    A$ = A$ + "d7^P8je[2_??EZhaRWRPR1EY7`PEX4`^02P5X>La?03Dn2FjRXe40BSUUQ4M"
    A$ = A$ + "jTY8iah^0D#0N:A4D5MD7J<h>dPg1B13QLB0I4PSA3mfIXUbE^FUl:\ICW6X"
    A$ = A$ + "S0gAc:IDXL9He1`M1h4T5I#XT81H>8iidU9^T:Z^96I:9=6J4P75nOH40XEJ"
    A$ = A$ + "B<4YBA`:KF03<3H1:7`356bBa[HJIUC7P?Pa4P#A1#G09HJQ`AIG>G`6[3Zh"
    A$ = A$ + "20O3`a2<jdNZ]RA#OLPQ084I`L:?0Z1N_XCe9WbM>o7KH\>##hiko7i]am8e"
    A$ = A$ + "7E32l9D<BAZO9LaAkee6>RPC7c31SPA60QL6K\B:8c#Ff1?b0\HPI8>0IdP:"
    A$ = A$ + "ofFV8JO>2J6o8o`ET]MFTh]mFA9<fYn5mi`=XcgW=inmckP=ZOIk1A1WXT=O"
    A$ = A$ + "S2Oa14PmQ98L2fLHL49MB\734^]B7ZYnbJ0>?KKNhC6RIaAnS04Q_?LYcZ[A"
    A$ = A$ + "A7?0mXd9\[cjkWl]565Mh90AaO6fL\bANRS6`k2]a=b=lhCDDe=#P[IA]CAB"
    A$ = A$ + "chPe4g6FnlidQVGbT:Ej<X_=#d1DB5[D]B1Mn\9S6>::_;J?=leNaZ=JeXT6"
    A$ = A$ + "MR0[hfKDX3:dJ_ZEUFK\gNm:;4cc<C>mBQcbSfC9KFKcSNlcN`FVaWO\_hRG"
    A$ = A$ + "OY8D2X?Ed[]cSNkkOmAUB=gUn\?oZck?55H^RFM>n5_oKOinFaWK\;nUC<g:"
    A$ = A$ + "QPT?\6]>hY_k[OmMJ`7deDC>e<^FNEoA8DZ_oSOckNaa]d8R\f:;=o]VJjIm"
    A$ = A$ + "T#[kMOiKOemg\\:\7Q>a:CMi;>f\ab]cCOc;_kjFRl:i:VSfgTOnWN9GI[Nd"
    A$ = A$ + "cOnMG?W0WJaJEeC]`Enl;?ObLm>HoNUeTd:f\E5ih;>i4c5R_HcjiUIX5;]a"
    A$ = A$ + "QkeDH]Y^jDNI[0UmY2i;2OcknR7_>c2SMUISKf^SEVELi9CUklfgM\EXIVJY"
    A$ = A$ + "DV=Z`_f=WdEZ:gm[nVkG<QWEBXe\CnTgl;^h\4]OjgnV]hli>RfVgk`B1^d_"
    A$ = A$ + "jgL;j=OegnT:aGLaHi?lAg>gZGlSobE<^m[NF7RUVe;o6?jAmb>mi_P;QmOk"
    A$ = A$ + "k_SlRGM2_JkodkF`gU?o4AKlRod_K?Zi^b41;LhMkTjjOj5VSKogoWOKc4c?"
    A$ = A$ + "m:2Mg_;glGhC7?LeWlkoj]IFIN_2m^cN6;OnOeiGDk^o^o`mDm>m<aZLl3jA"
    A$ = A$ + ">eWn9CVISgn7OAU8c<]G]mNd]eGhloj;7\fcoQ_oHQUVHjhe>j>=RN]?i2^4"
    A$ = A$ + "?hKnnWG9n2c5>oNgY;aeohOmeBdn5OgG]1ibc0VfC>bHYco[^PkL?lgmeK#\"
    A$ = A$ + "`D;b^m;Oe6a_j7oYc9Nk_m?L7iUWHBoi?nIk;hjBOiLL7l]oY7K^j4S]Xh>?"
    A$ = A$ + "i8EGOai_N\F_h7n^S0M>E\bk_O1oGkc_RKe3oZoYkK6HfiRGnh7]IfaoX?jB"
    A$ = A$ + "n[lho`g^7kbC>7ij?iIKBNc;lIG?Ac7mVkH6Jni3Uk`Wo`Z1_fi_TKUmOa;g"
    A$ = A$ + "Rcc=W;JQm^cfJQVO6?<]^cmjbiM>GQefj1g]FlY_bh[X\kcoZkG8bLg`EVBK"
    A$ = A$ + "]C=6o;_B<UVK_EAb#1B8GKS=ZBkNb9LUZlQ?in]H3\d:I:\eQmdR^\;_YeKd"
    A$ = A$ + "]<CXE3#F4`[fPacdC]HZ2kLdVVYlj9#F0NgVF4nG=8QN]6iY3jNeHb]_mMfd"
    A$ = A$ + ":UkIV?P#Smf_]JL_[4P#_a6[GR?IT4d:i\<48R7;SDQ6=:8V>BhT0jd^M[X#"
    A$ = A$ + "4=JBJI[2VBXSA#d\HI;IZdYb#;KJZbS>=2JaLEKF_PDfhARUQEFg4QE0Z:V["
    A$ = A$ + "#N=^<9RUTP5Z0Z;10lU<:E_Z1EXElh?970MYT639]LQJe\HR\bb[4RdXFkjF"
    A$ = A$ + "2TTlVeJFEW`[[im4S_H[^];K8;YHHI:C6M]e2VPBfZ4Ddf:OQl020jTA25:J"
    A$ = A$ + "JJAX?Z6]KEcBV1#JUUR6go5ULa>Kf[V>Mb4IH4UiB7d[_8<5jMkSf^4K\0Q9"
    A$ = A$ + "Db3Hf2i1RL6]fNkfi5bV>[PQU1G2ONl6QD[LS6U=UhhTdc3QQ\AFcGPhdb6i"
    A$ = A$ + "bIRnU3MD<lIRhO]0#7M:ViAo\\#X?4b4JE?[PPVIF\Jc>8DajRT91LA1RTT2"
    A$ = A$ + "1\ZBmV]JDY04992_bR;]J4:S6K]gf];1^[\V^2CD?^FHUH2U0?XNNE840aOQ"
    A$ = A$ + "H;=md^2aGYgf[GF12e6EJe^\#HGgh6c7P:Gmf]ZVg#7eZINEZX[^h2N2VRC_"
    A$ = A$ + "Dm6=ZE^Da2FVZ\9l]`<ci>4E^FK^cV];3He18K2I2\h\c]L`\j=gNoMkEcB5"
    A$ = A$ + "1IAP:^_UFHieB[DOk3?HS:jl0<9`dX2kNn5F=Q4dkdF=<5IiDbG]NAQ8;<=0"
    A$ = A$ + "gW]#[eQe<55cbX5?A`fVLVEB8T_FmJU;FZF[>][G#8nbC=neWcG:ibMgJ[N]"
    A$ = A$ + "ZG]Je:5eb^j=^dG<nR9ekL`Akg[F1;X[_ZjILOm;?fdNcJeNkMfXEeB517AG"
    A$ = A$ + "P8TkiWOYeB`XG^ej[g^N9;30c6GfXNGJA?1C;FXE_e[WGGEc\#YRjD1VOZYF"
    A$ = A$ + "0<^fmjD[#>;dVU:ZYlLc9_UKLCge[D\#i6Mke]N>VPc=nHC^DL`[gOW^E<ed"
    A$ = A$ + "cG]AESd;=nU^flATZ]i^Ke^JA0\JYLBYmiJ6GNSSPiG1R`UZDYD>5NHQfWWE"
    A$ = A$ + "G;:YBYFMJFD7260DHC^8;>eD^2cIE[I3Xe2ESRPJ=iC7bcB;_JXD\Z5JdMSN"
    A$ = A$ + "=;IX2eCe49l?oDgLADG;k_g6=:JZ3kkPHobX5:2UR=kd^IebX5E=AZ4nM_TK"
    A$ = A$ + "8HHD]C_>#\8W90<U>^_5G`M`dlj#L\NU2`FC0f90??`b^FdG2FcZ]k21^li;"
    A$ = A$ + "EdBU;ChEMkNe0a9U\ZgMc=keZ\1jh<YB^f2c<kbQX;\a]_cQ`F3M0\X89dKg"
    A$ = A$ + "dck;U4dldfKd^Fi2idTH9R^Z[iFHeHd6=fnf7]Gg:iTQ698B6ao:[h;<doDk"
    A$ = A$ + "M>Lo=ZK9ACT9;5IbP[jaK82EHgenmZJRBC`cC5gkB;1=K9E\mFK313C51<jh"
    A$ = A$ + "d[]T[UmWB^fF7N`F=\TH1TnB\am<k=WeC<QZkLlMf[C9M9NNAA^<1#ka3CW["
    A$ = A$ + "cN7MhVe1[PVVUQ<^g5L]T_4REgnhk^O;;A:2B>9IVX^WK^U33]YN_kM#klB<"
    A$ = A$ + "#_#:b\#?];h9<YI[MACGa0<>D[^TAl\`BNSaELS3?JgFi11c0TICh5g0\NCd"
    A$ = A$ + "XH:YRDWX\#f#^M]Xg4BEf4EeG50;c;[Yb6cclck>4Y>jcmF5D18m0X8AVT[i"
    A$ = A$ + "f=:WCm=gMkf5]iFE4Ta2;]6b]gOg>5E]?fH5b#;kJYeBRJMM[^Ec1HgA7N9O"
    A$ = A$ + "j0^GNe`IE[\n>KgYR9di50QGR918IOaH<Z_a>KRE87PhGV>2TPIehXnSQ_]E"
    A$ = A$ + "iaM>Y;THUiVMiPPe1Y7JF#C2O`RLPTGLieB`V[iVk\A3;INl9>bUfoB;h>4Q"
    A$ = A$ + "Bi^K_cjEd5#`jU152kkPH7hQ7\KW2bh8Z64XGIQ5m6W?Ok]gMSJVBXn?UUQd"
    A$ = A$ + "O[jIe`4#VP]g^K53Xi7`I`TGI]HDJEj^e6=;Z9RKb0b81KU2TTeXFgNM#KI#"
    A$ = A$ + "=YX8#5ckbN2TR?G]>MKEb#B0gQ47A4O[h=D6al=F_G[BjRhSdDV=E`EaWYDU"
    A$ = A$ + ">mPPW<jLkTUh9C4dgJQQ>f;18#[0=iSa[cAU:B`##jM8;Jcj5=D#1491FB0g"
    A$ = A$ + "J4X;K]2E[E]4T55gS3dBKdPQRQh^AkVXS?0eWT83DS`[oX4#ibF0I8[4Z_7F"
    A$ = A$ + "bDA2h?DLXEnb=Je\FACEla?W=Ml`137WP7B^gYEUL`70XcTU>Cd0[1#C5]Ze"
    A$ = A$ + "^5H9bH0j8Q4<#hT#Ia:=JF_D>=L7ELd4a37:LR\8EfYIIC5AlI`cT6c=]JYV"
    A$ = A$ + "MkD_X>j4nQ6kY#EV0OG_2TAXFN=9L[1\IS72ZGUNXQ`S`l3L7J=8BaIF[cj]"
    A$ = A$ + "`e7AC>0FK#1`<28W\1\8h\nB6?8HfI40c6YAdGXbZbL4AmkcO<BLN\ZFZP?2"
    A$ = A$ + "MA83IQ`eHe:S]JIT<D6LR2L6UKfZ>DQD4MD[Z#eo`n34U#8G]fPESZI1UWd4"
    A$ = A$ + "9S5H]0a8U;PG30\jB#3^:P63h?HL:ilePh44#`b#V==FSDZ5a[_8cCYoIHPV"
    A$ = A$ + ";Eaj=PJg#C]8^1bA240]91Uj67W#bF6h>04X0k[NmbiDU#74\Q^4ERPn36S#"
    A$ = A$ + "`\BmJUbY:S6=Q^Z04F34>19j49Z2;jbBhY3a3T32;Th3ZXPQ2JL>Hc>F#P<]"
    A$ = A$ + "Bn:E;3k:]931ZHQ2618KE^J9;dWYhQo`V9:\nVRA=OU:XmC8ZX:19aKRIEcG"
    A$ = A$ + "^LaLJ:X1hX[:B1XW2WPP3O8EVJ::hIM;BW2]gV0fKKCFFaF8YR42fbSV07#f"
    A$ = A$ + "fK<d`29B2BPLiBiAU^0Z6ZfN3#F7Z^TgD3#IX[[9cR<K7bU`Ta3=RafK0b56"
    A$ = A$ + "Q\8RLXXY#PX:KC6M#52dYS5>Ldd<BV8^cQ6mT6Vkh0iDDRPUD^X5Jh#X_cH9"
    A$ = A$ + "B49LD\\;G1TR^=g8bHkfN2S6JfZT5mM3n3K4<C<g`V4AFWnDiPFlLl7T\i8C"
    A$ = A$ + "69LhhIHaTk;49^\X0KL<gHQ0^n0ba`Lk8KdD0#29TS#0T]i<<#3f2n`1]<47"
    A$ = A$ + "P#S>^]RFV>TQD<Q1Q`8I0Q`2fTEUi]3:99i1dg8#1j8U:;015lZ62NJ1K^A="
    A$ = A$ + "ZcPlN#WX3E3MlUfBA2kVQS1hYeb10\]0#^8bLTYR5>B\d8P[8YP`o2TiYB7?"
    A$ = A$ + "Jdh8b8QW7Ag0\#j<90bYXh?3iH0Idi[Q5NOb49R69JB26A]n\SV\2=1:3K<K"
    A$ = A$ + "YD\HATAR>QQ\Pk7:Jb\XIf281kCV<Ml8X58T3E\42[K>3``YbP4N2T`cQ9W7"
    A$ = A$ + "4^4XcTaR41Ki#<70^1^Z^2:SLl8P>9iE<QM5Ua\[>Dh\XH^3I7MJ;L#WPD6`"
    A$ = A$ + "=FWI#FN1\`cQ?J4\>SU:[m9MF^HN\5BCT:^So3OC0h7;HQ8c#V9I\X8YP>^E"
    A$ = A$ + "0M<Jo_\0;DM075cRfK1UN0PGjXSnTR0MHZPDT<0b8lHPoP;VT8F\hXC<=OiJ"
    A$ = A$ + "eZD4I:L\dTXeRHP79W[4Z06BWl0IT=RFAQ_QZF_6Zm49dlLQBB8G:;TYX2J>"
    A$ = A$ + "mi`3<fVm8`^85XhCSJU\#V2;3=VmHY#WiJm6e;3I5`WUWcRAF<NDPMD]:N`H"
    A$ = A$ + "bRRj>BY9`>HRl3H7n`5JM\9T4fdA:X=6X?GD1Hi=ZQ]5KY43]a0BF0Xi[F2C"
    A$ = A$ + "6\5`C7DY^NM\7Ic>lmBX8>\S\5d1PbQU>FYj5a\3V^]=RfZW0maHI\dea\cJ"
    A$ = A$ + "7fQhUNQ:XX>TF4OlYXhK<XYCIXm?Xc6TdaTa\3[6Z#JkZ33<IcT<Nl4#od6#"
    A$ = A$ + ">Zbh59NLl=ERh9P_H#I6#k0DAWI;VNBd5M0J;]<TW7=U2\H#lW8EFF#[U]cA"
    A$ = A$ + "S538nDhk>1jTg[0[eh[JP=mDY9IQmSUa69Ni`Fl8fE]IgIi0IUYBV:;B[hDS"
    A$ = A$ + "ff>=Xed9CJ;6h;<lF3di3BSIWP6MaX6b>3J59MZ<TX_OQlGf^:WM#8]mh1`Y"
    A$ = A$ + "BA1BdPXI0aWVP6UF3Hgd1N37Vm<f\Sj74O;3h`QHPMd9_3I76A:D0IdUd0UG"
    A$ = A$ + "3jHJ4fcT9;=?:UTUmR:_SaTQ0Mg8#7P?T>bV>bW#\;XHHQ>FCEkS67K<I`g?"
    A$ = A$ + "RLiQVoejOCbL^Z2RZVf\[hLY1PNR8#:E;W5:Od9HWT1TN>ll16Q\mH3#7l0F"
    A$ = A$ + "Yh11P]Ad5Q0M[<6856\D`BgNV<fgk08>R\AJ>9ESL>\KOBoTP]h85Tdk;6T="
    A$ = A$ + "R^n48YP53VNOfAG>5TD>1kIA\KP;IH?d0\WRRSSJS>BY_aH>T<Go`^8VM\Dj"
    A$ = A$ + "[DLP1L9C7URYK[D^Q:efW#cNQT6JWAgV<Nh4XQMP>LJ6kkMS3M4k3U>^8h8B"
    A$ = A$ + "93FjhcfFcQ>BY8K4e:W^3IiQ635Ze:mQ\?#jlf3gaFYf63ff5aGS5ME7[Q7O"
    A$ = A$ + "2jDfgY6Snl317TaS_l#XA3R8[<dWX0YS#F>PM\aCTU4C73gANHTl4dE6\\J7"
    A$ = A$ + "b68Nd;8LBa[Y>Rhk?c`ndE`c[Q1MiQ`3DB73LbnnSP6cT3ME]QT5\WO8869<"
    A$ = A$ + "^c1FS3M>7j:SHm8[QC4OoS\Sl>kQQHS=MEWUK7jhkQdXR__Ja\ggJTkkEhkh"
    A$ = A$ + "ST]EZ<HY2=VaA\Bl=AbfL`3k3?U\nT79hdOjI>gEXQFYj8gW9Knk;NKWZo>4"
    A$ = A$ + "Z1FY3M97jDXK<VLoHSLo]g3]NenTQe#deHc98hH=H_eAlH[di6=9i\Tk#7_8"
    A$ = A$ + "i<Y9kPf`;0EoK_3\oVJ#X__d?imUBen2C=REfG[8jbHiQYSMZn\gO2Pfg6[n"
    A$ = A$ + "c#\oM6J#`ai2m>:MD\DdFK37T8JL_XIH?:kfdY]795V^Tc5Q2CWQ[?mnF9V^"
    A$ = A$ + "chGMXKgO??GokAEOaH?8DDiA4MW1c9eo6?Q5_=MWIAJKm3X?H6UmYS^dJ3hO"
    A$ = A$ + "#`L`lAabOhUHVcI0\>;ZfF_\mmEK4jmigNlc3_bc>SEeNHc\S<bdnS7]ohon"
    A$ = A$ + "0da:##LDcdNlf\lS#_ON4fCa^b9\OWaL:;gOLc>fo9XK?ELkk\]cCTMT_ClY"
    A$ = A$ + "omlFJ`W:hh9k9Y;i`_3M7c\_mHkH>cLFI`]aSUm\dafIOiHCFeI<jl37LZmH"
    A$ = A$ + "dEM>f8k5NWa[K?<MW;H8WSmKoIhPT9>gBm1?h4d7HomcI8HOSnhLV_lYYk<g"
    A$ = A$ + "Lini<\ELo;?Pl9Ygofago1>9m6\TeoCGk;n87[S1=be04SIb9b=Ri?d1j_7e"
    A$ = A$ + "A<BBWTn0mn1Y?`c>QL>9MF7mNB1i\WFjd6DomjW`3`X4?SP47AaWA1h#g8d?"
    A$ = A$ + "m;8MjUPA4TdYhOd7<`B?a;<d3h7nidXd7m_Z3S#GL`=\HXY>l1LWV^STh6\i"
    A$ = A$ + "J4;EH`M6iTFj`]SRWHgk7dD57n2Wf56i_77WbW?]YN29=Z;LJ9=jgISn2W98"
    A$ = A$ + "=b;8n1XO2KEDLdPaIl]oMe`Il=79m1YcOJ5LB1mSXiQGWTQoMZY_6>U;`oQL"
    A$ = A$ + "Q?XV7ABoHV:oI<engXVcZiANQ?\YNb[43F>OPGHT7l1d#oK2cIl1nC8XCm2W"
    A$ = A$ + "T^S6n`V:o7dD7AcSN5NnaY?j3T>[T>]Y:nO0mCKAWBcRo8J^oO7\>;m1o>ee"
    A$ = A$ + ";JD1eo2BM21MZGh4^V`O92j7CcO0j2WVn?j;LR[D^d8?h4dU>aKLjk]e09mQ"
    A$ = A$ + "\dODGh3nPoSNQcXJQ1Jn3l2oXVjI^jISBo3:Xc8Y1G`\o_dTngEeo5JBooV?"
    A$ = A$ + "l1N`O1do;k5na=Yo?HD2%%h1"

    btemp$ = ""
    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 j = 1 TO LEN(B$)
            IF MID$(B$, j, 1) = "#" THEN
        MID$(B$, j) = "@": END IF: NEXT
        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
    Basfile$ = _INFLATE$(btemp$): btemp$ = ""
END FUNCTION

Print this item

  Can't Convert an INT to a String
Posted by: TarotRedhand - 05-22-2022, 10:51 AM - Forum: Help Me! - Replies (4)

What is wrong with this line -

Code: (Select All)
    TempString$ = LTRIM(STR$(AYear%))

All variables are DIMed yet I get an Illegal string-number conversion error on that line. FWIW removing LTRIM has no effect on the error. This is driving me nuts.

Thanks

TR

Print this item

  Load Image 256
Posted by: Petr - 05-22-2022, 08:16 AM - Forum: Programs - Replies (1)

Hi again.

This function is designed for you to load any image into 8-bit format. I used Ashish's conversion feature, which he published a long time ago, to convert. Here I did not try to speed it up, but to make it work so that any 32-bit image could actually be used as an 8-bit image.

  The whole issue of 8-bit images faces one major drawback. If you do anything on an 8-bit screen, you have to compare the color palettes of all the images used so that they are the same and there is no color swapping. Thus, to make sure that, for example, the yellow color in one 8-bit frame does not have a palette number of, for example, 50, but in another frame else number. This needs to be considered when using 8-bit images.

Code: (Select All)
'LOADIMAGE256 experimental ver. 2.0

'1] Load image as 32 bit image
'2] find how much colors image contains. If 256 and less, continue. If more than 256, use Ashish's Dithering program, convert source image to 256 colors and call function LOADIMAGE256 again
'3] create 8 bit image and color palette
'4] THE PROGRAM DOES NOT RESPECT THE DEFAULT Qb64 COLOR PALETTE, Each image has its own!



Screen _NewImage(1700, 800, 256)
img8 = LOADIMAGE256("be.png")
_CopyPalette img8, _Dest
_PutImage (0, 0), img8




Function LOADIMAGE256 (img$)
    DefLng A-Z
    CompressIntensity = 5
    image = _LoadImage(img$, 32)
    ReStart: 'if image contains more than 256 colors, is function restarted after Floyd Steinberg Dithering is done by Ashish's function.
    ReDim m As _MEM, clr8(255) As _Unsigned Long, Clr32 As _Unsigned Long, test As Long, s As Long
    For s = 0 To 255
        clr8(s) = 99999
    Next s
    m = _MemImage(image)
    Do Until p& = m.SIZE
        _MemGet m, m.OFFSET + p&, Clr32~&
        test = 0
        'this block prevent for writing the same color more than 1x to palette array
        Do Until test > 255
            If clr8(test) = Clr32~& Then GoTo NextColor
            If clr8(test) = 99999 Then Exit Do
            test = test + 1
        Loop
        'if is empty place in palette, save this color as next palette color
        If test > 255 Then

            Print "Image contains more than 256 colors, can not be directly copyed as 8 bit image. Using ASHISH's source for dithering... Compress intensity: "; CompressIntensity

            img2 = FloydSteinbergDithering(image, CompressIntensity)
            CompressIntensity = CompressIntensity - 1
            _FreeImage image
            image = img2
            GoTo ReStart

        End If
        clr8(test) = Clr32
        'color is saved as palette for 8 bit image
        NextColor: p& = p& + 4
    Loop
    image8 = _NewImage(_Width(image), _Height(image), 256)
    'set palette
    Dim N As _MEM, C As _Unsigned _Byte
    N = _MemImage(image8)
    For palett = 0 To 255
        _PaletteColor palett, clr8(palett), image8
    Next
    'create 8 bit mask (set colors 0 to 255 to 8 bit image)
    For C = 255 To 0 Step -1
        clr~& = clr8(C)
        R& = 0
        R8& = 0
        Do Until R& = m.SIZE
            _MemGet m, m.OFFSET + R&, Clr32
            If Clr32 = clr~& Then _MemPut N, N.OFFSET + R8&, C
            R& = R& + 4
            R8& = R8& + 1
        Loop
    Next C
    LOADIMAGE256 = _CopyImage(image8, 256)
    _MemFree m
    _MemFree N
    _FreeImage image
    _FreeImage image8
End Function


Function FloydSteinbergDithering& (img&, factor As Integer) 'This is not my source, its coded By Ashish
    preDest = _Dest
    preSource = _Source
    Img32 = _CopyImage(img&)
    _Dest Img32
    _Source img&
    For y = 0 To _Height(img&) - 1
        For x = 0 To _Width(img&) - 1
            col~& = Point(x, y)
            oldR = _Red(col~&)
            oldG = _Green(col~&)
            oldB = _Blue(col~&)

            newR = _Round(factor * (oldR / 255)) * (255 / factor)
            newG = _Round(factor * (oldG / 255)) * (255 / factor)
            newB = _Round(factor * (oldB / 255)) * (255 / factor)

            errR = oldR - newR
            errG = oldG - newG
            errB = oldB - newB

            col2~& = Point(x + 1, y)
            r = _Red(col2~&) + errR * 7 / 16
            g = _Green(col2~&) + errG * 7 / 16
            b = _Blue(col2~&) + errB * 7 / 16
            PSet (x + 1, y), _RGB(r, g, b)

            col2~& = Point(x - 1, y + 1)
            r = _Red(col2~&) + errR * 3 / 16
            g = _Green(col2~&) + errG * 3 / 16
            b = _Blue(col2~&) + errB * 3 / 16
            PSet (x - 1, y + 1), _RGB(r, g, b)

            col2~& = Point(x, y + 1)
            r = _Red(col2~&) + errR * 5 / 16
            g = _Green(col2~&) + errG * 5 / 16
            b = _Blue(col2~&) + errB * 5 / 16
            PSet (x, y + 1), _RGB(r, g, b)

            col2~& = Point(x + 1, y + 1)
            r = _Red(col2~&) + errR * 1 / 16
            g = _Green(col2~&) + errG * 1 / 16
            b = _Blue(col2~&) + errB * 1 / 16
            PSet (x + 1, y + 1), _RGB(r, g, b)

            PSet (x, y), _RGB(newR, newG, newB)
    Next x, y
    _Dest preDest
    _Source preSource
    FloydSteinbergDithering& = Img32
End Function

Print this item

  Knapsack 0-1 & rosettacode & qbasic qb64 & WE
Posted by: DANILIN - 05-22-2022, 06:09 AM - Forum: Programs - Replies (3)

Knapsack 0-1 & rosettacode & qbasic qb64 & WE

For all people: send yours algorithms to rosettacode
otherwise forum may disappear even in google search

Classic Knapsack problem is solved in many ways

Contents: http://rosettacode.org/wiki/Knapsack_problem
Long read: rosettacode.org/wiki/Knapsack_problem/0-1

Previous topics and long programs: Knapsack
https://qb64forum.alephc.xyz/index.php?topic=3091
Ordered Combinations Generator
https://qb64forum.alephc.xyz/index.php?topic=2999

My newest program synthesizes all ciphers from 0 & 1
adding an extra register and 0 remain on left in cipher

Number of comparisons decreases from N! to 2^N
for example N=5 N!=120 >> 2^N=32

Random values origin are automatically assigned
quantity and quality and integral of value is obtained
and in general: integral of quantity and quality
and it is possible to divide only anyone will not understand

Program write results to qb64 directory

Code: (Select All)
Open "knapsack.txt" For Output As #1
N=7: L=5: a = 2^(N+1): Randomize Timer 'knapsack.bas DANILIN
Dim L(N), C(N), j(N), q(a), q$(a), d(a)

For m=a-1 To (a-1)/2 Step -1: g=m: Do ' sintez shifr
    q$(m)=LTrim$(Str$(g Mod 2))+q$(m)
    g=g\2: Loop Until g=0
    q$(m)=Mid$(q$(m), 2, Len(q$(m)))
Next

For i=1 To N: L(i)=Int(Rnd*3+1) ' lenght & cost
C(i)=10+Int(Rnd*9): Print #1, i, L(i), C(i): Next ' origin

For h=a-1 To (a-1)/2 Step -1
    For k=1 To N: j(k)=Val(Mid$(q$(h), k, 1)) ' from shifr
        q(h)=q(h)+L(k)*j(k)*C(k) ' 0 or 1
        d(h)=d(h)+L(k)*j(k)
    Next
    If d(h) <= L Then Print #1, d(h), q(h), q$(h)
Next
max=0: m=1: For i=1 To a
    If d(i)<=L Then If q(i) > max Then max=q(i): m=i
Next
Print #1,: Print #1, d(m), q(m), q$(m): End

Main thing is very brief and clear to even all

Results is reduced manually:

Code: (Select All)
1             2             17
2             2             14
3             2             17
4             1             11
5             2             18
6             3             14
7             3             10

5             73           1101000
4             62           1100000
2             28           0100000
5             81           0011100 !!!
3             45           0011000
5             76           0010010
2             36           0000100

5             81           0011100

Print this item

  Whoops. Apologies. It's fixed now. LOL!
Posted by: admin - 05-21-2022, 10:31 PM - Forum: Announcements - Replies (5)

What can I say besides, "Whoops!"  

I told you guys all this forum stuff was new to me with setting it up and all.  Apparently for the last month or so, it's been impossible to send emails via the server here, or for the server itself to send any emails.   (Which, I guess makes it a good thing that nobody had to click a confirmation message for their email when signing up...)

The issue is really rather simple.  (And quite embarrassing to admit to.  

Our mail server is:     mail@forums.qb64phoenix.com
The server we used:  mail@forums.qb64phoenix.co

Only one little difference in those two things there, just it does make a weeee small difference.  LOL!

Worst thing is we worked with 0 error reports anywhere.  As far as the forums were concerned, they did their job.  Collect the messages, send them to the remote server, let it deliver them
As far as our actual server was concerned, it never got crap, therefore nothing was ever wrong.  And as for the qb64phoenix.CO guys... They don't exist, so they didn't return any mail or report any errors.

So, all I can offer i my apologies.  I didn't even realize we had an issue until an user reported they weren't getting mail notifications when they couldn't log in with a forgotten password.  The issue should be fixed now, and I've tested sending messages to myself and a few other people, so all should work as expected from now on.

Only one thing to really note:  We're sending messages properly now, but that still isn't going to stop your mail provider from labeling posts from here as spam and sending it to your junk mail or trash folders.  Be on the lookout for messages in those places, if you ever do request to reset a password or such, and the forum has to mail you about the issue.  Wink

Print this item