ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ±±Ý[CTUB]Þ±±° Custom Top Users Bulletin (Generator) PPE(c)1993-94 °±±Ý[CTUB]Þ±± ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Þ³ úúúúúúù Custom Top Users Bulletin ùúúúúúúúúú ³ Author: Robert Hunter ³Ý Þ³ úúúúúúúúù Version: 1.50 Standard ùúúúúúúúúúú ³ a.k.a: Midnight Slasher ³Ý Þ³ úúúúúúúúúúúúúúù [11/15/94] ùúúúúúúúúúúúúúúúú ³ E-Mail: mslasher@io.org ³Ý ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Þ³ CONTENTS ³ 1. Files Included 5. Distribution ³Ý Þ³ OF ³ 2. Brief Program Summary 6. Legal-ese ³Ý Þ³ DOCUMENTATION ³ 3. Installation 7. Registration / Author Notes ³Ý Þ³ ³ 4. General Program Info ³Ý ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ±±Ý FILES INCLUDED Þ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Þ³ CTUB.DOC .... 18,737 .. Documentation / Installation Guide (Please Read) Þ³ CTUB.HST ..... 1,944 .. Revision Hisotyr / Whats.New Þ³ CTUB.IN(1-5) XX,XXX .. Sample Bulletin .IN# Files (w/Replacement Codes) Þ³ CTUB.PPE .... 13,676 .. Bulletin Generator PPE Þ³ _CTUB.EXC ........ 17 .. Exclusion List File (Optional) Þ³ FILE_ID.DIZ ..... 462 .. Description Identification File ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ±±Ý PROGRAM SUMMARY Þ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ A .PPE (* PCBoard Programming Language Executable *) for PCBoard v15.2+ BBS. This program runs daily in your logoff sequence. It creates bulletins (based upon the customizable .IN# files) that display the Top Users of the system. These include the Top Callers, Top Uploaders (in Files OR Kilobytes), and Top Downloaders (in Files OR Kilobytes). You can specify how many users are to be displayed (from 1 to 25) and you can set up to 9 different output bulletins to be created. You can mix and match information in the bulletins since each is created via the usage of a template file which contains replacement codes. You can also list users to be excluded from the totals by using the .EXC file. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ±±Ý INSTALLATION Þ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ This PPE must be installed in the logoff procedure. There are many ways to accomplish this task: 1. Load all your PCBTEXT file(s) into MKPCBTXT.EXE (MKPCBTXT in /PCB/GEN) 2. Go to record entry #192 (Press F3 and then 192) 3. Replace the line with: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Record No: 192 Record Length: 40 Justification: Left ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ Minutes Used: @OPTEXT@ ³ ³ %DRIVE:\PATH\LOGOFF.TXT ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 4. Edit LOGOFF.TXT in a text editor so that it looks like: ----------------- Minutes Used: @OPTEXT@ !DRIVE:\PATH\CTUB.PPE ----------------- This makes it easy to add other PPEs into your logoff sequence, simply by adding them to the LOGOFF.TXT file. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ You then must display the output bulletins (wherever you want them placed) on your board. If you want them as bulletins, you can set them up in your BLT.LST file. (PCBSETUP - Select a Conference - Setup the bulletin by pressing F2 on the Bulletin Path/Lst file) You can also display one (or more) during the logon process, by inserting a: %C:\PCB\CTUB.BL(1-9) NOTE: The filename of the bulletin depends on which one you want displayed. This program can create up to 9 different bulletins via the .IN(1-9) files. This process is fully explained later in this file in the "Bulletin Creation" section. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ±±Ý GENERAL PROGRAM INFORMATION Þ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 1. General Operation ----------------------------------------------------------------------------- When the program is run, it first looks in the .PTR file that it creates to see when it was last run. (The .PTR file just lists the last date that the program generated the bulletins). If the date in the pointer file is the same as today's date, it does nothing, display's nothing, is completely transparent. If the date in the pointer file is not the same as today's, it will generate new bulletins. The CTUB.EXC file is a text file, listing user names (one to a line)that will be excluded from the bulletins. 2. Command Line Parameters ----------------------------------------------------------------------------- This program has the ability to use many command line parameters to help with configurability and running speed. The program defaults: Search for the Top 10 Users for ALL categories. Hang Up during Processing. Run Once per Day. /MX:?? ........ Only create the Top ?? Users. If you are creating a blt that lists the Top 20 Uploaders, you can specify: !C:\PCB\PPE\CTUB.PPE /MX:20 (1 is the minimum number, and 25 is the maximum) /NO:SC ........ Do not create totals for the Top System Callers. If you are not createing bulletins that contain the Top System Callers, there is no need to generate these totals. !C:\PCB\PPE\CTUB.PPE /MX:10 /NO:SC /NO:UF ........ Do not create totals for the Top Uploaders (Files) /NO:UK ........ Do not create totals for the Top Uploaders (Kilobytes) /NO:DF ........ Do not create totals for the Top Downloaders (Files) /NO:DK ........ Do not create totals for the Top Downloaders (Kilobytes) As with the /NO:SC (No System Caller Totals), you can specify the above parameters anywhere on the command line and the appropriate totals won't be calculated. This will increase the speed at which the generator calculates its totals for the functions you DO want generated. /FORCE ........ Forces the program to run, ignoring the .PTR (Pointer File) It will update the bulletins, even if they have already been updated today (according to the pointer file). /NHU .......... Do not hang up during processing. ----------------------------------------------------------------------------- As an example from above, lets say you want to create a Top 15 Uploaders (by Kilobytes) bulletin, and a bulletin that lists the Top 5 Downloaders (by Kilobytes). To do this, you can simply run: !C:\PCB\PPE\CTUB.PPE /MX:15 after every logoff, and it will do this on a daily basis. However, to increase the speed at which the bulletins are generated, you should use the following command line instead: !C:\PCB\PPE\CTUB.PPE /MX:15 /NO:SC /NO:UF /NO:DF Since you only require the top 15 users, and do not require totals to be generated for System Callers, Top File Uploaders, or Top File Downloaders. 3. Bulletin Creation ----------------------------------------------------------------------------- So, how do you design the bulletins? How do you limit what information is displayed in each? Answer: With the use of the .IN(1-9) files and replacement codes. You can create up to 9 bulletins, each displaying different information, or they can all display the same (but be designed differently), or you can mix and match information. When the generator is run, it will look for any CTUB.IN(1-9) files, read them in, and output them to a CTUB.BL(1-9) file. The .BL(1-9) file will have all the replacement codes from the .IN(1-9) design file replaced with the current totals. Example #1: You want to create a bulletin that lists the Top 10 Uploaders (By Kilobytes). Simply delete all the sample .IN(1-9) files. Edit CTUB.IN1 and insert the corresponding replacement codes. When the generator is run, it will replace all the codes in CTUB.IN1 and output the bulletin to CTUB.BL1. Display the CTUB.BL1 file either in your Bulletin List, login process, through another text file, or wherever you want it displayed. Example #2: You want to create one bulletin that lists both the Top 10 Uploaders and the Top 10 Downloaders. Delete all the sample CTUB.IN(1-9) files. Edit CTUB.IN1 and include any replacement codes you want. Setup CTUB.BL1 to be displayed wherever you want it. Example #3: You want to create a Top 10 Uploaders (by File) bulletin, a Top 10 Downloaders (By File) bulletin, and a Top 10 System Callers bulletin. Delete all the sample CTUB.IN(1-9) files. Edit CTUB.IN1 and design the bulletin with the replacement codes for the Top Uploaders (by File). Edit CTUB.IN2 and design the bulletin with the replacement codes for the Top Downloaders (by File) Edit CTUB.IN3 and design the bulletin with the replacement codes for the Top System Callers. Then, CTUB.BL1 will be created with the Top Uploaders (by file) CTUB.BL2 will be created with the Top Downloaders (by file) CTUB.BL3 will be created with the Top System Callers. 4. Replacement Codes ----------------------------------------------------------------------------- Each of these codes will be replaced with the corresponding information. You will see a "#" character in each of these codes. Replace this with the actual number that you want. For example: @TSC_UN1@ will be replaced with the #1 Top System Callers User Name @TUK_UK5@ will be replaced with the #5 Top Uploader's (by kilobytes) kilobytes. @TDF_DK10@ will be replaced with the #10 Top Downloader's (by file) corresponding kilobytes downloaded. None of the codes are padded at all. If you wish to box them, or make sure they are displayed at a certain co-ordinate, use the @POS:XX@ PCBoard Macro. If you still need help, please look at the contained sample .IN(1-9) files for more help on how to design the bulletins. ----------------------------------------------------------------------------- @TSC_UN#@ .. Top # System Caller's User Name @TSC_SC#@ .. Top # System Caller's System Calls ----------------------------------------------------------------------------- @TUF_UN#@ .. Top # Uploader (by File) User Name @TUF_UF#@ .. Top # Uploader (by File) Number of File's Uploaded @TUF_UK#@ .. Top # Uploader (by File) Corresponding Kilobytes Uploaded ----------------------------------------------------------------------------- @TDF_UN#@ .. Top # Downloader (by File) User Name @TDF_DF#@ .. Top # Downloader (by File) Number of File's Uploaded @TDF_DK#@ .. Top # Downloader (by File) Corresponding Kilobytes Uploaded ----------------------------------------------------------------------------- @TUK_UN#@ .. Top # Uploader (by Kilobytes) User Name @TUK_UK#@ .. Top # Uploader (by Kilobytes) Number of Kilobytes Uploaded @TUK_UF#@ .. Top # Uploader (by Kilobytes) Corresponding Files Uploaded ----------------------------------------------------------------------------- @TDK_UN#@ .. Top # Downloader (by Kilobytes) User Name @TDK_DK#@ .. Top # Downloader (by Kilobytes) Number of Kilobytes Downloaded @TDK_DF#@ .. Top # Downloader (by Kilobytes) Corresponding Files Downloaded ----------------------------------------------------------------------------- ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ±±Ý DISTRIBUTION Þ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ You are always welcome to send Internet E-Mail requesting program info, ask any questions you may have, or to request a UUEncoded copy of any supported program (that is what that specific account is for!), or: "FINGER mslasher@io.org" anytime via your internet accessible account to view up-to-date information about: þ Program information concerning the latest released version .............. þ þ Directions to official distribution site(s) ............................. þ þ A list of other supported programs ...................................... þ þ Other miscellaenous information ......................................... þ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ±±Ý LEGAL-ESE Þ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ USAGE OF THIS SOFTWARE INDICATES YOUR ACCEPTANCE OF THE SOFTWARE LICENSE TERMS ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ This software is the property of the authors, Robert Hunter / G.L., the registered copyright owners. They only license the software's use, public distribution does not transfer ownership of this copy.In addition, you assume responsibility for the selection of the software to achieve your intended results and for the installation, use and results obtained from the software. This license is effective until terminated. You may terminate it at any time by destroying the software together with all copies. You agree upon such termination to destroy the software together with all copies. Among other things, you may not: rent, lease, modify, translate, disassemble, decompile, reverse engineer, or create derivative works based upon the software. If you fail to comply with any terms of this license agreement, your license is automatically terminated. This license will be governed by the author's residential provincial or state laws except as to copyright and other proprietary matters which may be preempted by federal laws and international treaties. In the event of any dispute involving this license, the Licensee consents to exclusive jurisdiction and venue in either the authors residential provincial/state or federal courts and agrees that the prevailing party shall be entitled to its attorney fees and costs. In the event any provision of this license shall be deemed unenforceable, void, or invalid, such provision shall be modified so as to make it valid & enforceable and as so modified the entire agreement shall remain in full force and effect. No decision, action or inaction by the author(s) shall be construed to be a waiver of any rights or remedies available to them. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ BY USING OR BEING IN POSSESSION OF THIS SOFTWARE YOU ACKNOWLEDGE THAT YOU HAVE READ, UNDERSTOOD, AND AGREE TO BE BOUND BY THIS AGREEMENT'S TERMS & CONDITIONS. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ±±Ý REGISTRATION / AUTHOR NOTES Þ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ We understand that software license enforcement is far from easy; copyright violations are much easier to report to the proper authorities. We also understand that the segment of persons that might be interested in this software is not one that enjoys paying for every utility (simple or not) that they deem useful. No monetary registration is required to use this software. If you do use this software you must register is usage. Obviously we're in no position to enforce this, but a quick EMail message containing your name, your BBS name and telephone number is appreciated. This process also lets us know a) who is using what software and b) what software is being used, aiding in the prioritization of updates. We doubt this is asking for too much, considering the time spent creating this software. If you find this utility useful & wish to support its development (or support the development of this PPE in combination with other .PPEs we have publicly released) via a monetary donation, please contact us at the posted EMail address. We certainly appreciate any support you chose to give. We have always, and will always try to accomodate all users of this product. If you have a suggestion or request for an optional or permanent addition, please initiate contact by sending EMail to the posted address. -- Thank you. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Þ³ úúúù Contacting the Author Via Internet E-Mail: ùúúúú ³Ý ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±Ý Þ±± ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ