T3RRYT3RR0R

Pro clickable Menu - Batch

Jun 18th, 2021 (edited)
1,635
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 28.75 KB | None | 0 0
  1. @Echo off & Cls
  2.  
  3. :# As exampled at: https://youtu.be/PF48p5bpDgw
  4.  
  5. :# Batch clickable button macros and input bar
  6. :# Author: T3RRY Version: 2.0.1 Last Update: 1/06/2022
  7. :# New features:
  8. :# Added 'def' arg to allow this file to be called to define macros for use in a calling file.
  9. :#  - Note:
  10. :#        - Delayed Expansion be DISabled prior to defining macros
  11. :#        - Delayed Expansion must be ENabled to expand macros
  12. :# Expanded help information
  13. :# Reduced number of macros and functions to simplify usage
  14. :# Added new switches to make.btn for controlling button toggle type and defaults
  15. :# Added prompt for permission to install bg.exe ; a required component of this file.
  16.  
  17. @Echo off & CD /d "%~dp0"
  18.  
  19. CLS
  20.  
  21. :# Based on: https://www.dostips.com/forum/viewtopic.php?f=3&t=9222
  22. :# example begins at 'main' label at end of file
  23.  
  24.  If not exist "%TEMP%\Games_By_T3RRY\" MD "%TEMP%\Games_By_T3RRY"
  25.  If not exist "%TEMP%\Games_By_T3RRY\BG.exe" Certutil -decode "%~f0" "%TEMP%\Games_By_T3RRY\BG.exe" > nul
  26.  
  27.  Set BG.exe="%TEMP%\Games_By_T3RRY\BG.exe"
  28.  Set "reg.restore=(Call )"
  29.  
  30. :# disable QuickEdit if enabled. Restored at :end label if disabled by script
  31.   reg query HKEY_CURRENT_USER\console\ /v Quickedit | findstr.exe /l "0x1" > nul && (
  32.    (Reg add HKEY_CURRENT_USER\console\ /v QuickEdit /t REG_DWORD /d 0x0 /f) > nul
  33.    Set "reg.restore=Reg add HKEY_CURRENT_USER\console\ /v QuickEdit /t REG_DWORD /d 0x1 /f"
  34.   )
  35.  
  36.  For /f "tokens=4 Delims=: " %%C in ('CHCP')Do Set "active.cp=%%C"
  37.  chcp 65001 > nul
  38.  For /f %%e in ('echo prompt $E^|cmd')Do Set \E=%%e
  39.  If "!!" == "" (Echo DelayedExpansion must not be enabled before macro definitions&Pause & Exit /B 1)
  40.  
  41. :# Alt: %Buffer:@=Alt% Main: %Buffer:@=Main%
  42.  Set "Buffer=<nul set /p "=%\E%[?1049!@!""
  43.  Set "Alt=h"
  44.  Set "Main=l"
  45.  
  46. :# button sound fx. disable by undefining buttonsfx below ; prior to definition of OnCLick macro
  47.  Set "buttonsfx=On"
  48.  %BG.exe% Play "%WINDIR%\Media\Windows Feed Discovered.wav"
  49.  Set "OnClick=(Call )"
  50.  Set "OnType=(Call )"
  51.  If defined buttonsfx (
  52.   For /f "Delims=" %%G in ('Dir /b /s "%WINDIR%\SystemApps\*KbdKeyTap.wav"')Do If exist "%%~G" Set "OnClick=(Start /b "" %BG.exe% Play "%%~G")"
  53.   Set "OnType=(start /b "" %BG.exe% Play "%WINDIR%\Media\Windows Feed Discovered.wav")"
  54.  )
  55.  
  56. :# return button click coords in c{pos} variable n Y;X format
  57.  Set "GetClick=Set "Clicked="& Set "ValidClick="& for /f "tokens=1,2" %%X in ('%BG.exe% mouse')Do (Set /A "c{pos}=%%X+1"&Set "c{pos}=%%Y;!c{Pos}!")"
  58.  
  59. :# test substituted button # if click is within btn[#][coords] defines variables: Clicked [value eq string] ; ValidClick [value eq button number / undefined]; btn{State}[#] [value eq true/false]
  60.  Set "If.Button=For /f "Tokens=1,2 Delims=;" %%X in ("!c{pos}!")Do If not "!btn[#][Coords]:[%%Y;%%X]=!" == "!btn[#][Coords]!" Set "Clicked=!btn[#][string]!"& Set "ValidClick=#"& (If defined btn[#]{t} Call :Toggle #)& "
  61.  
  62. :# tests all buttons in same way as if.clicked ; exclude a button via substring modification substituting 'exc' for 'button#'
  63.  Set "qClicked=(For /l %%i in (1 1 !btns[i]!)Do If not "%%i"=="Exc" For /f "Tokens=1,2 Delims=;" %%X in ("!c{pos}!")Do If not "!btn[%%i][Coords]:[%%Y;%%X]=!" == "!btn[%%i][Coords]!" Set "Clicked=!btn[%%i][string]!"& Set "ValidClick=%%i"& %OnClick% & (If defined btn[%%i]{t} Call :Toggle %%i))& "
  64.  
  65. :# Id if button is an input bar. Requires additional Args. Optional -f switch forces input
  66. :# Usage: %qInput% <Prompt> [-f]
  67.  Set qInput=Set "Input="^& Echo({!Clicked!}^|findstr /RC:"\<[{][ ]*[}]\>" ^> nul ^&^& Call :InputBar !ValidClick!
  68.  
  69. :# display all buttons
  70.  Set "dButtons=For /l %%i In (1 1 !btns[i]!)Do <nul Set /P "=!btn[%%i]!""
  71.  
  72. :# Undefine all buttons. Use substring modification to exclude a specific button or states from being undefined.
  73. :# IE Preserve button 1: %clrButtons:$EXC=btn[1]%
  74.  Set "clrButtons=(For /f "tokens=1 Delims==" %%G In ('Set btn')Do Echo("%%G"|findstr /Lic:"$EXC" || Set "%%G=") 2> nul & CLS"
  75.  
  76. :# displays all selected button or input values
  77.  Set "dValues=For /l %%i in (1 1 !btns[i]!)Do if defined btn{State}[%%i] (set "value=%\E%[0;7m!btn{State}[%%i]:true=%\E%[0;32mtrue!"& Echo(%\E%[33mButton[%%i]%\E%[36m=!value:false=%\E%[0;90mfalse!%\E%[0m)"
  78.  
  79. :#  menu macro for easily creating multiple buttons simultaneously
  80.  Set "CHash=Col"
  81.  set "menu=Set "m{\c}="& For %%n in (1 2)Do if %%n==2 ((If "!CHash!"=="Col" (Set "m{\c}="&Call:createmenu !Params! 2> nul )Else (Set /A "m{\c}=Col"&Call :Createmenu ^!Params^! 2> nul ))& Set "m{\c}="&Set "m{x}=2")Else Set Params="
  82.  
  83. ==========
  84. Goto :Main
  85. ==========
  86.  
  87. :# FUNCTIONS
  88.  
  89. ====
  90. :end
  91.  (%Reg.Restore%) > nul
  92.  (Title )
  93.  <nul set /p "=%\E%[?25h"
  94.  CHCP %active.cp% > nul
  95.  Endlocal
  96. Goto :Eof
  97.  
  98. =================
  99. :Toggle <button#>
  100.  If "!btn{State}[%~1]!"=="true" (
  101.   <nul set /P "=!btn[%~1]!"
  102.   Set "btn{State}[%~1]=false"
  103.  )Else (
  104.   <nul set /P "=!btn[%~1]:48=7;48!"
  105.   Set "btn{State}[%~1]=true"
  106.  )
  107. Exit /b 0
  108.  
  109. :createGrid <Character> <Min> <Max> <FGcol> <BGcol> <BTNcol>
  110.  Set "Char=%~1"
  111.  For /L %%Y in (%~2 3 %~3)Do For /L %%X in (%~2 3 %~3)Do Call:CreateButton "!Char:~0,1!" %%Y %%X "%~4" "%~5" "%~6" -t
  112. Goto :Eof
  113.  
  114. ==========================================================
  115. :createbutton <string> <y> <x> <FGcol> <BGcol> <BTNcol> -t
  116. :# Arg Structure: 1,2,3 =  Mandatory ; 4,5,6 = Optional ; -t = Optional switch. Must be Last arg if present.
  117.  
  118. :# Button Border ; Recommended font: Lucida Console
  119. :# Codepage:         65001
  120. :# alt 201 alt 205 alt 187 ╔═╗
  121. :# alt 186  space  alt 186 ║ ║
  122. :# alt 200 alt 205 alt 188 ╚═╝
  123.  
  124.  Set "l[Y]=!btn[Y]!"
  125.  If not "%~2"=="!btn[Y]!" Set /A "btn[Y]=%~2+3"
  126.  
  127.  If "%~3" == "" Exit /b 1
  128.  Set /a "btns[i]+=1+0"
  129.  Set "btn[%btns[i]%][p]=%~2;%~3"
  130.  Set "btn[%btns[i]%][string]=%~1"
  131.  
  132.  If /I "%~4" == "-t" (set "btn[BG]=%\E%[48;2;230;230;200m")Else (If "%~4" == "" (set "btn[BG]=%\E%[48;2;230;230;200m")Else set "btn[BG]=%\E%[38;2;%~4m")
  133.  If /I "%~5" == "-t" (set "btn[FG]=%\E%[38;2;;;m")Else (If "%~5" == "" (set "btn[FG]=%\E%[38;2;;;m")Else set "btn[FG]=%\E%[48;2;%~5m")
  134.  If /I "%~6" == "-t" (set "btn[Col]=%\E%[90m")Else (If "%~6" == "" (set "btn[Col]=%\E%[90m")Else set "btn[Col]=%\E%[%~6m")
  135.  
  136. :# defines variable identifying button as toggle button; used by %If.Button% and %qClicked% macros
  137.  Echo("%*"|findstr /lic:"-t" > nul && Set "btn[%btns[i]%]{t}=true" || Set "btn[%btns[i]%]{t}="
  138.  
  139. :# Constrain button creation to console dimensions
  140.  For /f "Tokens=1,2 Delims=: " %%G in ('Mode^|findstr /lic:"Columns" /lic:"Lines"')Do (
  141.   Set /A "%%G=%%H"
  142.   If /I "%%G"=="Columns" ( Set /A "%%G[max]=%%H+%~3+2" )Else Set /A "%%G[max]=%%H"
  143.  )
  144.  Set "len="& set "s=#%~1" & ( for %%P in (8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do ( if "!s:~%%P,1!" NEQ "" ( set /a "len+=%%P" & set "s=!s:~%%P!" ))) & set /a "btn[%btns[i]%][Len]=len" 2>nul
  145.  If !len! GTR !Columns[Max]! (
  146.   Echo(Button length exceeds display width. Button width must be LSS than console Columns
  147.   Pause
  148.   Exit
  149.  )
  150.  If %~2 GEQ !Lines[Max]! (
  151.   Echo(Button height exceeds display height. Button height must be LSS than console Lines
  152.   Pause
  153.   Exit
  154.  )
  155.  
  156. :# define button click coords and button Upper / lower border display values
  157. :#  - border is not defined as clickable.
  158.  
  159.  Set /A "btn{Xmin}=%3+1", "btn{Xmax}=%3+len", "l[X]=btn{Xmax}+2"
  160.  Set "btn[%btns[i]%][Len]=" & Set "btn[%btns[i]%][S]=" & Set "btn[%btns[i]%][coords]="
  161.  
  162.  For /l %%i in (!btn{Xmin}! 1 !btn{Xmax}!)Do (
  163.   Set /A "btn[%btns[i]%][Len]=%%i-3", "Xoffset=%%i-1"
  164.   Set "btn[%btns[i]%][coords]=!btn[%btns[i]%][coords]![%2;!Xoffset!]"
  165.   Set "btn[%btns[i]%][Bar]=!btn[%btns[i]%][Bar]!═"
  166.   Set "btn[%btns[i]%][S]=!btn[%btns[i]%][S]! "
  167.  )
  168.  
  169. :# define toggle state variable
  170.  If defined btn[%btns[i]%]{t} Set "btn{State}[%btns[i]%]=false"
  171.  
  172. :# Button Graphic. Toggle is effected by substituting Background color VT code 48 with 7;48 to invert button text color.
  173.  Set "btn[%btns[i]%]=%\E%[%2;%3H%Btn[col]%%\E%7║%\E%8%\E%[A╔!btn[%btns[i]%][Bar]!╗%\E%8%\E%[B╚!btn[%btns[i]%][Bar]!╝%\E%8%\E%[C%\E%[0m!btn[FG]!!btn[BG]!!btn[%btns[i]%][String]!%\E%[0m%btn[col]%%\E%[0m%\E%[2E%\E%7"
  174.  Set "btn[%btns[i]%][t]=%\E%[0m!btn[FG]!!btn[BG]!!btn[%btns[i]%][String]!%\E%[0m%btn[col]%%\E%[0m%\E%[K"
  175. Exit /b 0
  176.  
  177. ==========================================
  178. :createMenu <"list" "of" "button strings">
  179. :# Associated Macro: %Menu%
  180. :#  - Uses default values for button color schemes m{fg} m{bg} and m{olc}
  181. :#    - Define the value of those variables prior to calling :createMenu
  182. :#      to the desired color scheme if you wish to override default values.
  183. :#  - Defaults to Row 3 [button base] unless m{yo} defined with value to overide default
  184. :#  - Defaults to Column 1 if m{x} is not defined with a column value.
  185. :#    - m{\c} overides m{x} to value of the new column. %Menu% macro resets m{x} to 2 as default x pos after use.
  186. :#  - Button count is reset unless m{\c} is defined using substring modification of
  187. :#    - %menu% macro: Ie: %Menu:Col=15% list of options
  188. :#      - Int X pos value for new column
  189. :# ! Note: Columns are not automatically padded for options of different lengths.
  190. :#  - Use white space in options list to pad options for buttons of equal size.
  191. :#    IE: %Menu% "      short button       " "A Very Much Longer Button"
  192.  
  193.  If not defined m{\c} (
  194.   cls
  195.   Set "btns[i]="
  196.   Set "display.menu=Call Echo("
  197.   Set "b{i}=0"
  198.  )
  199.  If not defined m{yo} (Set "m{y}=3")Else Set /A "m{y}=m{yo}"
  200.  If not defined m{fg} (Set "m{fg}=;160;200")
  201.  If not defined m{bg} (Set "m{bg}=150;;150")
  202.  If not defined m{olc} (Set "m{olc}=33")
  203.  If defined m{\c} (Set "m{x}=!m{\c}!")
  204.  If not defined m{x} (Set "m{x}=2")
  205.  For %%v in (%*)Do (
  206.   Call :CreateButton "%%~v" !m{y}! !m{x}! "!m{fg}!" "!m{bg}!" !m{olc}! -t 2> nul
  207.   Set "display.menu=!display.menu!%%button[!b{i}!]%%"
  208.   Set /a "m{y}+=3", "b{i}+=1"
  209.  )
  210.  %display.menu%
  211. Exit /b 0
  212.  
  213. =================================
  214. :InputBar <button#> <Prompt> [-f]
  215. :# Force Input via switch     -f
  216. :# Constrains display of input to the dimensions of the inout bar. Longer input may still be entered; input display
  217. :# is limited to the last n characters, where 'n' is the length of the input bar
  218.  
  219.  set "input="
  220.  Set /A "CurrIn=0", "MaxIn=!btn[%1][Len]!"
  221.  <nul Set /P "=%\E%[!btn[%1][p]!H%\E%[C%\E%7"
  222.  For /f "delims=" %%v in ('Set /A "MaxIn+1"')Do <nul Set /P "=%\E%[%%vX%\E%8%\E%[?25h%\E%[?12h"
  223.  %BG.exe% cursor 100
  224. :entryloop
  225.  Title %~2
  226.  %BG.exe% kbd
  227.  Set "key=!k[%Errorlevel%]!"
  228.  If not "!Key!" == "" (
  229.   If not "!Key!"=="Enter" (
  230.    If "!Key!"=="Backspace" (
  231.     If not !CurrIn!==0 (
  232.      %OnType%
  233.      Set "Input=!Input:~0,-1!"
  234.      Set /A "CurrIn-=1"
  235.      <nul set /p "=%\E%[D %\E%[D"
  236.     )Else Start /b "" %BG.exe% play "%WINDIR%\Media\Windows critical stop.wav"
  237.    )Else (
  238.     If not "!Key!"=="?" (
  239.      Echo("!Key!"|findstr.exe /lic:"home" /lic:"end" /lic:"pageup" /lic:"pagedown" /lic:"space" /lic:"tab" /lic:"left" /lic:"right" /lic:"up" /lic:"down" /lic:"delete" /lic:"escape" > nul && (
  240.       If /I "!Key!"=="escape" (Start /b ""  %BG.exe% play "%WINDIR%\Media\Windows critical stop.wav")
  241.       If /I "!Key!"=="delete" (
  242.        Start /b ""  %BG.exe% play "%WINDIR%\Media\recycle.wav"
  243.        Goto :InputBar
  244.       )
  245.       If /I "!Key!"=="Space" (
  246.        Set "Input=!Input! "
  247.        Set /A "CurrIn+=1"
  248.       )
  249.      ) || (
  250.       Set "Input=!Input!!Key!"
  251.       Set /A "CurrIn+=1"
  252.      )
  253.     )Else (%!! help output. =%
  254.       Set "Input=!Input!?"
  255.       Set /A "CurrIn+=1"
  256.     )
  257.     %OnType%
  258.    )
  259.    If not "!input!"=="" <nul set /p "=%\E%8!Input:~-%MaxIn%!"
  260.    Goto :entryloop
  261.   )
  262.  )
  263.  
  264. :# Key is Enter. Test -f force input switch; force input if true
  265.  If /I "%~3" == "-f" If "!input!" == "" (
  266.   Start /b "" %BG.exe% play "%WINDIR%\Media\Windows Error.wav"
  267.   Goto :InputBar
  268.  )
  269.  <nul Set /P "=%\E%[?25l%\E%8%\E%[K!btn[%1][t]:255;255;255=180;180;250!"
  270.  %BG.exe% play "%WINDIR%\Media\Windows Navigation Start.wav"
  271.  <nul Set /P "=%\E%8!btn[%1][t]!%\E%[?25l%\E%[?12l"
  272.  
  273.  Set "btn{State}[%1]="
  274.  If not "!Input!"=="" Set "btn{State}[%1]=!Input!"
  275.  
  276. :# 255 char title length limit
  277.  If "!Input:~0,237!"=="" (%= Double Quote string at output to prevent code insertion =%
  278.   Title You Entered: "!Input!"
  279.  )Else If not "!Input!"=="" (
  280.   Title You Entered: "!Input:~0,239!"
  281.  )Else Title ^^! No input entered.
  282. Exit /B 0
  283.  
  284. ========
  285. :DefKeys
  286.  Set "k[8]=Backspace"
  287.  
  288.  (Set LF=^
  289.  
  290.  
  291. %= empty lines above are required. =%)
  292.  
  293. rem For /l %%i in (9)Do For /F eol^=^%LF%%LF%^ delims^= %%A in ('forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo(0x09"') do Set "k[9]=%%A"
  294.  
  295.  Set "k[13]=Enter"& Set "k[27]=Escape"& Set "k[32]=Space"& Set "k[33]=^!"& Set ^"k[34]=""
  296.  
  297.  set "i=35"
  298.  
  299.  For %%k in (
  300.  "#" "$" "%%" "&" "'" "(" ")" "ASsub" "+" "," "-" "." "/"^
  301.  "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"^
  302.  ":" ";" "<" "=" ">" "QMsub" "@"^
  303.  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z^
  304.  "[" "\" "]" "^^" "_" "`"^
  305.  a b c d e f g h i j k l m n o p q r s t u v w x y z^
  306.  )Do (
  307.   Set "k[!i!]=%%~k"
  308.   Set /A "i+=1"
  309.  )
  310.  Set "k[42]=*"& Set "k[63]=?"& Set "k[123]={"& Set "k[124]=|"& Set "k[125]=}"
  311.  Set "k[126]=~"& Set "k[339]=Delete"& Set "k[327]=Home"& Set "k[328]=Up"
  312.  Set "k[329]=PageUp"& Set "k[331]=Left"& Set "k[333]=Right"& Set "k[335]=End"
  313.  Set "k[336]=Down"& Set "k[337]=PageDown"
  314. Exit /b 0
  315.  
  316. :# REQUIRED UTILITY
  317.  
  318. ===============
  319. /* BG.exe V 3.9
  320.   https://github.com/carlos-montiers/consolesoft-mirror/blob/master/bg/README.md
  321.   Copyright (C) 2010-2018 Carlos Montiers Aguilera
  322.  
  323.   This software is provided 'as-is', without any express or implied
  324.   warranty.  In no event will the authors be held liable for any damages
  325.   arising from the use of this software.
  326.  
  327.   Permission is granted to anyone to use this software for any purpose,
  328.   including commercial applications, and to alter it and redistribute it
  329.   freely, subject to the following restrictions:
  330.  
  331.   1. The origin of this software must not be misrepresented; you must not
  332.      claim that you wrote the original software. If you use this software
  333.      in a product, an acknowledgment in the product documentation would be
  334.      appreciated but is not required.
  335.   2. Altered source versions must be plainly marked as such, and must not be
  336.      misrepresented as being the original software.
  337.   3. This notice may not be removed or altered from any source distribution.
  338.  
  339.   Carlos Montiers Aguilera
  340.   cmontiers@gmail.com
  341.  */
  342.  
  343. -----BEGIN CERTIFICATE-----
  344. TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  345. AAAAAAAAAAAAAAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
  346. dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABQRQAATAEEAG3tp1sAAAAA
  347. AAAAAOAADwMLAQIZABoAAAAIAAAAAgAAcCcAAAAQAAAAAMD/AABAAAAQAAAAAgAA
  348. BAAAAAEAAAAEAAAAAAAAAABgAAAABAAAu00AAAMAAAAAACAAABAAAAAAEAAAEAAA
  349. AAAAABAAAAAAAAAAAAAAAABQAABMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  350. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  351. AAAAAAAAAAD4UAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAA
  352. IBkAAAAQAAAAGgAAAAQAAAAAAAAAAAAAAAAAACAAUGAucmRhdGEAALgBAAAAMAAA
  353. AAIAAAAeAAAAAAAAAAAAAAAAAABAAGBALmJzcwAAAACMAAAAAEAAAAAAAAAAAAAA
  354. AAAAAAAAAAAAAAAAgABgwC5pZGF0YQAATAQAAABQAAAABgAAACAAAAAAAAAAAAAA
  355. AAAAAEAAMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  356. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  357. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  358. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  359. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  360. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  361. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  362. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  363. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  364. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  365. AAAAAAAAAAAAAAAAAAAAAFWJ5YPsGKFQUUAAg8AgiUQkBA+3RQiJBCToIhgAAMnD
  366. hcAPhBoBAABVieVXVlOJx4PsPA+3GGaF2w+E/AAAADH2x0XQAAAAADHJ6ziNdCYA
  367. Mclmg/tcD5TBdBqhUFFAAIkcJIlN1IPAIIlEJATozhcAAItN1IPHAg+3H2aF2w+E
  368. jAAAAIXJdMgPt8PHRCQEgAAAAIkEJIlF1OiaFwAAhcAPhKoAAACDfdABD45wAQAA
  369. g/5/iXXkD7fGD4+RAQAAixVQUUAAiQQkg8cCMfaNSiCJTCQE6GcXAAChUFFAAIPA
  370. IIlEJASLRdSJBCToUBcAAA+3HzHJx0XQAAAAAGaF23WD6w2QkJCQkJCQkJCQkJCQ
  371. i0XQhcB0JIP+f4l13A+3xg+PygEAAIsVUFFAAIkEJIPCIIlUJAToBRcAAI1l9Fte
  372. X13zw422AAAAAI2/AAAAAItV0IXSdGmD/n+JdeAPt8YPj0oBAACLFVBRQACJBCSN
  373. SiCJTCQE6MUWAAAxyWaD+1wPlMEPhIYAAAChUFFAAIlNzDH2g8AgiUQkBItF1IkE
  374. JOiaFgAAx0XQAAAAAItNzOnA/v//jXQmAI28JwAAAABmg/tuD4R2AQAAD4awAAAA
  375. ZoP7cg+ERgEAAGaD+3QPhXwBAAChUFFAAMcEJAkAAACDwCCJRCQE6EQWAAAxyely
  376. /v//jbYAAAAAjbwnAAAAADH2x0XQAAAAAOlX/v//ZpCDRdABweYEZoP7OQ+GrwAA
  377. AIPLIA+3w4PoVwHGuQEAAADpL/7//412AI28JwAAAACNRdzHRCQIAQAAAIlEJASN
  378. ReSJBCT/FXxRQAAPt0Xcg+wM6Uj+//+J9o28JwAAAABmg/tiD4XWAAAAoVBRQADH
  379. BCQIAAAAg8AgiUQkBOieFQAAMcnpzP3//420JgAAAACNRdzHRCQIAQAAAIlEJASN
  380. ReCJBCT/FXxRQAAPt0Xcg+wM6Y/+//+J9o28JwAAAACLRdSD6DDpT////5CNdCYA
  381. jUXax0QkCAEAAACJRCQEjUXciQQk/xV8UUAAD7dF2oPsDOkP/v//ifaNvCcAAAAA
  382. oVBRQADHBCQNAAAAg8AgiUQkBOgIFQAAMcnpNv3//5ChUFFAAMcEJAoAAACDwCCJ
  383. RCQE6OgUAAAxyekW/f//kKFQUUAAg8AgiUQkBItF1IkEJOjJFAAAMcnp9/z//2aQ
  384. oUhAQACD+AJ+OlWJ5VdWU4PsHIsVREBAAIP4A4tyCHUvx0QkCBIAAgDHRCQEAAAA
  385. AIk0JP8VhFFAAIPsDI1l9FteX13zw412AI28JwAAAADHRCQICgAAAMdEJAQAAAAA
  386. i0IMiQQk6DUUAACFwH7Oiz2EUUAAjVj/kI20JgAAAACD6wHHRCQIEgACAMdEJAQA
  387. AAAAiTQk/9eD7AyD+/914OubjbQmAAAAAI28JwAAAABVuAQAAAC6BgAAALkGAAAA
  388. ieVXVlO+CAAAALsIAAAAvwgAAACB7LwAAABmiYVs////uBAAAABmiYV4////uAgA
  389. AACDPUhAQAADZomFev///7gFAAAAZomVbv///2aJhXz///+4DAAAAGaJjXD///9m
  390. iYV+////uAcAAABmiZ1y////ZolFgLgMAAAAZom1dP///2aJRYK4EAAAAGaJvXb/
  391. //9miUWOuAoAAAC6CAAAALkMAAAAuxAAAAC+DAAAAL8MAAAAZolFkLgSAAAAZolV
  392. hGaJTYZmiV2IZol1imaJfYxmiUWSdAmNZfRbXl9dw5ChREBAAMdEJAgKAAAAx0Qk
  393. BAAAAACLQAiJBCTo4BIAAIP4CYnDd9DHRCQYAAAAAMdEJBQAAAAAx0QkEAMAAADH
  394. RCQMAAAAAMdEJAgDAAAAx0QkBAAAAMDHBCQAMEAA/xX8UEAAg+wcicbHBCQQMEAA
  395. /xUcUUAAg+wEhcCJxw+ElgAAAMdEJAQqMEAAiQQk/xUYUUAAg+wIhcCJhWT///90
  396. bA+3hJ1s////jU2Ux0QkBEIwQADHRZRUAAAAiV2YiY1g////x0WgMAAAAMdFpJAB
  397. AABmiUWcD7eEnW7///9miUWejUWoiQQk6BsSAACLjWD////HRCQEAAAAAIk0JIuV
  398. ZP///4lMJAj/0oPsDIk8JP8VBFFAAIPsBIlcJASJNCToWxIAAIPsCIk0JP8V+FBA
  399. AIPsBOm+/v//jbQmAAAAAFWJ5VZTjXXwg+wwx0QkGAAAAADHRCQUAAAAAMdEJBAD
  400. AAAAx0QkDAAAAADHRCQIAwAAAMdEJAQAAADAxwQkADBAAP8V/FBAAIPsHInDiXQk
  401. BIkEJP8VCFFAAIPsCIM9SEBAAAN0OsdF9AEAAADHRfAZAAAAiXQkBIkcJP8VJFFA
  402. AIPsCIkcJP8V+FBAAIPsBI1l+FteXcOJ9o28JwAAAAChREBAAMdEJAgKAAAAx0Qk
  403. BAAAAACLQAiJBCToABEAAIP4GXQlfxmFwHQlg/gBdaTHRfQBAAAA65uNtCYAAAAA
  404. g/gydAWD+GR1iolF8OvhkMdF9AAAAADpeP///410JgCDPUhAQAADdAfDjbYAAAAA
  405. VYnlg+wYoURAQADHRCQICgAAAMdEJAQAAAAAi0AIiQQk6IoQAACFwH4MiQQk/xU4
  406. UUAAg+wEycOQjbQmAAAAAFWJ5YPsSI1F6IkEJP8VFFFAAA+3RfaD7ATHBCRUMEAA
  407. iUQkIA+3RfSJRCQcD7dF8olEJBgPt0XwiUQkFA+3Re6JRCQQD7dF6olEJAwPt0Xo
  408. iUQkCA+3ReyJRCQE6AcQAADJw422AAAAAI28JwAAAABVieVXVlONfcyNddSD7FzH
  409. RCQYAAAAAMdEJBQAAAAAx0QkEAMAAADHRCQMAAAAAMdEJAgDAAAAx0QkBAAAAMDH
  410. BCSGMEAA/xX8UEAAicONRdCD7ByJHCSJRCQE/xUMUUAAi0XQg+wIiRwkJC4MkIlE
  411. JAShMFFAAIlFxP/Qg+wIkIl8JAzHRCQIAQAAAIl0JASJHCT/FSBRQACD7BBmg33U
  412. AnXdg33cAXXXD7912g+/fdjHBCSUMEAAiXQkBIl8JAjB5hDoMA8AAItF0IkcJAH+
  413. iUQkBP9VxIPsCIkcJP8V+FBAAIPsBIk0JP8VAFFAAJBVieVTg+wEix1MUUAA/9OF
  414. wHQdPeAAAAB0FqNAQEAAg8QEW13DjXQmAI28JwAAAAD/0wUAAQAAo0BAQACDxARb
  415. XcONtCYAAAAAjbwnAAAAAFWJ5VOD7AT/FVRRQACFwHUfxwVAQEAAAAAAAIPEBFtd
  416. w+sNkJCQkJCQkJCQkJCQkIsdTFFAAP/ThcB0FD3gAAAAdA2jQEBAAIPEBFtdw2aQ
  417. /9MFAAEAAOvqjbQmAAAAAIM9SEBAAAR0B8ONtgAAAABVieVXVlOD7FzHRCQYAAAA
  418. AMdEJBQAAAAAx0QkEAMAAADHRCQMAAAAAMdEJAgDAAAAx0QkBAAAAMDHBCQAMEAA
  419. /xX8UEAAicaNRdKD7ByJNCSJRCQE/xUQUUAAoURAQACD7AgPt33gx0QkCAoAAADH
  420. RCQEAAAAAA+3XeJmK33ci0AIZitd3okEJOjCDQAAiUXEoURAQADHRCQICgAAAMdE
  421. JAQAAAAAi0AMiQQk6J8NAACLVcQxyWaFwA9IwYk0JGaF0g9I0WY5xw9P+GY50w9P
  422. 2g+3/8HjEAn7iVwkBP8VKFFAAIPsCIk0JP8V+FBAAIPsBI1l9FteX13DjbYAAAAA
  423. VYnlU4PsJMdEJBgAAAAAx0QkFAAAAADHRCQQAwAAAMdEJAwAAAAAx0QkCAMAAADH
  424. RCQEAAAAwMcEJAAwQAD/FfxQQACD7ByDPUhAQAADicO4BwAAAHQpiRwkiUQkBP8V
  425. NFFAAIPsCIkcJP8V+FBAAItd/IPsBMnDkI20JgAAAAChREBAAMdEJAgQAAAAx0Qk
  426. BAAAAACLQAiJBCTosAwAAA+3wOuyjXQmAI28JwAAAAChSEBAAIP4BX8G88ONdCYA
  427. VYPoAYnlV1ZTg+x8iUWkx0QkGAAAAADHRCQUAAAAAMdEJBADAAAAx0QkDAAAAADH
  428. RCQIAwAAAMdEJAQAAADAxwQkADBAAP8V/FBAAInDjUXSg+wciRwkiUQkBP8VEFFA
  429. AKFEQEAAg+wIx0QkCAoAAADHRCQEAAAAAItACIkEJOgMDAAAicahREBAAMdEJAgK
  430. AAAAx0QkBAAAAACLQAyJBCTo6gsAAGajIEBAAGajPEBAAA+3ReCJHSxAQABmK0Xc
  431. Zok1IkBAAMdFqBQAAADHRawEAAAAZqMwQEAAD7dF4mYrRd5mozJAQAC4AQAAAGaj
  432. NEBAALgBAAAAZqM2QEAAMcBmozhAQAAxwGajOkBAAKE8UUAAiUWgifaNvCcAAAAA
  433. i32soURAQADHRCQIEAAAAMdEJAQAAAAAiwS4iQQk6E0LAACJ+WajKkBAAKFEQEAA
  434. g8ECiU2si02oizQIhfYPhEkBAAAPtx5mhdsPhD0BAAAx/8dFtAAAAAAx0utSjXYA
  435. MdJmg/tcD5TCdDVmhdsPhAwCAABmg/sKD4XCAQAAD7cFPEBAAGaDBSJAQAABZqMg
  436. QEAAjbYAAAAAjbwnAAAAAIPGAg+3HmaF2w+EoQAAAIXSdK0Pt9PHRCQEgAAAAIkU
  437. JIlVsOi/CgAAhcAPhN8AAACDfbQBi1WwD44iAgAAg/9/iX3MifoPj0QDAABmhdIP
  438. hLsCAABmg/oKD4UxAgAAD7cFPEBAAGaDBSJAQAABZoP7CmajIEBAAA+FrAIAAA+3
  439. BTxAQABmgwUiQEAAAYPGAjH/MdLHRbQAAAAAZqMgQEAAD7ceZoXbD4Vi////jXYA
  440. i0W0hcB0NoP/f4l9xIn4D4+rBQAAZoXAD4RiBQAAZoP4Cg+FuAQAAA+3BTxAQABm
  441. gwUiQEAAAWajIEBAAINFqAiLTaw5TaQPj2P+//+NZfRbXl9dw410JgCNvCcAAAAA
  442. i0W0hcAPhNUAAACD/3+JfciJ+g+PNwQAAGaF0g+EDgMAAGaD+goPhYQCAAAPtwU8
  443. QEAAZoMFIkBAAAFmoyBAQAAx0maD+1wPlMIPhCACAABmhdsPhHcDAABmg/sKD4Xt
  444. AgAAD7cFPEBAAGaDBSJAQAABMf/HRbQAAAAAZqMgQEAA6Wr+//+NdgCNvCcAAAAA
  445. D7cFIEBAAGaFwHgkZjsFMEBAAH8bD7cNIkBAAGaFyXgPZjsNMkBAAA+OwgUAAGaQ
  446. g8ABZqMgQEAA6SL+//9mkGaDBSBAQAAB6RP+//+NdgBmg/tuD4RWBAAAD4YAAwAA
  447. ZoP7cg+ElgQAAGaD+3QPhSwFAAAPtwUgQEAAZoXAeDBmOwUwQEAAfycPtxUiQEAA
  448. ZoXSeBtmOxUyQEAAD44GBgAAjbQmAAAAAI28JwAAAACDwAEx0majIEBAAOmg/f//
  449. g0W0AcHnBIPqMGaD+zl2CYPLIA+304PqVwHXugEAAADpe/3//410JgCNvCcAAAAA
  450. D7cFIEBAAGaFwHh7ZjsFMEBAAH9yD7cNIkBAAGaFyXhmZjsNMkBAAH9dg8ABg8EB
  451. ZokVKEBAAGajJEBAAKE4QEAAZokNJkBAAMdEJBAgQEAAx0QkBChAQACJRCQMoTRA
  452. QACJRCQIoSxAQACJBCT/FTxRQACD7BSJ9o28JwAAAAAPtwUgQEAAg8ABZoP7Cmaj
  453. IEBAAA+EVP3//2aFwHgxZjkFMEBAAHwoD7cVIkBAAGaF0ngcZjsVMkBAAA+OngQA
  454. AOsNkJCQkJCQkJCQkJCQkIPAATH/MdJmoyBAQADHRbQAAAAA6Yf8//+NtCYAAAAA
  455. Mf/HRbQAAAAA6XL8//9mkI1FwsdEJAgBAAAAiUQkBI1FzIkEJP8VfFFAAA+3VcKD
  456. 7Azplfz//4n2jbwnAAAAAA+3BSBAQABmhcB4e2Y7BTBAQAB/cg+3DSJAQABmhcl4
  457. ZmY7DTJAQAB/XYPAAYPBAWaJFShAQABmoyRAQAChOEBAAGaJDSZAQADHRCQQIEBA
  458. AMdEJAQoQEAAiUQkDKE0QEAAiUQkCKEsQEAAiQQk/xU8UUAAg+wUifaNvCcAAAAA
  459. D7cFIEBAAIPAAWajIEBAAOn8/P//jXQmAI28JwAAAABmhcB4e2Y5BTBAQAB8cg+3
  460. DSJAQABmhcl4ZmY7DTJAQAB/XYPAAYPBAYlVtGajJEBAAKE4QEAAZokdKEBAAGaJ
  461. DSZAQADHRCQQIEBAAMdEJAQoQEAAiUQkDKE0QEAAiUQkCKEsQEAAiQQk/xU8UUAA
  462. D7cFIEBAAItVtIPsFI12AIPAATH/x0W0AAAAAGajIEBAAOkJ+///ifaNvCcAAAAA
  463. ZoP7Yg+FNgIAAA+3BSBAQABmhcAPiDb9//9mOwUwQEAAD48p/f//D7cVIkBAAGaF
  464. 0g+IGf3//2Y7FTJAQAAPjwz9//+5CAAAAGaJDShAQADp/wIAAI10JgCNvCcAAAAA
  465. jUXCx0QkCAEAAACJRCQEjUXIiQQk/xV8UUAAD7dVwoPsDOmi+///ifaNvCcAAAAA
  466. D7cVIEBAAGaF0nh0ZjsVMEBAAH9rD7cNIkBAAGaFyXhfZjsNMkBAAH9WZqMoQEAA
  467. oThAQACDwgGDwQFmiRUkQEAAx0QkECBAQABmiQ0mQEAAx0QkBChAQACJRCQMoTRA
  468. QACJRCQIoSxAQACJBCT/FTxRQAAPtxUgQEAAg+wUZpCDwgGDRagIi02sOU2kZokV
  469. IEBAAA+PNvn//+nO+v//kGaDBSBAQAABg0WoCItNrDlNpA+PGPn//+mw+v//jXYA
  470. D7cFPEBAAGaDBSJAQAABMdJmoyBAQADplPn//410JgCNRcLHRCQIAQAAAIlEJASN
  471. RcSJBCT/FXxRQAAPt0XCg+wM6S76//+J9o28JwAAAAAPtwUgQEAAZoXAD4ig+///
  472. ZjsFMEBAAA+Pk/v//w+3FSJAQABmhdIPiIP7//9mOxUyQEAAD492+///g8ABg8IB
  473. uw0AAABmoyRAQAChOEBAAGaJHShAQABmiRUmQEAAx0QkECBAQADHRCQEKEBAAIlE
  474. JAyhNEBAAIlEJAihLEBAAIkEJP9VoA+3BSBAQACD7BTpG/v//410JgCNvCcAAAAA
  475. ZoP7Cg+EBv///w+3BSBAQABmhcAPiPb6//9mOwUwQEAAD4/p+v//D7cVIkBAAGaF
  476. 0g+I2fr//2Y7FTJAQAAPj8z6//9miR0oQEAA6cQAAACDwAGDwQGJVbBmoyRAQACh
  477. OEBAAGaJHShAQABmiQ0mQEAAx0QkECBAQADHRCQEKEBAAIlEJAyhNEBAAIlEJAih
  478. LEBAAIkEJP8VPFFAAA+3BSBAQACD7BSLVbDp4fn//4PAAYPCAWaJHShAQABmoyRA
  479. QAChOEBAAGaJFSZAQADHRCQQIEBAAMdEJAQoQEAAiUQkDKE0QEAAiUQkCKEsQEAA
  480. iQQk/xU8UUAAD7cFIEBAAIPsFOkY+///uQkAAABmiQ0oQEAAg8ABg8IBx0QkECBA
  481. QABmoyRAQAChOEBAAGaJFSZAQADHRCQEKEBAAIlEJAyhNEBAAIlEJAihLEBAAIkE
  482. JP8VPFFAAA+3BSBAQACD7BTpqvn//412AI28JwAAAABVieVXVlOD7FzHRCQEojBA
  483. AMcEJAAAAADoEwIAAKFQUUAAg8AgiQQk/xVIUUAAx0QkBAAAAgCJBCT/FVhRQACh
  484. SEBAAIP4Aw+EAwEAAH8RjWX0W15fXcOJ9o28JwAAAACD6AHHRCQYAAAAAMdEJBQA
  485. AAAAiUXAx0QkEAMAAAC7DAAAAMdEJAwAAAAAx0QkCAMAAAC/AgAAAMdEJAQAAADA
  486. xwQkADBAAP8V/FBAAInCiUXEjUXSg+wciUQkBIkUJP8VEFFAAIPsCJCNtCYAAAAA
  487. oURAQADHRCQIEAAAAMdEJAQAAAAAiwS4g8cCiQQk6C0BAACLDURAQAAPt8CLNBmJ
  488. RCQEg8MIi0XEiQQk/xU0UUAAifCD7AjoBOn//zl9wH+vD7dF2ot1xIk0JIlEJAT/
  489. FTRRQACD7AiJNCT/FfhQQACD7ASNZfRbXl9dw410JgChREBAAItACOjD6P//6e3+
  490. //+NtCYAAAAAjbwnAAAAAFWJ5VdWU41F5IPsPMdF5AAAAACJRCQQx0QkDAAAAADH
  491. RCQIAEBAAMdEJAREQEAAxwQkSEBAAOjFAAAAhcB4S4M9SEBAAAF+NKFEQEAAizVc
  492. UUAAMduLeASQjbQmAAAAAIsE3UAxQACJPCSJRCQE/9aFwHQjg8MBg/sMdeShQEBA
  493. AIkEJP8VAFFAAMcEJP//////FQBRQAD/FN1EMUAA69z/JYRRQACQkP8ldFFAAJCQ
  494. /yVwUUAAkJD/JWxRQACQkP8laFFAAJCQ/yVkUUAAkJD/JWBRQACQkP8lXFFAAJCQ
  495. /yVYUUAAkJD/JVRRQACQkP8lTFFAAJCQ/yVIUUAAkJD/JURRQACQkP8lfFFAAJCQ
  496. /yU8UUAAkJD/JThRQACQkP8lNFFAAJCQ/yUwUUAAkJD/JSxRQACQkP8lKFFAAJCQ
  497. /yUkUUAAkJD/JSBRQACQkP8lHFFAAJCQ/yUYUUAAkJD/JRRRQACQkP8lEFFAAJCQ
  498. /yUMUUAAkJD/JQhRQACQkP8lBFFAAJCQ/yUAUUAAkJD/JfxQQACQkP8l+FBAAJCQ
  499. /////wAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  500. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  501. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  502. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  503. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  504. QwBPAE4ATwBVAFQAJAAAAEsARQBSAE4ARQBMADMAMgAuAEQATABMAAAAU2V0Q3Vy
  505. cmVudENvbnNvbGVGb250RXgAVABlAHIAbQBpAG4AYQBsAAAAJQBkACAAJQBkACAA
  506. JQBkACAAJQBkACAAJQBkACAAJQBkACAAJQBkACAAJQBkAAoAAABDAE8ATgBJAE4A
  507. JAAAACUAZAAgACUAZAAKAAAAAABQAFIASQBOAFQAAABGAEMAUABSAEkATgBUAAAA
  508. QwBPAEwATwBSAAAATABPAEMAQQBUAEUAAABMAEEAUwBUAEsAQgBEAAAASwBCAEQA
  509. AABNAE8AVQBTAEUAAABEAEEAVABFAFQASQBNAEUAAABTAEwARQBFAFAAAABDAFUA
  510. UgBTAE8AUgAAAEYATwBOAFQAAABQAEwAQQBZAAAAAACkMEAAACZAALAwQACAG0AA
  511. wDBAANAaQADMMEAAwBlAANowQABgGUAA6jBAABAZQADyMEAAIBhAAP4wQACwF0AA
  512. EDFAAGAXQAAcMUAAYBZAACoxQAAwFEAANDFAAIATQABHQ0M6ICh0ZG02NC0xKSA1
  513. LjEuMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  514. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkUAAAAAAAAAAAAADcUwAA
  515. +FAAALBQAAAAAAAAAAAAACBUAABEUQAA6FAAAAAAAAAAAAAAMFQAAHxRAADwUAAA
  516. AAAAAAAAAABAVAAAhFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjFEAAJpRAACoUQAA
  517. tlEAAMRRAADcUQAA7lEAAAxSAAAcUgAALlIAAD5SAABSUgAAalIAAIZSAACYUgAA
  518. qlIAAMRSAADMUgAAAAAAAOJSAAD0UgAA/lIAAAhTAAAQUwAAGlMAACZTAAAyUwAA
  519. PFMAAEhTAABUUwAAXlMAAGhTAAAAAAAAclMAAAAAAACEUwAAAAAAAIxRAACaUQAA
  520. qFEAALZRAADEUQAA3FEAAO5RAAAMUgAAHFIAAC5SAAA+UgAAUlIAAGpSAACGUgAA
  521. mFIAAKpSAADEUgAAzFIAAAAAAADiUgAA9FIAAP5SAAAIUwAAEFMAABpTAAAmUwAA
  522. MlMAADxTAABIUwAAVFMAAF5TAABoUwAAAAAAAHJTAAAAAAAAhFMAAAAAAABTAENs
  523. b3NlSGFuZGxlAJIAQ3JlYXRlRmlsZVcAGgFFeGl0UHJvY2VzcwBkAUZyZWVMaWJy
  524. YXJ5AKQBR2V0Q29uc29sZUN1cnNvckluZm8AALABR2V0Q29uc29sZU1vZGUAALYB
  525. R2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8AAAQCR2V0TG9jYWxUaW1lAABFAkdl
  526. dFByb2NBZGRyZXNzAAAsA0xvYWRMaWJyYXJ5VwAApQNSZWFkQ29uc29sZUlucHV0
  527. VwDzA1NldENvbnNvbGVDdXJzb3JJbmZvAAD1A1NldENvbnNvbGVDdXJzb3JQb3Np
  528. dGlvbgAA9wNTZXRDb25zb2xlRm9udAAAAQRTZXRDb25zb2xlTW9kZQAACgRTZXRD
  529. b25zb2xlVGV4dEF0dHJpYnV0ZQB0BFNsZWVwAOwEV3JpdGVDb25zb2xlT3V0cHV0
  530. VwB3AF9fd2dldG1haW5hcmdzAAAFAV9maWxlbm8AOwFfZ2V0Y2gAAGEBX2lvYgAA
  531. xAFfa2JoaXQAALUCX3NldG1vZGUAAI0DX3djc2ljbXAAAEsEZnB1dHdjAAB1BGlz
  532. d2N0eXBlAACqBHNldGxvY2FsZQD0BHdjc2NweQAABwV3Y3N0b2wAAA4Fd3ByaW50
  533. ZgDIAU9lbVRvQ2hhckJ1ZmZXAAAJAFBsYXlTb3VuZFcAAAAAAFAAAABQAAAAUAAA
  534. AFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAA
  535. AFAAAABQAAAAUAAAS0VSTkVMMzIuZGxsAAAAABRQAAAUUAAAFFAAABRQAAAUUAAA
  536. FFAAABRQAAAUUAAAFFAAABRQAAAUUAAAFFAAABRQAABtc3ZjcnQuZGxsAAAoUAAA
  537. VVNFUjMyLmRsbAAAPFAAAFdJTk1NLkRMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  538. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  539. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  540. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  541. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  542. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  543. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  544. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  545. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  546. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
  547. -----END CERTIFICATE-----
  548.    
  549. =================
  550. :Main script body
  551.  
  552.  Setlocal EnableDelayedExpansion
  553.  
  554.  Call :DefKeys
  555.  
  556. :# USAGE EXAMPLES // Your script below
  557.  
  558.  %BG.exe% Font 9
  559.  
  560. :# buttons containing only whitespace in their text string are identified by qInput macro as Input bars
  561. :# using findstr regex.
  562.  
  563.  Call :createButton "                            " 2 2 "0;0;0" "255;255;255" "36" -t
  564.  
  565.  Set /A "m{yo}=5", "m{\C}=2" %!!%
  566.  %Menu:Col=2% "Option 1" "Option 2" "Option 3"
  567.  %Menu:Col=l[X]% "Option 4" "Option 5" "Option 6"
  568.  %Menu:Col=l[X]% "Option 7" "Option 8" "Option 9"
  569.  
  570.  Call :createButton "Click Me" 14 2 -t
  571.  Call :createButton "{      Or Me     }" !l[Y]! !l[X]! -t
  572.  Call :createButton "Exit" 17 2 "200;;" "155;155;255" "48;2;60;;"
  573.  Call :createButton "Reset" 17 !l[X]! "200;;" "155;155;255" "48;2;;;100"
  574.  Call :createButton "Show Values" 17 !l[X]! "200;;" "155;155;255" "48;2;;90;"
  575.  
  576.  <nul set /p "=%\E%[?25l"
  577.  
  578. :refresh
  579.  %dButtons%
  580.  
  581. :loop
  582.  %GetClick%
  583.  %qClicked% If defined ValidClick (
  584.   Title Clicked Button !ValidClick! : class="re0">"!Clicked:  =!"
  585.   If "!Clicked!"=="Exit" (
  586.    <nul Set /P "=%\E%[!btn[Y]!d%\E%[G"
  587.    Goto :End
  588.   )
  589.   If "!Clicked!"=="Reset" (
  590.    Endlocal
  591.    Goto :main
  592.   )
  593.   If "!Clicked!"=="Show Values" (
  594.    %Buffer:@=Alt%
  595.    %dValues%
  596.    Pause
  597.    %Buffer:@=Main%
  598.    Goto :loop
  599.   )
  600.   %qInput% "Enter something:" -f
  601.  )Else Title Clicked: !C{Pos}!
  602. Goto :loop
  603.  
Add Comment
Please, Sign In to add comment